From e98aecc2e0369f1da52ef8b13e911183dd5e2cda Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 8 Jul 2011 10:51:53 +0300 Subject: [PATCH] Test for bug lp:611382 The bug itself has been fixed by MWL#89. --- mysql-test/r/subselect4.result | 38 ++++++++++++++++++++++++++++++++++ mysql-test/t/subselect4.test | 38 ++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/mysql-test/r/subselect4.result b/mysql-test/r/subselect4.result index e8295b371e3..d0f546200dd 100644 --- a/mysql-test/r/subselect4.result +++ b/mysql-test/r/subselect4.result @@ -1973,4 +1973,42 @@ f1 (SELECT f2 FROM t1 WHERE (7) IN (SELECT f1 FROM t1)) 23 NULL set @@optimizer_switch = @old_optimizer_switch; drop table t1, t2, t3; +# +# LP BUG#611382 RQG: Query returns extra rows when executed with materialization=on +# +CREATE TABLE t1 ( f4 varchar(1)) ENGINE=MyISAM; +INSERT INTO t1 VALUES (NULL); +CREATE TABLE t2 ( f2 date, f3 varchar(1), f4 varchar(1)) ; +INSERT INTO t2 VALUES ('2005-05-03','c','c'),('1900-01-01','d','d'); +CREATE TABLE t3 ( f3 varchar(1)) ; +INSERT INTO t3 VALUES ('c'); +set @old_optimizer_switch = @@optimizer_switch; +set @@optimizer_switch = 'materialization=on,in_to_exists=off,semijoin=off'; +EXPLAIN SELECT t1.f4 +FROM t1 JOIN ( t2 JOIN t3 ON t3.f3 = t2.f4 ) ON t3.f3 = t2.f3 +WHERE t1.f4 IN ( SELECT f4 FROM t2 ) ; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 system NULL NULL NULL NULL 1 +1 PRIMARY t3 system NULL NULL NULL NULL 1 +1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where +2 SUBQUERY t2 ALL NULL NULL NULL NULL 2 +SELECT t1.f4 +FROM t1 JOIN ( t2 JOIN t3 ON t3.f3 = t2.f4 ) ON t3.f3 = t2.f3 +WHERE t1.f4 IN ( SELECT f4 FROM t2 ) ; +f4 +set @@optimizer_switch = 'materialization=off,in_to_exists=on,semijoin=off'; +EXPLAIN SELECT t1.f4 +FROM t1 JOIN ( t2 JOIN t3 ON t3.f3 = t2.f4 ) ON t3.f3 = t2.f3 +WHERE t1.f4 IN ( SELECT f4 FROM t2 ) ; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY t1 system NULL NULL NULL NULL 1 +1 PRIMARY t3 system NULL NULL NULL NULL 1 +1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where +2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 2 Using where +SELECT t1.f4 +FROM t1 JOIN ( t2 JOIN t3 ON t3.f3 = t2.f4 ) ON t3.f3 = t2.f3 +WHERE t1.f4 IN ( SELECT f4 FROM t2 ) ; +f4 +set @@optimizer_switch = @old_optimizer_switch; +drop table t1, t2, t3; set optimizer_switch=@subselect4_tmp; diff --git a/mysql-test/t/subselect4.test b/mysql-test/t/subselect4.test index 45b67c69fe6..3af8528a105 100644 --- a/mysql-test/t/subselect4.test +++ b/mysql-test/t/subselect4.test @@ -1627,4 +1627,42 @@ set @@optimizer_switch = @old_optimizer_switch; drop table t1, t2, t3; + +--echo # +--echo # LP BUG#611382 RQG: Query returns extra rows when executed with materialization=on +--echo # + +CREATE TABLE t1 ( f4 varchar(1)) ENGINE=MyISAM; +INSERT INTO t1 VALUES (NULL); +CREATE TABLE t2 ( f2 date, f3 varchar(1), f4 varchar(1)) ; +INSERT INTO t2 VALUES ('2005-05-03','c','c'),('1900-01-01','d','d'); +CREATE TABLE t3 ( f3 varchar(1)) ; +INSERT INTO t3 VALUES ('c'); + +set @old_optimizer_switch = @@optimizer_switch; + +set @@optimizer_switch = 'materialization=on,in_to_exists=off,semijoin=off'; + +EXPLAIN SELECT t1.f4 +FROM t1 JOIN ( t2 JOIN t3 ON t3.f3 = t2.f4 ) ON t3.f3 = t2.f3 +WHERE t1.f4 IN ( SELECT f4 FROM t2 ) ; + +SELECT t1.f4 +FROM t1 JOIN ( t2 JOIN t3 ON t3.f3 = t2.f4 ) ON t3.f3 = t2.f3 +WHERE t1.f4 IN ( SELECT f4 FROM t2 ) ; + +set @@optimizer_switch = 'materialization=off,in_to_exists=on,semijoin=off'; + +EXPLAIN SELECT t1.f4 +FROM t1 JOIN ( t2 JOIN t3 ON t3.f3 = t2.f4 ) ON t3.f3 = t2.f3 +WHERE t1.f4 IN ( SELECT f4 FROM t2 ) ; + +SELECT t1.f4 +FROM t1 JOIN ( t2 JOIN t3 ON t3.f3 = t2.f4 ) ON t3.f3 = t2.f3 +WHERE t1.f4 IN ( SELECT f4 FROM t2 ) ; + +set @@optimizer_switch = @old_optimizer_switch; + +drop table t1, t2, t3; + set optimizer_switch=@subselect4_tmp;