Commit 07c1f3db authored by unknown's avatar unknown

fixed bug reported by Walrus & Miguel in exists subselect


mysql-test/r/subselect.result:
  added test suite of EXISTS clause
mysql-test/t/subselect.test:
  added test suite of EXISTS clause
sql/item_subselect.cc:
  added checking out of memory
  fixed bug in exists subselect
parent 3530244d
select (select 2);
(select 2)
2
drop table if exists t1,t2,t3,t4;
drop table if exists t1,t2,t3,t4,attend,clinic;
create table t1 (a int);
create table t2 (a int, b int);
create table t3 (a int);
......@@ -82,4 +82,13 @@ select b,max(a) as ma from t4 group by b having b >= (select max(t2.a)
from t2 where t2.b=t4.b);
b ma
7 12
drop table t1,t2,t3,t4;
create table attend (patient_uq int, clinic_uq int, index i1 (clinic_uq));
create table clinic( uq int primary key, name char(25));
insert into clinic values(1,"Oblastnaia bolnitsa"),(2,"Bolnitsa Krasnogo Kresta");
insert into attend values (1,1),(1,2),(2,2),(1,3);
select * from attend where exists (select * from clinic where uq = clinic_uq);
patient_uq clinic_uq
1 1
1 2
2 2
drop table t1,t2,t3,t4,attend,clinic;
select (select 2);
drop table if exists t1,t2,t3,t4;
drop table if exists t1,t2,t3,t4,attend,clinic;
create table t1 (a int);
create table t2 (a int, b int);
create table t3 (a int);
......@@ -33,4 +33,11 @@ select b,max(a) as ma from t4 group by b having b < (select max(t2.a)
from t2 where t2.b=t4.b);
select b,max(a) as ma from t4 group by b having b >= (select max(t2.a)
from t2 where t2.b=t4.b);
drop table t1,t2,t3,t4;
create table attend (patient_uq int, clinic_uq int, index i1 (clinic_uq));
create table clinic( uq int primary key, name char(25));
insert into clinic values(1,"Oblastnaia bolnitsa"),(2,"Bolnitsa Krasnogo Kresta");
insert into attend values (1,1),(1,2),(2,2),(1,3);
select * from attend where exists (select * from clinic where uq = clinic_uq);
drop table t1,t2,t3,t4,attend,clinic;
......@@ -51,6 +51,12 @@ Item_subselect::Item_subselect(THD *thd, st_select_lex *select_lex,
if (unit->select_limit_cnt == HA_POS_ERROR)
select_lex->options&= ~OPTION_FOUND_ROWS;
join= new JOIN(thd, select_lex->item_list, select_lex->options, result);
if (!join || !result)
{
//out of memory
thd->fatal_error= 1;
my_printf_error(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0));
}
this->select_lex= select_lex;
assign_null();
/*
......@@ -172,7 +178,7 @@ String *Item_singleval_subselect::val_str (String *str)
Item_exists_subselect::Item_exists_subselect(THD *thd,
st_select_lex *select_lex):
Item_subselect(thd, select_lex, new select_singleval_subselect(this))
Item_subselect(thd, select_lex, new select_exists_subselect(this))
{
max_columns= UINT_MAX;
null_value= 0; //can't be NULL
......
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