diff options
author | Monty <monty@mariadb.org> | 2019-04-19 13:22:01 +0300 |
---|---|---|
committer | Monty <monty@mariadb.org> | 2019-04-19 13:22:01 +0300 |
commit | 38f390f54970042b3fcad61b2aba25e274667176 (patch) | |
tree | cfd1a2bc73c273df52535fa46dc3ad64350df38a | |
parent | c07e346ca647037b109a99560fb9be3f799f2d24 (diff) | |
download | mariadb-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.result | 5 | ||||
-rw-r--r-- | mysql-test/main/unique.test | 10 | ||||
-rw-r--r-- | sql/table.cc | 3 |
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: |