mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
Merge lsmy3.wdf.sap.corp:/data/users/gkodinov/mysql-4.1-B18492
into lsmy3.wdf.sap.corp:/data/users/gkodinov/mysql-5.0-B18492 mysql-test/r/subselect.result: merged sql/item.cc: merged sql/item.h: merged sql/item_subselect.cc: merged
This commit is contained in:
commit
ef7ec424e6
6 changed files with 42 additions and 39 deletions
|
@ -116,3 +116,17 @@ execute st_1676 using @arg0, @arg1, @arg2;
|
|||
cola colb cold
|
||||
aaaa yyyy R
|
||||
drop table t1, t2;
|
||||
create table t1 (a int primary key);
|
||||
insert into t1 values (1);
|
||||
explain select * from t1 where 3 in (select (1+1) union select 1);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||
2 DEPENDENT SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
3 DEPENDENT UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
|
||||
select * from t1 where 3 in (select (1+1) union select 1);
|
||||
a
|
||||
prepare st_18492 from 'select * from t1 where 3 in (select (1+1) union select 1)';
|
||||
execute st_18492;
|
||||
a
|
||||
drop table t1;
|
||||
|
|
|
@ -744,7 +744,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||
3 DEPENDENT UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`id` AS `id` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`id`,<exists>(select 1 AS `Not_used` having (<cache>(`test`.`t2`.`id`) = <null_helper>(1)) union select 1 AS `Not_used` having (<cache>(`test`.`t2`.`id`) = <null_helper>(3))))
|
||||
Note 1003 select `test`.`t2`.`id` AS `id` from `test`.`t2` where <in_optimizer>(`test`.`t2`.`id`,<exists>(select 1 AS `1` having (<cache>(`test`.`t2`.`id`) = <ref_null_helper>(1)) union select 3 AS `3` having (<cache>(`test`.`t2`.`id`) = <ref_null_helper>(3))))
|
||||
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 3);
|
||||
id
|
||||
SELECT * FROM t2 WHERE id IN (SELECT 5 UNION SELECT 2);
|
||||
|
|
|
@ -130,3 +130,17 @@ drop table t1, t2;
|
|||
# end of bug#1676
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
# bug#18492: mysqld reports ER_ILLEGAL_REFERENCE in --ps-protocol
|
||||
|
||||
create table t1 (a int primary key);
|
||||
insert into t1 values (1);
|
||||
|
||||
explain select * from t1 where 3 in (select (1+1) union select 1);
|
||||
|
||||
select * from t1 where 3 in (select (1+1) union select 1);
|
||||
|
||||
prepare st_18492 from 'select * from t1 where 3 in (select (1+1) union select 1)';
|
||||
execute st_18492;
|
||||
|
||||
drop table t1;
|
||||
|
|
|
@ -5151,14 +5151,6 @@ bool Item_direct_view_ref::eq(const Item *item, bool binary_cmp) const
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
void Item_null_helper::print(String *str)
|
||||
{
|
||||
str->append(STRING_WITH_LEN("<null_helper>("));
|
||||
store->print(str);
|
||||
str->append(')');
|
||||
}
|
||||
|
||||
|
||||
bool Item_default_value::eq(const Item *item, bool binary_cmp) const
|
||||
{
|
||||
return item->type() == DEFAULT_VALUE_ITEM &&
|
||||
|
|
15
sql/item.h
15
sql/item.h
|
@ -1849,21 +1849,6 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class Item_null_helper :public Item_ref_null_helper
|
||||
{
|
||||
Item *store;
|
||||
public:
|
||||
Item_null_helper(Name_resolution_context *context_arg,
|
||||
Item_in_subselect* master, Item *item,
|
||||
const char *table_name_arg, const char *field_name_arg)
|
||||
:Item_ref_null_helper(context_arg, master, (store= 0, &store),
|
||||
table_name_arg, field_name_arg),
|
||||
store(item)
|
||||
{ ref= &store; }
|
||||
void print(String *str);
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
The following class is used to optimize comparing of date and bigint columns
|
||||
We need to save the original item ('ref') to be able to call
|
||||
|
|
|
@ -928,14 +928,14 @@ Item_in_subselect::single_value_transformer(JOIN *join,
|
|||
{
|
||||
Item *item= (Item*) select_lex->item_list.head();
|
||||
|
||||
select_lex->item_list.empty();
|
||||
select_lex->item_list.push_back(new Item_int("Not_used",
|
||||
(longlong) 1, 21));
|
||||
select_lex->ref_pointer_array[0]= select_lex->item_list.head();
|
||||
if (select_lex->table_list.elements)
|
||||
{
|
||||
bool tmp;
|
||||
Item *having= item, *orig_item= item;
|
||||
select_lex->item_list.empty();
|
||||
select_lex->item_list.push_back(new Item_int("Not_used",
|
||||
(longlong) 1, 21));
|
||||
select_lex->ref_pointer_array[0]= select_lex->item_list.head();
|
||||
item= func->create(expr, item);
|
||||
if (!abort_on_null && orig_item->maybe_null)
|
||||
{
|
||||
|
@ -990,17 +990,15 @@ Item_in_subselect::single_value_transformer(JOIN *join,
|
|||
comparison functions can't be changed during fix_fields()
|
||||
we can assign select_lex->having here, and pass 0 as last
|
||||
argument (reference) to fix_fields()
|
||||
*/
|
||||
item= func->create(expr,
|
||||
new Item_null_helper(&select_lex->context,
|
||||
this, item,
|
||||
(char *)"<no matter>",
|
||||
(char *)"<result>"));
|
||||
#ifdef CORRECT_BUT_TOO_SLOW_TO_BE_USABLE
|
||||
if (!abort_on_null && left_expr->maybe_null)
|
||||
item= new Item_cond_or(new Item_func_isnull(left_expr), item);
|
||||
#endif
|
||||
select_lex->having= join->having= item;
|
||||
*/
|
||||
select_lex->having=
|
||||
join->having=
|
||||
func->create(expr,
|
||||
new Item_ref_null_helper(&select_lex->context, this,
|
||||
select_lex->ref_pointer_array,
|
||||
(char *)"<no matter>",
|
||||
(char *)"<result>"));
|
||||
|
||||
select_lex->having_fix_field= 1;
|
||||
/*
|
||||
we do not check join->having->fixed, because comparison function
|
||||
|
|
Loading…
Reference in a new issue