Fixed BUG#7299: Stored procedures: exception handler catches not-found conditions
mysql-test/r/sp-error.result: Added test case for BUG#7299. mysql-test/t/sp-error.test: Added test case for BUG#7299. sql/sp_rcontext.cc: Corrected cut&paste error; make sure we only catch actual errors with sqlexception.
This commit is contained in:
parent
99c0dd3bc6
commit
5f006200d1
@ -513,4 +513,17 @@ call bug9566()|
|
||||
ERROR HY000: Table 'proc' was not locked with LOCK TABLES
|
||||
unlock tables|
|
||||
drop procedure bug9566|
|
||||
drop procedure if exists bug7299|
|
||||
create procedure bug7299()
|
||||
begin
|
||||
declare v int;
|
||||
declare c cursor for select val from t1;
|
||||
declare exit handler for sqlexception select 'Error!';
|
||||
open c;
|
||||
fetch c into v;
|
||||
end|
|
||||
delete from t1|
|
||||
call bug7299()|
|
||||
ERROR 02000: No data to FETCH
|
||||
drop procedure bug7299|
|
||||
drop table t1|
|
||||
|
@ -720,6 +720,28 @@ unlock tables|
|
||||
drop procedure bug9566|
|
||||
|
||||
|
||||
#
|
||||
# BUG#7299: Stored procedures: exception handler catches not-found conditions
|
||||
#
|
||||
--disable_warnings
|
||||
drop procedure if exists bug7299|
|
||||
--enable_warnings
|
||||
create procedure bug7299()
|
||||
begin
|
||||
declare v int;
|
||||
declare c cursor for select val from t1;
|
||||
declare exit handler for sqlexception select 'Error!';
|
||||
|
||||
open c;
|
||||
fetch c into v;
|
||||
end|
|
||||
|
||||
delete from t1|
|
||||
--error ER_SP_FETCH_NO_DATA
|
||||
call bug7299()|
|
||||
drop procedure bug7299|
|
||||
|
||||
|
||||
#
|
||||
# BUG#NNNN: New bug synopsis
|
||||
#
|
||||
|
@ -95,8 +95,8 @@ sp_rcontext::find_handler(uint sql_errno,
|
||||
found= i;
|
||||
break;
|
||||
case sp_cond_type_t::exception:
|
||||
if ((sqlstate[0] != '0' || sqlstate[1] > '2' ||
|
||||
level == MYSQL_ERROR::WARN_LEVEL_ERROR) &&
|
||||
if ((sqlstate[0] != '0' || sqlstate[1] > '2') &&
|
||||
level == MYSQL_ERROR::WARN_LEVEL_ERROR &&
|
||||
(found < 0 || m_handler[found].cond->type > sp_cond_type_t::state))
|
||||
found= i;
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user