summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThirunarayanan B <thirunarayanan.balathandayuth@oracle.com>2014-02-17 13:45:34 +0530
committerThirunarayanan B <thirunarayanan.balathandayuth@oracle.com>2014-02-17 13:45:34 +0530
commit255e4506517db4126a8f183d6c2f215fafd629dd (patch)
tree41a8a0b882730d8ef943ba56b49b0772965b696a
parentc187840b6ba70546f42474d316c79e09a9e8a3dc (diff)
downloadmariadb-git-255e4506517db4126a8f183d6c2f215fafd629dd.tar.gz
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.
-rw-r--r--mysql-test/suite/innodb/r/create-index.result9
-rw-r--r--mysql-test/suite/innodb/t/create-index.test11
-rw-r--r--storage/innobase/handler/handler0alter.cc4
3 files changed, 22 insertions, 2 deletions
diff --git a/mysql-test/suite/innodb/r/create-index.result b/mysql-test/suite/innodb/r/create-index.result
new file mode 100644
index 00000000000..ad358a86329
--- /dev/null
+++ b/mysql-test/suite/innodb/r/create-index.result
@@ -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;
diff --git a/mysql-test/suite/innodb/t/create-index.test b/mysql-test/suite/innodb/t/create-index.test
new file mode 100644
index 00000000000..e1e5b856aca
--- /dev/null
+++ b/mysql-test/suite/innodb/t/create-index.test
@@ -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;
diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc
index e4697319309..005f14a6f23 100644
--- a/storage/innobase/handler/handler0alter.cc
+++ b/storage/innobase/handler/handler0alter.cc
@@ -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: