Commit 8468cde4 authored by unknown's avatar unknown

Fixed BUG#2780: Stored procedure exit handler ignored for warnings.

Actually catch pushed warnings.


mysql-test/r/sp.result:
  New test case for BUG#2780.
mysql-test/t/sp.test:
  New test case for BUG#2780.
sql/sql_error.cc:
  Actually attempt to catch pushed warnings when running SPs.
parent c22ccc13
...@@ -1044,6 +1044,28 @@ select @x| ...@@ -1044,6 +1044,28 @@ select @x|
42 42
drop procedure bug2776_1| drop procedure bug2776_1|
drop procedure bug2776_2| 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| drop table if exists fac|
create table fac (n int unsigned not null primary key, f bigint unsigned)| create table fac (n int unsigned not null primary key, f bigint unsigned)|
create procedure ifac(n int unsigned) create procedure ifac(n int unsigned)
......
...@@ -1215,6 +1215,32 @@ select @x| ...@@ -1215,6 +1215,32 @@ select @x|
drop procedure bug2776_1| drop procedure bug2776_1|
drop procedure bug2776_2| 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 # Some "real" examples
......
...@@ -43,6 +43,7 @@ This file contains the implementation of error and warnings related ...@@ -43,6 +43,7 @@ This file contains the implementation of error and warnings related
***********************************************************************/ ***********************************************************************/
#include "mysql_priv.h" #include "mysql_priv.h"
#include "sp_rcontext.h"
/* /*
Store a new message in an error object Store a new message in an error object
...@@ -108,6 +109,9 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level, ...@@ -108,6 +109,9 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
MYSQL_ERROR *err= NULL; 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) if (thd->warn_list.elements < thd->variables.max_error_count)
{ {
/* /*
......
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