summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMonty <monty@mariadb.org>2019-04-19 13:22:01 +0300
committerMonty <monty@mariadb.org>2019-04-19 13:22:01 +0300
commit38f390f54970042b3fcad61b2aba25e274667176 (patch)
treecfd1a2bc73c273df52535fa46dc3ad64350df38a
parentc07e346ca647037b109a99560fb9be3f799f2d24 (diff)
downloadmariadb-git-38f390f54970042b3fcad61b2aba25e274667176.tar.gz
MDEV-19224 Assertion `marked_for_read()' failed
Problem was that wrong key_info variable was used, which caused UNIQUE key to be used as a covering key
-rw-r--r--mysql-test/main/unique.result5
-rw-r--r--mysql-test/main/unique.test10
-rw-r--r--sql/table.cc3
3 files changed, 17 insertions, 1 deletions
diff --git a/mysql-test/main/unique.result b/mysql-test/main/unique.result
index fbd937f0434..e982e1c4163 100644
--- a/mysql-test/main/unique.result
+++ b/mysql-test/main/unique.result
@@ -1,3 +1,8 @@
+CREATE TABLE t1 (pk INT AUTO_INCREMENT PRIMARY KEY, a varchar(30000), UNIQUE (a)) ENGINE=innodb;
+INSERT INTO t1 (a) VALUES (20),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
+SELECT * FROM t1 WHERE a BETWEEN '1' AND '100';
+pk a
+DROP TABLE t1;
CREATE TABLE t2 (n BLOB, UNIQUE(n));
INSERT INTO t2 VALUES (1);
DELETE FROM t2 WHERE n = 1;
diff --git a/mysql-test/main/unique.test b/mysql-test/main/unique.test
index 549336bfcd1..677ceb15a79 100644
--- a/mysql-test/main/unique.test
+++ b/mysql-test/main/unique.test
@@ -1,6 +1,16 @@
--source include/have_innodb.inc
#
+# MDEV-19224 Assertion `marked_for_read()' failed in various places with long
+# unique key
+#
+
+CREATE TABLE t1 (pk INT AUTO_INCREMENT PRIMARY KEY, a varchar(30000), UNIQUE (a)) ENGINE=innodb;
+INSERT INTO t1 (a) VALUES (20),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
+SELECT * FROM t1 WHERE a BETWEEN '1' AND '100';
+DROP TABLE t1;
+
+#
# MDEV-19252 Warning about assertion failure marked_for_write_or_computed()
# printed by release build with DBUG_ASSERT_AS_PRINTF, but no failure on debug
# build
diff --git a/sql/table.cc b/sql/table.cc
index e0330294c14..dcf74172b41 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -2690,7 +2690,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write,
field->key_start.set_bit(key);
if (field->key_length() == key_part->length &&
!(field->flags & BLOB_FLAG) &&
- key_info->algorithm != HA_KEY_ALG_LONG_HASH)
+ keyinfo->algorithm != HA_KEY_ALG_LONG_HASH)
{
if (handler_file->index_flags(key, i, 0) & HA_KEYREAD_ONLY)
{
@@ -9409,6 +9409,7 @@ bool vers_select_conds_t::eq(const vers_select_conds_t &conds) const
return true;
case SYSTEM_TIME_BEFORE:
DBUG_ASSERT(0);
+ return false;
case SYSTEM_TIME_AS_OF:
return start.eq(conds.start);
case SYSTEM_TIME_FROM_TO: