Fixed BUG#2780: Stored procedure exit handler ignored for warnings.
Actually catch pushed warnings.
This commit is contained in:
parent
4a6e6251e7
commit
1541f2e794
@ -1044,6 +1044,28 @@ select @x|
|
||||
42
|
||||
drop procedure bug2776_1|
|
||||
drop procedure bug2776_2|
|
||||
drop table if exists t3|
|
||||
create table t3 (s1 smallint)|
|
||||
insert into t3 values (123456789012)|
|
||||
Warnings:
|
||||
Warning 1263 Data truncated, out of range for column 's1' at row 1
|
||||
create procedure bug2780()
|
||||
begin
|
||||
declare exit handler for sqlwarning set @x = 1;
|
||||
set @x = 0;
|
||||
insert into t3 values (123456789012);
|
||||
insert into t3 values (0);
|
||||
end|
|
||||
call bug2780()|
|
||||
select @x|
|
||||
@x
|
||||
1
|
||||
select * from t3|
|
||||
s1
|
||||
32767
|
||||
32767
|
||||
drop procedure bug2780|
|
||||
drop table t3|
|
||||
drop table if exists fac|
|
||||
create table fac (n int unsigned not null primary key, f bigint unsigned)|
|
||||
create procedure ifac(n int unsigned)
|
||||
|
@ -1215,6 +1215,32 @@ select @x|
|
||||
drop procedure bug2776_1|
|
||||
drop procedure bug2776_2|
|
||||
|
||||
#
|
||||
# BUG#2780
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists t3|
|
||||
--enable_warnings
|
||||
create table t3 (s1 smallint)|
|
||||
|
||||
insert into t3 values (123456789012)|
|
||||
|
||||
create procedure bug2780()
|
||||
begin
|
||||
declare exit handler for sqlwarning set @x = 1;
|
||||
|
||||
set @x = 0;
|
||||
insert into t3 values (123456789012);
|
||||
insert into t3 values (0);
|
||||
end|
|
||||
|
||||
call bug2780()|
|
||||
select @x|
|
||||
select * from t3|
|
||||
|
||||
drop procedure bug2780|
|
||||
drop table t3|
|
||||
|
||||
|
||||
#
|
||||
# Some "real" examples
|
||||
|
@ -43,6 +43,7 @@ This file contains the implementation of error and warnings related
|
||||
***********************************************************************/
|
||||
|
||||
#include "mysql_priv.h"
|
||||
#include "sp_rcontext.h"
|
||||
|
||||
/*
|
||||
Store a new message in an error object
|
||||
@ -108,6 +109,9 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
|
||||
|
||||
MYSQL_ERROR *err= NULL;
|
||||
|
||||
if (thd->spcont && thd->spcont->find_handler(code))
|
||||
DBUG_RETURN(NULL);
|
||||
|
||||
if (thd->warn_list.elements < thd->variables.max_error_count)
|
||||
{
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user