mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Bug #16255: Subquery in WHERE (the cset by Georgi Kodinov)
Must not use Item_direct_ref in HAVING because it points to the new value (witch is not yet calculated for the first row).
This commit is contained in:
@@ -2895,3 +2895,14 @@ select * from t1 where NOT(s1 = ALL (select s1/s1 from t1));
|
|||||||
s1
|
s1
|
||||||
2
|
2
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a,b));
|
||||||
|
INSERT INTO t1 VALUES(26, 1), (48, 2);
|
||||||
|
SELECT * FROM t1 r WHERE (r.a,r.b) IN (SELECT a,MAX(b) FROM t1 GROUP BY a);
|
||||||
|
a b
|
||||||
|
26 1
|
||||||
|
48 2
|
||||||
|
SELECT * FROM t1 r WHERE (r.a,r.b) IN (SELECT a + 0,MAX(b) FROM t1 GROUP BY a);
|
||||||
|
a b
|
||||||
|
26 1
|
||||||
|
48 2
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -1861,4 +1861,16 @@ select * from t1 where NOT(s1+1 = ANY (select s1 from t1));
|
|||||||
select * from t1 where (s1 = ALL (select s1/s1 from t1));
|
select * from t1 where (s1 = ALL (select s1/s1 from t1));
|
||||||
select * from t1 where NOT(s1 = ALL (select s1/s1 from t1));
|
select * from t1 where NOT(s1 = ALL (select s1/s1 from t1));
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #16255: Subquery in where
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a,b));
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES(26, 1), (48, 2);
|
||||||
|
|
||||||
|
SELECT * FROM t1 r WHERE (r.a,r.b) IN (SELECT a,MAX(b) FROM t1 GROUP BY a);
|
||||||
|
SELECT * FROM t1 r WHERE (r.a,r.b) IN (SELECT a + 0,MAX(b) FROM t1 GROUP BY a);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@@ -976,18 +976,18 @@ Item_in_subselect::row_value_transformer(JOIN *join)
|
|||||||
DBUG_RETURN(RES_ERROR);
|
DBUG_RETURN(RES_ERROR);
|
||||||
Item *item_eq=
|
Item *item_eq=
|
||||||
new Item_func_eq(new
|
new Item_func_eq(new
|
||||||
Item_direct_ref((*optimizer->get_cache())->
|
Item_ref((*optimizer->get_cache())->
|
||||||
addr(i),
|
addr(i),
|
||||||
(char *)"<no matter>",
|
(char *)"<no matter>",
|
||||||
(char *)in_left_expr_name),
|
(char *)in_left_expr_name),
|
||||||
new
|
new
|
||||||
Item_direct_ref(select_lex->ref_pointer_array + i,
|
Item_ref(select_lex->ref_pointer_array + i,
|
||||||
(char *)"<no matter>",
|
(char *)"<no matter>",
|
||||||
(char *)"<list ref>")
|
(char *)"<list ref>")
|
||||||
);
|
);
|
||||||
Item *item_isnull=
|
Item *item_isnull=
|
||||||
new Item_func_isnull(new
|
new Item_func_isnull(new
|
||||||
Item_direct_ref( select_lex->
|
Item_ref( select_lex->
|
||||||
ref_pointer_array+i,
|
ref_pointer_array+i,
|
||||||
(char *)"<no matter>",
|
(char *)"<no matter>",
|
||||||
(char *)"<list ref>")
|
(char *)"<list ref>")
|
||||||
@@ -1000,7 +1000,7 @@ Item_in_subselect::row_value_transformer(JOIN *join)
|
|||||||
new
|
new
|
||||||
Item_is_not_null_test(this,
|
Item_is_not_null_test(this,
|
||||||
new
|
new
|
||||||
Item_direct_ref(select_lex->
|
Item_ref(select_lex->
|
||||||
ref_pointer_array + i,
|
ref_pointer_array + i,
|
||||||
(char *)"<no matter>",
|
(char *)"<no matter>",
|
||||||
(char *)"<list ref>")
|
(char *)"<list ref>")
|
||||||
@@ -1057,7 +1057,7 @@ Item_in_subselect::row_value_transformer(JOIN *join)
|
|||||||
new
|
new
|
||||||
Item_is_not_null_test(this,
|
Item_is_not_null_test(this,
|
||||||
new
|
new
|
||||||
Item_direct_ref(select_lex->
|
Item_ref(select_lex->
|
||||||
ref_pointer_array + i,
|
ref_pointer_array + i,
|
||||||
(char *)"<no matter>",
|
(char *)"<no matter>",
|
||||||
(char *)"<list ref>")
|
(char *)"<list ref>")
|
||||||
|
Reference in New Issue
Block a user