Bug #18010711 UNIQUE PREFIX INDEX ON BINARY COLUMN:

FAILING ASSERTION: FLEN == LEN

Problem:
       Broken invariant triggered when building a unique index on a
binary column and the input data contains duplicate keys. This was broken
in debug builds only.

Fix:
       Fixed length of the binary datatype can be greater than length of
the shorter prefix on which index is being created.
This commit is contained in:
Thirunarayanan B 2014-02-17 13:45:34 +05:30
parent 6923c1d9a5
commit 9ea02a1c09
3 changed files with 22 additions and 2 deletions

View file

@ -0,0 +1,9 @@
#
# Bug #18010711 UNIQUE PREFIX INDEX ON BINARY COLUMN: FAILING
# ASSERTION: FLEN == LEN
#
create table t1 (f1 binary(5)) engine=innodb;
insert into t1 values ('w'), ('w');
create unique index index_t1 on t1(f1(4));
ERROR 23000: Duplicate entry 'w' for key 'index_t1'
drop table t1;

View file

@ -0,0 +1,11 @@
--source include/have_innodb.inc
--echo #
--echo # Bug #18010711 UNIQUE PREFIX INDEX ON BINARY COLUMN: FAILING
--echo # ASSERTION: FLEN == LEN
--echo #
create table t1 (f1 binary(5)) engine=innodb;
insert into t1 values ('w'), ('w');
--error ER_DUP_ENTRY
create unique index index_t1 on t1(f1(4));
drop table t1;

View file

@ -110,16 +110,16 @@ innobase_col_to_mysql(
/* These column types should never be shipped to MySQL. */
ut_ad(0);
case DATA_FIXBINARY:
case DATA_FLOAT:
case DATA_DOUBLE:
case DATA_DECIMAL:
/* Above are the valid column types for MySQL data. */
ut_ad(flen == len);
/* fall through */
case DATA_FIXBINARY:
case DATA_CHAR:
/* We may have flen > len when there is a shorter
prefix on a CHAR column. */
prefix on the CHAR and BINARY column. */
ut_ad(flen >= len);
#else /* UNIV_DEBUG */
default: