diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2018-01-29 09:44:17 +0100 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2018-01-29 09:44:17 +0100 |
commit | d337368470eb935ed69ecc441626e021b70aba0d (patch) | |
tree | fa1d211b118f3184aa5e1d68153c8d9d2d1be66a | |
parent | d01dbe66a8bf9cb6031f95159c49100f9299a768 (diff) | |
download | mariadb-git-bb-10.0-MDEV-14862v2.tar.gz |
MDEV-14862: Server crashes in Bitmap<64u>::merge / add_key_fieldbb-10.0-MDEV-14862v2
Do not unwrapp view references to keep table info.
(Row-IN subselect do not unwrap items so it does not need fix)
-rw-r--r-- | mysql-test/r/update_innodb.result | 10 | ||||
-rw-r--r-- | mysql-test/t/update_innodb.test | 13 | ||||
-rw-r--r-- | sql/item_subselect.cc | 5 |
3 files changed, 27 insertions, 1 deletions
diff --git a/mysql-test/r/update_innodb.result b/mysql-test/r/update_innodb.result index 88c86c50625..6dae6abebb1 100644 --- a/mysql-test/r/update_innodb.result +++ b/mysql-test/r/update_innodb.result @@ -29,3 +29,13 @@ CREATE ALGORITHM=UNDEFINED VIEW `v1` AS select `t4`.`c1` AS `c1`,`t4`.`c2` AS `c UPDATE t1 a JOIN t2 b ON a.c1 = b.c1 JOIN v1 vw ON b.c2 = vw.c1 JOIN t3 del ON vw.c2 = del.c2 SET a.c2 = ( SELECT max(t.c1) FROM t3 t, v1 i WHERE del.c2 = t.c2 AND vw.c3 = i.c3 AND t.c3 = 4 ) WHERE a.c2 IS NULL OR a.c2 < '2011-05-01'; drop view v1; drop table t1,t2,t3,t4; +# +# MDEV-14862: Server crashes in Bitmap<64u>::merge / add_key_field +# +CREATE TABLE t1 (a INT) ENGINE=InnoDB; +CREATE VIEW v1 AS SELECT * FROM t1; +CREATE TABLE t2 (b INT) ENGINE=InnoDB; +DELETE FROM v1 WHERE a IN ( SELECT a FROM t2 ); +DELETE FROM v1 WHERE (a,a) IN ( SELECT a,a FROM t2 ); +drop view v1; +drop table t1,t2; diff --git a/mysql-test/t/update_innodb.test b/mysql-test/t/update_innodb.test index 67c356c4e2e..059ae8abbb0 100644 --- a/mysql-test/t/update_innodb.test +++ b/mysql-test/t/update_innodb.test @@ -37,3 +37,16 @@ UPDATE t1 a JOIN t2 b ON a.c1 = b.c1 JOIN v1 vw ON b.c2 = vw.c1 JOIN t3 del ON v drop view v1; drop table t1,t2,t3,t4; + +--echo # +--echo # MDEV-14862: Server crashes in Bitmap<64u>::merge / add_key_field +--echo # + +CREATE TABLE t1 (a INT) ENGINE=InnoDB; +CREATE VIEW v1 AS SELECT * FROM t1; +CREATE TABLE t2 (b INT) ENGINE=InnoDB; +DELETE FROM v1 WHERE a IN ( SELECT a FROM t2 ); +DELETE FROM v1 WHERE (a,a) IN ( SELECT a,a FROM t2 ); + +drop view v1; +drop table t1,t2; diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 8e8748be87a..4b45dc16609 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -2070,7 +2070,10 @@ Item_in_subselect::create_single_in_to_exists_cond(JOIN *join, } else { - Item *item= (Item*) select_lex->item_list.head()->real_item(); + Item *item= (Item*) select_lex->item_list.head(); + if (item->type() != REF_ITEM || + ((Item_ref*)item)->ref_type() != Item_ref::VIEW_REF) + item= item->real_item(); if (select_lex->table_list.elements) { |