# # Hash semi-join regression tests # (WL#1110: Subquery optimization: materialization) # # force the use of materialization set @@optimizer_switch='semijoin=off'; --source t/subselect_sj_mat.test set @@optimizer_switch=default; # # Test that the contents of the temp table of a materialized subquery is # cleaned up between PS re-executions. # create table t0 (a int); insert into t0 values (0),(1),(2); create table t1 (a int); insert into t1 values (0),(1),(2); explain select a, a in (select a from t1) from t0; select a, a in (select a from t1) from t0; prepare s from 'select a, a in (select a from t1) from t0'; execute s; update t1 set a=123; execute s; drop table t0, t1; --echo # --echo # LPBUG#609121: RQG: wrong result on aggregate + NOT IN + HAVING and --echo # partial_match_table_scan=on --echo # create table t1 (c1 int); create table t2 (c2 int); insert into t1 values (1); insert into t2 values (2); set @@optimizer_switch='semijoin=off'; EXPLAIN SELECT SUM(c1) c1_sum FROM t1 WHERE c1 IN (SELECT c2 FROM t2); SELECT SUM(c1) c1_sum FROM t1 WHERE c1 IN (SELECT c2 FROM t2); EXPLAIN SELECT SUM(c1) c1_sum FROM t1 WHERE c1 IN (SELECT c2 FROM t2) HAVING c1_sum; SELECT SUM(c1) c1_sum FROM t1 WHERE c1 IN (SELECT c2 FROM t2) HAVING c1_sum; drop table t1, t2; --echo # --echo # BUG#52344 - Subquery materialization: --echo # Assertion if subquery in on-clause of outer join --echo # set @@optimizer_switch='semijoin=off'; CREATE TABLE t1 (i INTEGER); INSERT INTO t1 VALUES (10); CREATE TABLE t2 (j INTEGER); INSERT INTO t2 VALUES (5); CREATE TABLE t3 (k INTEGER); EXPLAIN SELECT i FROM t1 LEFT JOIN t2 ON (j) IN (SELECT k FROM t3); SELECT i FROM t1 LEFT JOIN t2 ON (j) IN (SELECT k FROM t3); EXPLAIN SELECT i FROM t1 LEFT JOIN t2 ON (j) IN (SELECT max(k) FROM t3); SELECT i FROM t1 LEFT JOIN t2 ON (j) IN (SELECT max(k) FROM t3); DROP TABLE t1, t2, t3; --echo # --echo # LPBUG#609121: RQG: wrong result on aggregate + NOT IN + HAVING and --echo # partial_match_table_scan=on --echo # CREATE TABLE t1 (c1 int); INSERT INTO t1 VALUES (1),(2); CREATE TABLE t2 (c2 int); INSERT INTO t2 VALUES (10); PREPARE st1 FROM " SELECT * FROM t2 LEFT JOIN (SELECT * FROM t2) t3 ON (8, 4) IN (SELECT c1, c1 FROM t1)"; EXECUTE st1; EXECUTE st1; DROP TABLE t1, t2; --echo # --echo # Testcase backport: BUG#46548 IN-subqueries return 0 rows with materialization=on --echo # CREATE TABLE t1 ( pk int, a varchar(1), b varchar(4), c varchar(4), d varchar(4), PRIMARY KEY (pk) ); INSERT INTO t1 VALUES (1,'o','ffff','ffff','ffoo'),(2,'f','ffff','ffff','ffff'); CREATE TABLE t2 LIKE t1; INSERT INTO t2 VALUES (1,'i','iiii','iiii','iiii'),(2,'f','ffff','ffff','ffff'); SET @@optimizer_switch='default,semijoin=on,materialization=on'; EXPLAIN SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0); SELECT pk FROM t1 WHERE (a) IN (SELECT a FROM t2 WHERE pk > 0); SELECT pk FROM t1 WHERE (b,c,d) IN (SELECT b,c,d FROM t2 WHERE pk > 0); DROP TABLE t1, t2;