Loading Docs/manual.texi +6 −0 Original line number Diff line number Diff line Loading @@ -48099,6 +48099,12 @@ not yet 100% confident in this code. @appendixsubsec Changes in release 3.23.47 @itemize @bullet @item InnoDB now supports @code{NULL} in keys. @item Fixed shutdown problem on HPUX. (Introduced in 3.23.46) @item Added 'DO expression' command. @item Fixed core-dump bug in replication when using SELECT RELEASE_LOCK(); @item Added new statement DO expression,[expression]. innobase/log/log0recv.c +30 −3 Original line number Diff line number Diff line Loading @@ -564,8 +564,15 @@ recv_parse_or_apply_log_rec_body( } else if (type <= MLOG_WRITE_STRING) { new_ptr = mlog_parse_string(ptr, end_ptr, page); } else { new_ptr = NULL; /* Eliminate compiler warning */ ut_error; new_ptr = NULL; fprintf(stderr, "InnoDB: WARNING: the log file may have been corrupt and it\n" "InnoDB: is possible that the log scan did not proceed\n" "InnoDB: far enough in recovery. Please run CHECK TABLE\n" "InnoDB: on your InnoDB tables to check that they are ok!\n" "InnoDB: Corrupt log record type %lu\n", (ulint)type); } ut_ad(!page || new_ptr); Loading Loading @@ -1316,9 +1323,29 @@ recv_parse_log_rec( new_ptr = mlog_parse_initial_log_record(ptr, end_ptr, type, space, page_no); /* If the operating system writes to the log complete 512-byte blocks, we should not get the warnings below in recovery. A warning means that the header and the trailer appeared ok in a 512-byte block, but in the middle there was something wrong. TODO: (1) add similar warnings in the case there is an incompletely written log record which does not extend to the boundary of a 512-byte block. (2) Add a checksum to a log block. */ if (!new_ptr) { return(0); } /* Check that space id and page_no are sensible */ if (!new_ptr || *space != 0 || *page_no > 0x8FFFFFFF) { if (*space != 0 || *page_no > 0x8FFFFFFF) { fprintf(stderr, "InnoDB: WARNING: the log file may have been corrupt and it\n" "InnoDB: is possible that the log scan did not proceed\n" "InnoDB: far enough in recovery. Please run CHECK TABLE\n" "InnoDB: on your InnoDB tables to check that they are ok!\n" "InnoDB: Corrupt log record type %lu, space id %lu, page no %lu\n", (ulint)(*type), *space, *page_no); return(0); } Loading innobase/row/row0ins.c +17 −2 Original line number Diff line number Diff line Loading @@ -319,6 +319,7 @@ row_ins_dupl_error_with_rec( ulint matched_fields; ulint matched_bytes; ulint n_unique; ulint i; n_unique = dict_index_get_n_unique(index); Loading @@ -332,6 +333,20 @@ row_ins_dupl_error_with_rec( return(FALSE); } /* In a unique secondary index we allow equal key values if they contain SQL NULLs */ if (!(index->type & DICT_CLUSTERED)) { for (i = 0; i < n_unique; i++) { if (UNIV_SQL_NULL == dfield_get_len( dtuple_get_nth_field(entry, i))) { return(FALSE); } } } if (!rec_get_deleted_flag(rec)) { return(TRUE); Loading Loading
Docs/manual.texi +6 −0 Original line number Diff line number Diff line Loading @@ -48099,6 +48099,12 @@ not yet 100% confident in this code. @appendixsubsec Changes in release 3.23.47 @itemize @bullet @item InnoDB now supports @code{NULL} in keys. @item Fixed shutdown problem on HPUX. (Introduced in 3.23.46) @item Added 'DO expression' command. @item Fixed core-dump bug in replication when using SELECT RELEASE_LOCK(); @item Added new statement DO expression,[expression].
innobase/log/log0recv.c +30 −3 Original line number Diff line number Diff line Loading @@ -564,8 +564,15 @@ recv_parse_or_apply_log_rec_body( } else if (type <= MLOG_WRITE_STRING) { new_ptr = mlog_parse_string(ptr, end_ptr, page); } else { new_ptr = NULL; /* Eliminate compiler warning */ ut_error; new_ptr = NULL; fprintf(stderr, "InnoDB: WARNING: the log file may have been corrupt and it\n" "InnoDB: is possible that the log scan did not proceed\n" "InnoDB: far enough in recovery. Please run CHECK TABLE\n" "InnoDB: on your InnoDB tables to check that they are ok!\n" "InnoDB: Corrupt log record type %lu\n", (ulint)type); } ut_ad(!page || new_ptr); Loading Loading @@ -1316,9 +1323,29 @@ recv_parse_log_rec( new_ptr = mlog_parse_initial_log_record(ptr, end_ptr, type, space, page_no); /* If the operating system writes to the log complete 512-byte blocks, we should not get the warnings below in recovery. A warning means that the header and the trailer appeared ok in a 512-byte block, but in the middle there was something wrong. TODO: (1) add similar warnings in the case there is an incompletely written log record which does not extend to the boundary of a 512-byte block. (2) Add a checksum to a log block. */ if (!new_ptr) { return(0); } /* Check that space id and page_no are sensible */ if (!new_ptr || *space != 0 || *page_no > 0x8FFFFFFF) { if (*space != 0 || *page_no > 0x8FFFFFFF) { fprintf(stderr, "InnoDB: WARNING: the log file may have been corrupt and it\n" "InnoDB: is possible that the log scan did not proceed\n" "InnoDB: far enough in recovery. Please run CHECK TABLE\n" "InnoDB: on your InnoDB tables to check that they are ok!\n" "InnoDB: Corrupt log record type %lu, space id %lu, page no %lu\n", (ulint)(*type), *space, *page_no); return(0); } Loading
innobase/row/row0ins.c +17 −2 Original line number Diff line number Diff line Loading @@ -319,6 +319,7 @@ row_ins_dupl_error_with_rec( ulint matched_fields; ulint matched_bytes; ulint n_unique; ulint i; n_unique = dict_index_get_n_unique(index); Loading @@ -332,6 +333,20 @@ row_ins_dupl_error_with_rec( return(FALSE); } /* In a unique secondary index we allow equal key values if they contain SQL NULLs */ if (!(index->type & DICT_CLUSTERED)) { for (i = 0; i < n_unique; i++) { if (UNIV_SQL_NULL == dfield_get_len( dtuple_get_nth_field(entry, i))) { return(FALSE); } } } if (!rec_get_deleted_flag(rec)) { return(TRUE); Loading