Commit 8b41f491 authored by Chaithra Gopalareddy's avatar Chaithra Gopalareddy

Bug#11760726: LEFT JOIN OPTIMIZED INTO JOIN LEADS TO

              INCORRECT RESULTS

This is a backport of fix for Bug#13068506.

mysql-test/r/join_outer.result:
  Added test result for Bug#13068506
mysql-test/t/join_outer.test:
  Added test case for Bug#13068506
sql/item.h:
  Implement Item_outer_ref::not_null_tables()
parent 5e399d1c
...@@ -1485,4 +1485,36 @@ EXECUTE prep_stmt; ...@@ -1485,4 +1485,36 @@ EXECUTE prep_stmt;
f f
1 1
DROP TABLE t1; DROP TABLE t1;
#
# Bug#13068506 - QUERY WITH GROUP BY ON NON-AGGR COLUMN RETURNS
# WRONG RESULT
#
CREATE TABLE t1 (i1 int);
INSERT INTO t1 VALUES (100), (101);
CREATE TABLE t2 (i2 int, i3 int);
INSERT INTO t2 VALUES (20,1),(10,2);
CREATE TABLE t3 (i4 int(11));
INSERT INTO t3 VALUES (1),(2);
SELECT (
SELECT MAX( t2.i2 )
FROM t3 RIGHT JOIN t2 ON ( t2.i3 = 2 )
WHERE t2.i3 <> t1.i1
) AS field1
FROM t1;;
field1
20
20
SELECT (
SELECT MAX( t2.i2 )
FROM t3 RIGHT JOIN t2 ON ( t2.i3 = 2 )
WHERE t2.i3 <> t1.i1
) AS field1
FROM t1 GROUP BY field1;;
field1
20
drop table t1,t2,t3;
# End of test for Bug#13068506
End of 5.1 tests End of 5.1 tests
...@@ -1067,5 +1067,35 @@ EXECUTE prep_stmt; ...@@ -1067,5 +1067,35 @@ EXECUTE prep_stmt;
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # Bug#13068506 - QUERY WITH GROUP BY ON NON-AGGR COLUMN RETURNS
--echo # WRONG RESULT
--echo #
CREATE TABLE t1 (i1 int);
INSERT INTO t1 VALUES (100), (101);
CREATE TABLE t2 (i2 int, i3 int);
INSERT INTO t2 VALUES (20,1),(10,2);
CREATE TABLE t3 (i4 int(11));
INSERT INTO t3 VALUES (1),(2);
let $query= SELECT (
SELECT MAX( t2.i2 )
FROM t3 RIGHT JOIN t2 ON ( t2.i3 = 2 )
WHERE t2.i3 <> t1.i1
) AS field1
FROM t1;
--echo
--eval $query;
--echo
--eval $query GROUP BY field1;
--echo
drop table t1,t2,t3;
--echo # End of test for Bug#13068506
--echo End of 5.1 tests --echo End of 5.1 tests
...@@ -2448,6 +2448,8 @@ class Item_outer_ref :public Item_direct_ref ...@@ -2448,6 +2448,8 @@ class Item_outer_ref :public Item_direct_ref
{ {
return (*ref)->const_item() ? 0 : OUTER_REF_TABLE_BIT; return (*ref)->const_item() ? 0 : OUTER_REF_TABLE_BIT;
} }
table_map not_null_tables() const { return 0; }
virtual Ref_Type ref_type() { return OUTER_REF; } virtual Ref_Type ref_type() { return OUTER_REF; }
}; };
......
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