From 098d02eb44314448bb79ccf234241a41d09406f8 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 15 Jun 2005 02:02:25 -0700 Subject: [PATCH] join_outer.result, join_outer.test: Added a test case for bug #11285. sql_select.cc: Fixed bug #11285. The problem occurred with Item_equal in an 'on expression' that was evaluated to false. sql/sql_select.cc: Fixed bug #11285. The problem occurred with Item_equal in an 'on expression' that was evaluated to false. mysql-test/t/join_outer.test: Added a test case for bug #11285. mysql-test/r/join_outer.result: Added a test case for bug #11285. --- mysql-test/r/join_outer.result | 8 ++++++++ mysql-test/t/join_outer.test | 12 ++++++++++++ sql/sql_select.cc | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/join_outer.result b/mysql-test/r/join_outer.result index e69e7603e21..b75eadd5291 100644 --- a/mysql-test/r/join_outer.result +++ b/mysql-test/r/join_outer.result @@ -975,3 +975,11 @@ EMPNUM NAME GRP 0 KERI 10 9 BARRY NULL DROP TABLE t1,t2; +CREATE TABLE t1 (c11 int); +CREATE TABLE t2 (c21 int); +INSERT INTO t1 VALUES (30), (40), (50); +INSERT INTO t2 VALUES (300), (400), (500); +SELECT * FROM t1 LEFT JOIN t2 ON (c11=c21 AND c21=30) WHERE c11=40; +c11 c21 +40 NULL +DROP TABLE t1, t2; diff --git a/mysql-test/t/join_outer.test b/mysql-test/t/join_outer.test index 670e7433926..7dd35f164d5 100644 --- a/mysql-test/t/join_outer.test +++ b/mysql-test/t/join_outer.test @@ -698,4 +698,16 @@ SELECT * FROM v1 WHERE EMPNUM < 10; DROP TABLE t1,t2; +# +# Test for bug #11285: false Item_equal on expression in outer join +# + +CREATE TABLE t1 (c11 int); +CREATE TABLE t2 (c21 int); +INSERT INTO t1 VALUES (30), (40), (50); +INSERT INTO t2 VALUES (300), (400), (500); + +SELECT * FROM t1 LEFT JOIN t2 ON (c11=c21 AND c21=30) WHERE c11=40; + +DROP TABLE t1, t2; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 7d57fd78c93..33f36fca9b2 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -7064,7 +7064,7 @@ static COND* substitute_for_best_equal_field(COND *cond, List_iterator_fast it(cond_equal->current_level); while ((item_equal= it++)) { - eliminate_item_equal(cond, cond_equal->upper_levels, item_equal); + cond= eliminate_item_equal(cond, cond_equal->upper_levels, item_equal); } } }