From cf959c0a8972845e5c7af6030b51e6c06dcf830c Mon Sep 17 00:00:00 2001 From: Kamil Holubicki Date: Fri, 17 Jan 2020 11:30:29 +0100 Subject: [PATCH] bug98258 test + mtr test --- .../suite/opt_trace/r/semijoin_off.result | 36 +++++++++++++++++++ .../suite/opt_trace/t/semijoin_off.test | 33 +++++++++++++++++ sql/item_subselect.cc | 1 + 3 files changed, 70 insertions(+) create mode 100644 mysql-test/suite/opt_trace/r/semijoin_off.result create mode 100644 mysql-test/suite/opt_trace/t/semijoin_off.test diff --git a/mysql-test/suite/opt_trace/r/semijoin_off.result b/mysql-test/suite/opt_trace/r/semijoin_off.result new file mode 100644 index 00000000000..b1ba8bedcc7 --- /dev/null +++ b/mysql-test/suite/opt_trace/r/semijoin_off.result @@ -0,0 +1,36 @@ +CREATE TABLE t1(name VARCHAR(64), type TEXT) ENGINE=innodb; +INSERT INTO t1(name, type) VALUES ("t1", "table"); +INSERT INTO t1(name, type) VALUES ("t2", "table"); +INSERT INTO t1(name, type) VALUES ("t3", "table"); +INSERT INTO t1(name, type) VALUES ("t4", "table"); +INSERT INTO t1(name, type) VALUES ("t5", "table"); +INSERT INTO t1(name, type) VALUES ("t6", "table"); +INSERT INTO t1(name, type) VALUES ("t7", "table"); +INSERT INTO t1(name, type) VALUES ("t8", "table"); +INSERT INTO t1(name, type) VALUES ("t9", "table"); +INSERT INTO t1(name, type) VALUES ("t10", "table"); +INSERT INTO t1(name, type) VALUES ("t11", "table"); +CREATE TABLE t2(name VARCHAR(64), data TEXT) ENGINE=innodb; +INSERT INTO t2(name, data) VALUES("t1", "data"); +INSERT INTO t2(name, data) VALUES("t2", "data"); +INSERT INTO t2(name, data) VALUES("t3", "data"); +INSERT INTO t2(name, data) VALUES("t4", "data"); +INSERT INTO t2(name, data) VALUES("t5", "data"); +INSERT INTO t2(name, data) VALUES("t6", "data"); +INSERT INTO t2(name, data) VALUES("t7", "data"); +INSERT INTO t2(name, data) VALUES("t8", "data"); +SET SESSION internal_tmp_mem_storage_engine=MEMORY; +SET @@session.optimizer_trace="enabled=on"; +SET @@session.tmp_table_size = 1024; +SET @@optimizer_switch="semijoin=off"; +SELECT name, data FROM t2 WHERE name IN ( SELECT name FROM t1 WHERE type='table'); +name data +t1 data +t2 data +t3 data +t4 data +t5 data +t6 data +t7 data +t8 data +DROP TABLE t1, t2; diff --git a/mysql-test/suite/opt_trace/t/semijoin_off.test b/mysql-test/suite/opt_trace/t/semijoin_off.test new file mode 100644 index 00000000000..5ef5f279c2d --- /dev/null +++ b/mysql-test/suite/opt_trace/t/semijoin_off.test @@ -0,0 +1,33 @@ +--source include/have_optimizer_trace.inc + +CREATE TABLE t1(name VARCHAR(64), type TEXT) ENGINE=innodb; +INSERT INTO t1(name, type) VALUES ("t1", "table"); +INSERT INTO t1(name, type) VALUES ("t2", "table"); +INSERT INTO t1(name, type) VALUES ("t3", "table"); +INSERT INTO t1(name, type) VALUES ("t4", "table"); +INSERT INTO t1(name, type) VALUES ("t5", "table"); +INSERT INTO t1(name, type) VALUES ("t6", "table"); +INSERT INTO t1(name, type) VALUES ("t7", "table"); +INSERT INTO t1(name, type) VALUES ("t8", "table"); +INSERT INTO t1(name, type) VALUES ("t9", "table"); +INSERT INTO t1(name, type) VALUES ("t10", "table"); +INSERT INTO t1(name, type) VALUES ("t11", "table"); + +CREATE TABLE t2(name VARCHAR(64), data TEXT) ENGINE=innodb; +INSERT INTO t2(name, data) VALUES("t1", "data"); +INSERT INTO t2(name, data) VALUES("t2", "data"); +INSERT INTO t2(name, data) VALUES("t3", "data"); +INSERT INTO t2(name, data) VALUES("t4", "data"); +INSERT INTO t2(name, data) VALUES("t5", "data"); +INSERT INTO t2(name, data) VALUES("t6", "data"); +INSERT INTO t2(name, data) VALUES("t7", "data"); +INSERT INTO t2(name, data) VALUES("t8", "data"); + +SET SESSION internal_tmp_mem_storage_engine=MEMORY; +SET @@session.optimizer_trace="enabled=on"; +SET @@session.tmp_table_size = 1024; +SET @@optimizer_switch="semijoin=off"; + +SELECT name, data FROM t2 WHERE name IN ( SELECT name FROM t1 WHERE type='table'); + +DROP TABLE t1, t2; diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index a256a15cdcc..81aedc49638 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -3352,6 +3352,7 @@ bool subselect_hash_sj_engine::setup(THD *thd, List *tmp_columns) { if (tmp_tab_st == NULL) return true; tab = &tmp_tab_st->as_QEP_TAB(); tab->set_table(tmp_table); + tab->set_idx(0); tab->ref().key = 0; /* The only temp table index. */ tab->ref().key_length = tmp_key->key_length; tab->set_type((tmp_table->key_info[0].flags & HA_NOSAME) ? JT_EQ_REF -- 2.17.1