summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Potemkin <epotemkin@mysql.com>2009-07-18 18:09:56 +0400
committerEvgeny Potemkin <epotemkin@mysql.com>2009-07-18 18:09:56 +0400
commit32b02e0b4d22f8bec51cf91cfd36b8f986aff1d2 (patch)
tree741adb9eb42191a579c1556e8e74300a8eac5e85
parentaf2c91b7019dd0bd53d7444b47552f14729a7bd0 (diff)
downloadmariadb-git-32b02e0b4d22f8bec51cf91cfd36b8f986aff1d2.tar.gz
Bug#46051: Incorrectly market field caused wrong result.
When during the optimization an item is moved to the upper select the item's context left unchanged. This caused wrong result in the PS/SP mode. The Item_ident::remove_dependence_processor now sets the context of the select to which the item is moved to.
-rw-r--r--mysql-test/r/subselect.result4
-rw-r--r--mysql-test/t/subselect.test2
-rw-r--r--sql/item.cc1
3 files changed, 3 insertions, 4 deletions
diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result
index d3f7f631f70..324a6073426 100644
--- a/mysql-test/r/subselect.result
+++ b/mysql-test/r/subselect.result
@@ -4472,10 +4472,6 @@ int_nokey int_key
EXPLAIN EXTENDED SELECT * FROM C WHERE `int_key` IN (SELECT `int_nokey`);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY C ALL NULL NULL NULL NULL 20 Using where
-Warnings:
-Note 1276 Field or reference 'test.C.int_nokey' of SELECT #2 was resolved in SELECT #1
-Note 1249 Select 2 was reduced during optimization
-Note 1003 select `test`.`C`.`int_nokey` AS `int_nokey`,`test`.`C`.`int_key` AS `int_key` from `test`.`C` where (`test`.`C`.`int_nokey` = `test`.`C`.`int_key`)
DROP TABLE C;
# End of test for bug#45061.
End of 5.0 tests.
diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test
index 63ab2710f89..9d4fc9030f2 100644
--- a/mysql-test/t/subselect.test
+++ b/mysql-test/t/subselect.test
@@ -3441,8 +3441,10 @@ INSERT INTO `C` VALUES (9,9), (0,0), (8,6), (3,6), (7,6), (0,4),
(1,7), (9,4), (0,8), (9,4), (0,7), (5,5), (0,0), (8,5), (8,7),
(5,2), (1,8), (7,0), (0,9), (9,5);
+--disable_warnings
SELECT * FROM C WHERE `int_key` IN (SELECT `int_nokey`);
EXPLAIN EXTENDED SELECT * FROM C WHERE `int_key` IN (SELECT `int_nokey`);
+--enable_warnings
DROP TABLE C;
--echo # End of test for bug#45061.
diff --git a/sql/item.cc b/sql/item.cc
index 1e379527fb7..eecb48aa16f 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -598,6 +598,7 @@ bool Item_ident::remove_dependence_processor(byte * arg)
DBUG_ENTER("Item_ident::remove_dependence_processor");
if (depended_from == (st_select_lex *) arg)
depended_from= 0;
+ context= &((st_select_lex *) arg)->context;
DBUG_RETURN(0);
}