3387 Ole John Aske 2010-12-03
SPJ-scan-scan: Cherry picked fix for bug#57034 into SPJ branch.
modified:
mysql-test/r/join_outer.result
mysql-test/t/join_outer.test
sql/item_cmpfunc.cc
3386 Ole John Aske 2010-12-03
SPJ-scan-scan: Cherry picked fix for bug#57030 as this was a RQG test showstopper
NOTE: There are two alternative fixes available for this bug. I have picked
the smalles, but most hacky of of these fixes.
Might replace - and hopefully will - with the other fix if reviwers
find that one better .
modified:
mysql-test/r/range.result
mysql-test/t/range.test
sql/sql_select.cc
=== modified file 'mysql-test/r/join_outer.result'
--- a/mysql-test/r/join_outer.result 2010-12-01 10:21:04 +0000
+++ b/mysql-test/r/join_outer.result 2010-12-03 16:59:43 +0000
@@ -1481,4 +1481,24 @@ WHERE t3.pk2 = t2.i
IS UNKNOWN;
I I
DROP TABLE t1,t2,t3;
+#
+# Bug#57034 incorrect OUTER JOIN result when joined on unique key
+#
+CREATE TABLE t1 (pk INT PRIMARY KEY, col_int INT, col_int_unique INT UNIQUE KEY);
+INSERT INTO t1 VALUES (1,NULL,2), (2,0,0);
+CREATE TABLE t2 (pk INT PRIMARY KEY, col_int INT, col_int_unique INT UNIQUE KEY);
+INSERT INTO t2 VALUES (1,0,1), (2,0,2);
+EXPLAIN
+SELECT * FROM t1 LEFT JOIN t2
+ON t1.col_int_unique = t2.col_int_unique AND t1.col_int = t2.col_int
+WHERE t1.pk=1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 const PRIMARY PRIMARY 4 const 1
+1 SIMPLE t2 const col_int_unique col_int_unique 5 const 1
+SELECT * FROM t1 LEFT JOIN t2
+ON t1.col_int_unique = t2.col_int_unique AND t1.col_int = t2.col_int
+WHERE t1.pk=1;
+pk col_int col_int_unique pk col_int col_int_unique
+1 NULL 2 NULL NULL NULL
+DROP TABLE t1,t2;
End of 5.1 tests
=== modified file 'mysql-test/t/join_outer.test'
--- a/mysql-test/t/join_outer.test 2010-12-01 10:21:04 +0000
+++ b/mysql-test/t/join_outer.test 2010-12-03 16:59:43 +0000
@@ -1066,4 +1066,24 @@ SELECT * FROM
DROP TABLE t1,t2,t3;
+--echo #
+--echo # Bug#57034 incorrect OUTER JOIN result when joined on unique key
+--echo #
+
+CREATE TABLE t1 (pk INT PRIMARY KEY, col_int INT, col_int_unique INT UNIQUE KEY);
+INSERT INTO t1 VALUES (1,NULL,2), (2,0,0);
+CREATE TABLE t2 (pk INT PRIMARY KEY, col_int INT, col_int_unique INT UNIQUE KEY);
+INSERT INTO t2 VALUES (1,0,1), (2,0,2);
+
+EXPLAIN
+SELECT * FROM t1 LEFT JOIN t2
+ ON t1.col_int_unique = t2.col_int_unique AND t1.col_int = t2.col_int
+ WHERE t1.pk=1;
+
+SELECT * FROM t1 LEFT JOIN t2
+ ON t1.col_int_unique = t2.col_int_unique AND t1.col_int = t2.col_int
+ WHERE t1.pk=1;
+
+DROP TABLE t1,t2;
+
--echo End of 5.1 tests
=== modified file 'sql/item_cmpfunc.cc'
--- a/sql/item_cmpfunc.cc 2010-11-23 07:28:24 +0000
+++ b/sql/item_cmpfunc.cc 2010-12-03 16:59:43 +0000
@@ -5598,15 +5598,15 @@ longlong Item_equal::val_int()
return 0;
List_iterator_fast<Item_field> it(fields);
Item *item= const_item ? const_item : it++;
+ eval_item->store_value(item);
if ((null_value= item->null_value))
return 0;
- eval_item->store_value(item);
while ((item_field= it++))
{
/* Skip fields of non-const tables. They haven't been read yet */
if (item_field->field->table->const_table)
{
- if ((null_value= item_field->null_value) || eval_item->cmp(item_field))
+ if (eval_item->cmp(item_field) || (null_value= item_field->null_value))
return 0;
}
}
No bundle (reason: useless for push emails).
| Thread |
|---|
| • bzr push into mysql-5.1-telco-7.0-spj-scan-vs-scan branch(ole.john.aske:3386 to 3387) Bug#57034 | Ole John Aske | 3 Dec |