Loading innobase/row/row0mysql.c +18 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -1723,6 +1725,21 @@ row_scan_and_check_index( 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", Loading @@ -1736,6 +1753,7 @@ row_scan_and_check_index( is_ok = FALSE; } else if ((index->type & DICT_UNIQUE) && !contains_null && matched_fields >= dict_index_get_n_ordering_defined_by_user(index)) { Loading Loading
innobase/row/row0mysql.c +18 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -1723,6 +1725,21 @@ row_scan_and_check_index( 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", Loading @@ -1736,6 +1753,7 @@ row_scan_and_check_index( is_ok = FALSE; } else if ((index->type & DICT_UNIQUE) && !contains_null && matched_fields >= dict_index_get_n_ordering_defined_by_user(index)) { Loading