Commit 77805812 authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi
Browse files

merge with 3.23.47

parents 55a2ab6e 05a3c0e8
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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].
+30 −3
Original line number Diff line number Diff line
@@ -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);
	}
+17 −2
Original line number Diff line number Diff line
@@ -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);

@@ -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);