summaryrefslogtreecommitdiff
path: root/mysql-test/t/func_in.test
diff options
context:
space:
mode:
authorunknown <gkodinov/kgeorge@macbook.gmz>2007-02-16 13:56:06 +0200
committerunknown <gkodinov/kgeorge@macbook.gmz>2007-02-16 13:56:06 +0200
commit652a090a6f26ec60acebc36018a0a827a57442f1 (patch)
tree1c4284dd60d2c980e91bf41fc6d8eaff2974d489 /mysql-test/t/func_in.test
parent19ce865686ec43780d14ca43aa0d516bf5b36c8b (diff)
downloadmariadb-git-652a090a6f26ec60acebc36018a0a827a57442f1.tar.gz
BUG#20420: optimizer reports wrong keys on left join with IN
When checking if an IN predicate can be evaluated using a key the optimizer makes sure that all the arguments of IN are of the same result type. To assure that it check whether Item_func_in::array is filled in. However Item_func_in::array is set if the types are the same AND all the arguments are compile time constants. Fixed by introducing Item_func_in::arg_types_compatible flag to allow correct checking of the desired condition. mysql-test/r/func_in.result: BUG#20420: optimizer reports wrong keys on left join with IN - reenabled the test case mysql-test/t/func_in.test: BUG#20420: optimizer reports wrong keys on left join with IN - reenabled the test case sql/item_cmpfunc.cc: BUG#20420: optimizer reports wrong keys on left join with IN Check the IN argument types in a correct way sql/item_cmpfunc.h: BUG#20420: optimizer reports wrong keys on left join with IN Check the IN argument types in a correct way sql/opt_range.cc: BUG#20420: optimizer reports wrong keys on left join with IN Check the IN argument types in a correct way
Diffstat (limited to 'mysql-test/t/func_in.test')
-rw-r--r--mysql-test/t/func_in.test71
1 files changed, 35 insertions, 36 deletions
diff --git a/mysql-test/t/func_in.test b/mysql-test/t/func_in.test
index 2a2d5535915..1528c337c3e 100644
--- a/mysql-test/t/func_in.test
+++ b/mysql-test/t/func_in.test
@@ -254,44 +254,43 @@ select some_id from t1 where some_id not in(-4,-1,-4);
select some_id from t1 where some_id not in(-4,-1,3423534,2342342);
drop table t1;
-# TODO:Disabled until re-resolution of bug #20420 for 5.1.
-# Results must be the same as in 5.0
-##
-## BUG#20420: optimizer reports wrong keys on left join with IN
-##
-#CREATE TABLE t1 (a int, b int, PRIMARY KEY (a));
-#INSERT INTO t1 VALUES (1,1),(2,1),(3,1),(4,1),(5,1),(6,1);
#
-#CREATE TABLE t2 (a int, b int, PRIMARY KEY (a));
-#INSERT INTO t2 VALUES (3,2),(4,2),(100,100),(101,201),(102,102);
+# BUG#20420: optimizer reports wrong keys on left join with IN
#
-#CREATE TABLE t3 (a int PRIMARY KEY);
-#INSERT INTO t3 VALUES (1),(2),(3),(4);
-#
-#CREATE TABLE t4 (a int PRIMARY KEY,b int);
-#INSERT INTO t4 VALUES (1,1),(2,2),(1000,1000),(1001,1001),(1002,1002),(1003,1003),(1004,1004);
-#
-#EXPLAIN SELECT STRAIGHT_JOIN * FROM t3
-# JOIN t1 ON t3.a=t1.a
-# JOIN t2 ON t3.a=t2.a
-# JOIN t4 WHERE t4.a IN (t1.b, t2.b);
-#
-#SELECT STRAIGHT_JOIN * FROM t3
-# JOIN t1 ON t3.a=t1.a
-# JOIN t2 ON t3.a=t2.a
-# JOIN t4 WHERE t4.a IN (t1.b, t2.b);
-#
-#EXPLAIN SELECT STRAIGHT_JOIN
-# (SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
-# FROM t3, t1, t2
-# WHERE t3.a=t1.a AND t3.a=t2.a;
-#
-#SELECT STRAIGHT_JOIN
-# (SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
-# FROM t3, t1, t2
-# WHERE t3.a=t1.a AND t3.a=t2.a;
-#
-#DROP TABLE t1,t2,t3,t4;
+CREATE TABLE t1 (a int, b int, PRIMARY KEY (a));
+INSERT INTO t1 VALUES (1,1),(2,1),(3,1),(4,1),(5,1),(6,1);
+
+CREATE TABLE t2 (a int, b int, PRIMARY KEY (a));
+INSERT INTO t2 VALUES (3,2),(4,2),(100,100),(101,201),(102,102);
+
+CREATE TABLE t3 (a int PRIMARY KEY);
+INSERT INTO t3 VALUES (1),(2),(3),(4);
+
+CREATE TABLE t4 (a int PRIMARY KEY,b int);
+INSERT INTO t4 VALUES (1,1),(2,2),(1000,1000),(1001,1001),(1002,1002),
+ (1003,1003),(1004,1004);
+
+EXPLAIN SELECT STRAIGHT_JOIN * FROM t3
+ JOIN t1 ON t3.a=t1.a
+ JOIN t2 ON t3.a=t2.a
+ JOIN t4 WHERE t4.a IN (t1.b, t2.b);
+
+SELECT STRAIGHT_JOIN * FROM t3
+ JOIN t1 ON t3.a=t1.a
+ JOIN t2 ON t3.a=t2.a
+ JOIN t4 WHERE t4.a IN (t1.b, t2.b);
+
+EXPLAIN SELECT STRAIGHT_JOIN
+ (SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
+ FROM t3, t1, t2
+ WHERE t3.a=t1.a AND t3.a=t2.a;
+
+SELECT STRAIGHT_JOIN
+ (SELECT SUM(t4.a) FROM t4 WHERE t4.a IN (t1.b, t2.b))
+ FROM t3, t1, t2
+ WHERE t3.a=t1.a AND t3.a=t2.a;
+
+DROP TABLE t1,t2,t3,t4;
--echo End of 5.0 tests