From aaf9fb0de706da2924bdcb2533b1eda6933aca61 Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Tue, 3 May 2011 17:11:45 -0700 Subject: [PATCH] Fixed LP bug #776274, The bug was introduced by the patch that fixed bug 717577. --- mysql-test/r/select.result | 13 +++++++++++++ mysql-test/r/select_jcl6.result | 13 +++++++++++++ mysql-test/r/select_pkeycache.result | 13 +++++++++++++ mysql-test/t/select.test | 14 ++++++++++++++ sql/item_cmpfunc.cc | 19 ++++++++++--------- 5 files changed, 63 insertions(+), 9 deletions(-) diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index 56d383a57b7..f9d6c80018b 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -5018,3 +5018,16 @@ WHERE t7.f71>0; f23 DROP TABLE t1,t2,t3,t4,t5,t6,t7; End of 5.1 tests +# +# BUG#776274: substitution of a single row table +# +CREATE TABLE t1 (a int NOT NULL , b int); +INSERT INTO t1 VALUES (2,2); +SELECT * FROM t1 WHERE a = b; +a b +2 2 +EXPLAIN +SELECT * FROM t1 WHERE a = b; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 system NULL NULL NULL NULL 1 +DROP TABLE t1; diff --git a/mysql-test/r/select_jcl6.result b/mysql-test/r/select_jcl6.result index caa0fcb5cf6..ca7241d8f87 100644 --- a/mysql-test/r/select_jcl6.result +++ b/mysql-test/r/select_jcl6.result @@ -5025,6 +5025,19 @@ WHERE t7.f71>0; f23 DROP TABLE t1,t2,t3,t4,t5,t6,t7; End of 5.1 tests +# +# BUG#776274: substitution of a single row table +# +CREATE TABLE t1 (a int NOT NULL , b int); +INSERT INTO t1 VALUES (2,2); +SELECT * FROM t1 WHERE a = b; +a b +2 2 +EXPLAIN +SELECT * FROM t1 WHERE a = b; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 system NULL NULL NULL NULL 1 +DROP TABLE t1; set join_cache_level=default; show variables like 'join_cache_level'; Variable_name Value diff --git a/mysql-test/r/select_pkeycache.result b/mysql-test/r/select_pkeycache.result index 56d383a57b7..f9d6c80018b 100644 --- a/mysql-test/r/select_pkeycache.result +++ b/mysql-test/r/select_pkeycache.result @@ -5018,3 +5018,16 @@ WHERE t7.f71>0; f23 DROP TABLE t1,t2,t3,t4,t5,t6,t7; End of 5.1 tests +# +# BUG#776274: substitution of a single row table +# +CREATE TABLE t1 (a int NOT NULL , b int); +INSERT INTO t1 VALUES (2,2); +SELECT * FROM t1 WHERE a = b; +a b +2 2 +EXPLAIN +SELECT * FROM t1 WHERE a = b; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 system NULL NULL NULL NULL 1 +DROP TABLE t1; diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index fb04562a173..3d5ffd185ba 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -4211,3 +4211,17 @@ SELECT t2.f23 FROM DROP TABLE t1,t2,t3,t4,t5,t6,t7; --echo End of 5.1 tests + +--echo # +--echo # BUG#776274: substitution of a single row table +--echo # + +CREATE TABLE t1 (a int NOT NULL , b int); +INSERT INTO t1 VALUES (2,2); + +SELECT * FROM t1 WHERE a = b; +EXPLAIN +SELECT * FROM t1 WHERE a = b; + +DROP TABLE t1; + diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index cc6f2f41982..73191982b64 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -5740,18 +5740,19 @@ void Item_equal::update_const() List_iterator it(equal_items); if (with_const) it++; - Item *item= it++; - while (item) + Item *item; + while ((item= it++)) { if (item->const_item()) { - it.remove(); - Item *next_item= it++; - add_const(item); - item= next_item; - } - else - item= it++; + if (item == equal_items.head()) + with_const= TRUE; + else + { + it.remove(); + add_const(item); + } + } } }