Merge mysql.com:/usr/local/bk/mysql-5.0
into mysql.com:/usr/home/pem/bug14643/mysql-5.0 sql/sp_head.cc: Auto merged mysql-test/r/sp.result: Manual merge. mysql-test/t/sp.test: Manual merge.
This commit is contained in:
commit
50d615f31f
@ -4010,4 +4010,40 @@ s1
|
|||||||
2
|
2
|
||||||
drop procedure bug13729|
|
drop procedure bug13729|
|
||||||
drop table t3|
|
drop table t3|
|
||||||
|
drop procedure if exists bug14643_1|
|
||||||
|
drop procedure if exists bug14643_2|
|
||||||
|
create procedure bug14643_1()
|
||||||
|
begin
|
||||||
|
declare continue handler for sqlexception select 'boo' as 'Handler';
|
||||||
|
begin
|
||||||
|
declare v int default x;
|
||||||
|
if v = 1 then
|
||||||
|
select 1;
|
||||||
|
else
|
||||||
|
select 2;
|
||||||
|
end if;
|
||||||
|
end;
|
||||||
|
end|
|
||||||
|
create procedure bug14643_2()
|
||||||
|
begin
|
||||||
|
declare continue handler for sqlexception select 'boo' as 'Handler';
|
||||||
|
case x
|
||||||
|
when 1 then
|
||||||
|
select 1;
|
||||||
|
else
|
||||||
|
select 2;
|
||||||
|
end case;
|
||||||
|
end|
|
||||||
|
call bug14643_1()|
|
||||||
|
Handler
|
||||||
|
boo
|
||||||
|
2
|
||||||
|
2
|
||||||
|
call bug14643_2()|
|
||||||
|
Handler
|
||||||
|
boo
|
||||||
|
2
|
||||||
|
2
|
||||||
|
drop procedure bug14643_1|
|
||||||
|
drop procedure bug14643_2|
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
@ -4781,6 +4781,48 @@ select * from t3|
|
|||||||
drop procedure bug13729|
|
drop procedure bug13729|
|
||||||
drop table t3|
|
drop table t3|
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#14643: Stored Procedure: Continuing after failed var. initialization
|
||||||
|
# crashes server.
|
||||||
|
#
|
||||||
|
--disable_warnings
|
||||||
|
drop procedure if exists bug14643_1|
|
||||||
|
drop procedure if exists bug14643_2|
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
create procedure bug14643_1()
|
||||||
|
begin
|
||||||
|
declare continue handler for sqlexception select 'boo' as 'Handler';
|
||||||
|
|
||||||
|
begin
|
||||||
|
declare v int default x;
|
||||||
|
|
||||||
|
if v = 1 then
|
||||||
|
select 1;
|
||||||
|
else
|
||||||
|
select 2;
|
||||||
|
end if;
|
||||||
|
end;
|
||||||
|
end|
|
||||||
|
|
||||||
|
create procedure bug14643_2()
|
||||||
|
begin
|
||||||
|
declare continue handler for sqlexception select 'boo' as 'Handler';
|
||||||
|
|
||||||
|
case x
|
||||||
|
when 1 then
|
||||||
|
select 1;
|
||||||
|
else
|
||||||
|
select 2;
|
||||||
|
end case;
|
||||||
|
end|
|
||||||
|
|
||||||
|
call bug14643_1()|
|
||||||
|
call bug14643_2()|
|
||||||
|
|
||||||
|
drop procedure bug14643_1|
|
||||||
|
drop procedure bug14643_2|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# BUG#NNNN: New bug synopsis
|
# BUG#NNNN: New bug synopsis
|
||||||
|
@ -2209,6 +2209,26 @@ sp_instr_set::exec_core(THD *thd, uint *nextp)
|
|||||||
{
|
{
|
||||||
int res= thd->spcont->set_item_eval(thd, m_offset, &m_value, m_type);
|
int res= thd->spcont->set_item_eval(thd, m_offset, &m_value, m_type);
|
||||||
|
|
||||||
|
if (res < 0 &&
|
||||||
|
thd->spcont->get_item(m_offset) == NULL &&
|
||||||
|
thd->spcont->found_handler_here())
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Failed to evaluate the value, the variable is still not initialized,
|
||||||
|
and a handler has been found. Set to null so we can continue.
|
||||||
|
*/
|
||||||
|
Item *it= new Item_null();
|
||||||
|
|
||||||
|
if (!it || thd->spcont->set_item_eval(thd, m_offset, &it, m_type) < 0)
|
||||||
|
{ /* If this also failed, we have to abort */
|
||||||
|
sp_rcontext *spcont= thd->spcont;
|
||||||
|
|
||||||
|
thd->spcont= 0; /* Avoid handlers */
|
||||||
|
my_error(ER_OUT_OF_RESOURCES, MYF(0));
|
||||||
|
spcont->clear_handler();
|
||||||
|
thd->spcont= spcont;
|
||||||
|
}
|
||||||
|
}
|
||||||
*nextp = m_ip+1;
|
*nextp = m_ip+1;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user