merge with 3.23.47
This commit is contained in:
commit
778058123b
@ -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].
|
||||
|
@ -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);
|
||||
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
@ -329,12 +330,26 @@ row_ins_dupl_error_with_rec(
|
||||
|
||||
if (matched_fields < n_unique) {
|
||||
|
||||
return(FALSE);
|
||||
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);
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
return(FALSE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user