summaryrefslogtreecommitdiff
path: root/innobase
diff options
context:
space:
mode:
authorheikki@donna.mysql.fi <>2001-12-31 14:41:58 +0200
committerheikki@donna.mysql.fi <>2001-12-31 14:41:58 +0200
commit410847fac6c1413d744895055168358cbd963474 (patch)
tree8fceaa4df96965bb92e3b6a5627bbbd8969d0126 /innobase
parent64c00f98f08e6a6013e0903966f1c1f931f40be1 (diff)
downloadmariadb-git-410847fac6c1413d744895055168358cbd963474.tar.gz
row0mysql.c:
Remove erroneous warning of a duplicate key when the key in a UNIQUE secondary index contains a NULL
Diffstat (limited to 'innobase')
-rw-r--r--innobase/row/row0mysql.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c
index 58bddcfd24a..9622a7cee32 100644
--- a/innobase/row/row0mysql.c
+++ b/innobase/row/row0mysql.c
@@ -1678,6 +1678,8 @@ row_scan_and_check_index(
rec_t* rec;
ibool is_ok = TRUE;
int cmp;
+ ibool contains_null;
+ ulint i;
char err_buf[1000];
*n_rows = 0;
@@ -1723,6 +1725,21 @@ loop:
cmp = cmp_dtuple_rec_with_match(prev_entry, rec,
&matched_fields,
&matched_bytes);
+ contains_null = FALSE;
+
+ /* In a unique secondary index we allow equal key values if
+ they contain SQL NULLs */
+
+ for (i = 0;
+ i < dict_index_get_n_ordering_defined_by_user(index);
+ i++) {
+ if (UNIV_SQL_NULL == dfield_get_len(
+ dtuple_get_nth_field(prev_entry, i))) {
+
+ contains_null = TRUE;
+ }
+ }
+
if (cmp > 0) {
fprintf(stderr,
"Error: index records in a wrong order in index %s\n",
@@ -1736,6 +1753,7 @@ loop:
is_ok = FALSE;
} else if ((index->type & DICT_UNIQUE)
+ && !contains_null
&& matched_fields >=
dict_index_get_n_ordering_defined_by_user(index)) {