Commit 46325044 authored by igor@rurik.mysql.com's avatar igor@rurik.mysql.com

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.
parent f183b1be
...@@ -975,3 +975,11 @@ EMPNUM NAME GRP ...@@ -975,3 +975,11 @@ EMPNUM NAME GRP
0 KERI 10 0 KERI 10
9 BARRY NULL 9 BARRY NULL
DROP TABLE t1,t2; 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;
...@@ -698,4 +698,16 @@ SELECT * FROM v1 WHERE EMPNUM < 10; ...@@ -698,4 +698,16 @@ SELECT * FROM v1 WHERE EMPNUM < 10;
DROP TABLE t1,t2; 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;
...@@ -7064,7 +7064,7 @@ static COND* substitute_for_best_equal_field(COND *cond, ...@@ -7064,7 +7064,7 @@ static COND* substitute_for_best_equal_field(COND *cond,
List_iterator_fast<Item_equal> it(cond_equal->current_level); List_iterator_fast<Item_equal> it(cond_equal->current_level);
while ((item_equal= it++)) 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);
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment