Commit 76018034 authored by unknown's avatar unknown

item_subselect.cc:

  postmerge fix
subselect.result:
  new 5.0 result (postmerge)


mysql-test/r/subselect.result:
  new 5.0 result (postmerge)
sql/item_subselect.cc:
  postmerge fix
parent 309c1ab5
...@@ -2809,19 +2809,19 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -2809,19 +2809,19 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 1 PRIMARY t1 ALL NULL NULL NULL NULL 8
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 Using where 2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 Using where
Warnings: Warnings:
Note 1003 select test.t1.one AS `one`,test.t1.two AS `two`,<in_optimizer>((test.t1.one,test.t1.two),<exists>(select test.t2.one AS `one`,test.t2.two AS `two` from test.t2 where ((test.t2.flag = _latin1'0') and ((<cache>(test.t1.one) = test.t2.one) or isnull(test.t2.one)) and ((<cache>(test.t1.two) = test.t2.two) or isnull(test.t2.two))) having (<is_not_null_test>(test.t2.one) and <is_not_null_test>(test.t2.two)))) AS `test` from test.t1 Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = _latin1'0') and ((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`)) and ((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`))) having (<is_not_null_test>(`test`.`t2`.`one`) and <is_not_null_test>(`test`.`t2`.`two`)))) AS `test` from `test`.`t1`
explain extended SELECT one,two from t1 where ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N'); explain extended SELECT one,two from t1 where ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = 'N');
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 Using where 1 PRIMARY t1 ALL NULL NULL NULL NULL 8 Using where
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 Using where 2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 Using where
Warnings: Warnings:
Note 1003 select test.t1.one AS `one`,test.t1.two AS `two` from test.t1 where <in_optimizer>((test.t1.one,test.t1.two),<exists>(select test.t2.one AS `one`,test.t2.two AS `two` from test.t2 where ((test.t2.flag = _latin1'N') and (<cache>(test.t1.one) = test.t2.one) and (<cache>(test.t1.two) = test.t2.two)))) Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two` from `test`.`t1` where <in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where ((`test`.`t2`.`flag` = _latin1'N') and (<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) and (<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`))))
explain extended SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0' group by one,two) as 'test' from t1; explain extended SELECT one,two,ROW(one,two) IN (SELECT one,two FROM t2 WHERE flag = '0' group by one,two) as 'test' from t1;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 1 PRIMARY t1 ALL NULL NULL NULL NULL 8
2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 Using where; Using temporary; Using filesort 2 DEPENDENT SUBQUERY t2 ALL NULL NULL NULL NULL 9 Using where; Using temporary; Using filesort
Warnings: Warnings:
Note 1003 select test.t1.one AS `one`,test.t1.two AS `two`,<in_optimizer>((test.t1.one,test.t1.two),<exists>(select test.t2.one AS `one`,test.t2.two AS `two` from test.t2 where (test.t2.flag = _latin1'0') group by test.t2.one,test.t2.two having (((<cache>(test.t1.one) = test.t2.one) or isnull(test.t2.one)) and ((<cache>(test.t1.two) = test.t2.two) or isnull(test.t2.two)) and <is_not_null_test>(test.t2.one) and <is_not_null_test>(test.t2.two)))) AS `test` from test.t1 Note 1003 select `test`.`t1`.`one` AS `one`,`test`.`t1`.`two` AS `two`,<in_optimizer>((`test`.`t1`.`one`,`test`.`t1`.`two`),<exists>(select `test`.`t2`.`one` AS `one`,`test`.`t2`.`two` AS `two` from `test`.`t2` where (`test`.`t2`.`flag` = _latin1'0') group by `test`.`t2`.`one`,`test`.`t2`.`two` having (((<cache>(`test`.`t1`.`one`) = `test`.`t2`.`one`) or isnull(`test`.`t2`.`one`)) and ((<cache>(`test`.`t1`.`two`) = `test`.`t2`.`two`) or isnull(`test`.`t2`.`two`)) and <is_not_null_test>(`test`.`t2`.`one`) and <is_not_null_test>(`test`.`t2`.`two`)))) AS `test` from `test`.`t1`
DROP TABLE t1,t2; DROP TABLE t1,t2;
CREATE TABLE t1 (a char(5), b char(5)); CREATE TABLE t1 (a char(5), b char(5));
INSERT INTO t1 VALUES (NULL,'aaa'), ('aaa','aaa'); INSERT INTO t1 VALUES (NULL,'aaa'), ('aaa','aaa');
......
...@@ -1093,21 +1093,24 @@ Item_in_subselect::row_value_transformer(JOIN *join) ...@@ -1093,21 +1093,24 @@ 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_direct_ref(&select_lex->context,
(*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_direct_ref(&select_lex->context,
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_direct_ref(&select_lex->context,
ref_pointer_array+i, select_lex->
(char *)"<no matter>", ref_pointer_array+i,
(char *)"<list ref>") (char *)"<no matter>",
(char *)"<list ref>")
); );
having_item= having_item=
and_items(having_item, and_items(having_item,
...@@ -1117,7 +1120,8 @@ Item_in_subselect::row_value_transformer(JOIN *join) ...@@ -1117,7 +1120,8 @@ 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_direct_ref(&select_lex->context,
select_lex->
ref_pointer_array + i, ref_pointer_array + i,
(char *)"<no matter>", (char *)"<no matter>",
(char *)"<list ref>") (char *)"<list ref>")
...@@ -1157,15 +1161,17 @@ Item_in_subselect::row_value_transformer(JOIN *join) ...@@ -1157,15 +1161,17 @@ Item_in_subselect::row_value_transformer(JOIN *join)
DBUG_RETURN(RES_ERROR); DBUG_RETURN(RES_ERROR);
item= item=
new Item_func_eq(new new Item_func_eq(new
Item_direct_ref((*optimizer->get_cache())-> Item_direct_ref(&select_lex->context,
(*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-> Item_direct_ref(&select_lex->context,
ref_pointer_array+i, select_lex->
(char *)"<no matter>", ref_pointer_array+i,
(char *)"<list ref>") (char *)"<no matter>",
(char *)"<list ref>")
); );
if (!abort_on_null) if (!abort_on_null)
{ {
...@@ -1174,7 +1180,8 @@ Item_in_subselect::row_value_transformer(JOIN *join) ...@@ -1174,7 +1180,8 @@ 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_direct_ref(&select_lex->context,
select_lex->
ref_pointer_array + i, ref_pointer_array + i,
(char *)"<no matter>", (char *)"<no matter>",
(char *)"<list ref>") (char *)"<list ref>")
...@@ -1182,10 +1189,11 @@ Item_in_subselect::row_value_transformer(JOIN *join) ...@@ -1182,10 +1189,11 @@ Item_in_subselect::row_value_transformer(JOIN *join)
); );
item_isnull= new item_isnull= new
Item_func_isnull(new Item_func_isnull(new
Item_direct_ref( select_lex-> Item_direct_ref(&select_lex->context,
ref_pointer_array+i, select_lex->
(char *)"<no matter>", ref_pointer_array+i,
(char *)"<list ref>") (char *)"<no matter>",
(char *)"<list ref>")
); );
item= new Item_cond_or(item, item_isnull); item= new Item_cond_or(item, item_isnull);
......
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