Additional fix for BUG#5907: Traditional mode: invalid value can be inserted via a stored procedure
... make the handler catch too. mysql-test/r/strict.result: Updated corrected result for BUG#5907. mysql-test/t/strict.test: Corrected test for BUG#5907. sql/sp_head.cc: Make handlers catch certain bad data exceptions in strict mode too.
This commit is contained in:
parent
b419262fe4
commit
f3281e7b33
@ -1180,7 +1180,8 @@ Note 1305 PROCEDURE t1 does not exist
|
||||
create procedure t1 () begin declare exit handler for sqlexception
|
||||
select'a'; insert into t1 values (200); end;|
|
||||
call t1();
|
||||
ERROR 22003: Out of range value adjusted for column 'col1' at row 1
|
||||
a
|
||||
a
|
||||
select * from t1;
|
||||
col1
|
||||
drop procedure t1;
|
||||
|
@ -1040,7 +1040,6 @@ delimiter |;
|
||||
create procedure t1 () begin declare exit handler for sqlexception
|
||||
select'a'; insert into t1 values (200); end;|
|
||||
delimiter ;|
|
||||
--error 1264
|
||||
call t1();
|
||||
select * from t1;
|
||||
drop procedure t1;
|
||||
|
@ -561,7 +561,10 @@ sp_head::execute(THD *thd)
|
||||
// Check if an exception has occurred and a handler has been found
|
||||
// Note: We havo to check even if ret==0, since warnings (and some
|
||||
// errors don't return a non-zero value.
|
||||
if (!thd->killed && ctx)
|
||||
// We also have to check even if thd->killed != 0, since some
|
||||
// errors return with this even when a handler has been found
|
||||
// (e.g. "bad data").
|
||||
if (ctx)
|
||||
{
|
||||
uint hf;
|
||||
|
||||
@ -579,6 +582,7 @@ sp_head::execute(THD *thd)
|
||||
ctx->clear_handler();
|
||||
ctx->in_handler= TRUE;
|
||||
thd->clear_error();
|
||||
thd->killed= THD::NOT_KILLED;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user