Commit 83a8ee38 authored by unknown's avatar unknown

Fixed BUG#9004: Inconsistent behaviour of SP re. warnings


mysql-test/r/sp.result:
  New test case for BUG#9004.
  Also updated some other results, since formerly "invisible" (but correct)
  warnings now are visible.
mysql-test/t/sp.test:
  New test case for BUG#9004.
sql/sql_error.cc:
  Don't reset warnings while executing a stored routine.
sql/sql_parse.cc:
  Don't reset warnings while executing a stored routine.
parent 4f1f0b67
...@@ -667,6 +667,8 @@ delete from t1| ...@@ -667,6 +667,8 @@ delete from t1|
drop table if exists t3| drop table if exists t3|
create table t3 ( s char(16), d int)| create table t3 ( s char(16), d int)|
call into_test4()| call into_test4()|
Warnings:
Warning 1329 No data to FETCH
select * from t3| select * from t3|
s d s d
into4 NULL into4 NULL
...@@ -1792,7 +1794,12 @@ end if; ...@@ -1792,7 +1794,12 @@ end if;
insert into t4 values (2, rc, t3); insert into t4 values (2, rc, t3);
end| end|
call bug1863(10)| call bug1863(10)|
Warnings:
Note 1051 Unknown table 'temp_t1'
Warning 1329 No data to FETCH
call bug1863(10)| call bug1863(10)|
Warnings:
Warning 1329 No data to FETCH
select * from t4| select * from t4|
f1 rc t3 f1 rc t3
2 0 NULL 2 0 NULL
...@@ -2090,7 +2097,11 @@ begin ...@@ -2090,7 +2097,11 @@ begin
end| end|
call bug4579_1()| call bug4579_1()|
call bug4579_1()| call bug4579_1()|
Warnings:
Warning 1329 No data to FETCH
call bug4579_1()| call bug4579_1()|
Warnings:
Warning 1329 No data to FETCH
drop procedure bug4579_1| drop procedure bug4579_1|
drop procedure bug4579_2| drop procedure bug4579_2|
drop table t3| drop table t3|
...@@ -3010,4 +3021,24 @@ select @x| ...@@ -3010,4 +3021,24 @@ select @x|
@x @x
2005 2005
drop function bug8861| drop function bug8861|
drop procedure if exists bug9004_1|
drop procedure if exists bug9004_2|
create procedure bug9004_1(x char(16))
begin
insert into t1 values (x, 42);
insert into t1 values (x, 17);
end|
create procedure bug9004_2(x char(16))
call bug9004_1(x)|
call bug9004_1('12345678901234567')|
Warnings:
Warning 1265 Data truncated for column 'id' at row 1
Warning 1265 Data truncated for column 'id' at row 2
call bug9004_2('12345678901234567890')|
Warnings:
Warning 1265 Data truncated for column 'id' at row 1
Warning 1265 Data truncated for column 'id' at row 2
delete from t1|
drop procedure bug9004_1|
drop procedure bug9004_2|
drop table t1,t2; drop table t1,t2;
...@@ -3700,6 +3700,30 @@ select @x| ...@@ -3700,6 +3700,30 @@ select @x|
drop function bug8861| drop function bug8861|
#
# BUG#9004: Inconsistent behaviour of SP re. warnings
#
--disable_warnings
drop procedure if exists bug9004_1|
drop procedure if exists bug9004_2|
--enable_warnings
create procedure bug9004_1(x char(16))
begin
insert into t1 values (x, 42);
insert into t1 values (x, 17);
end|
create procedure bug9004_2(x char(16))
call bug9004_1(x)|
# Truncation warnings expected...
call bug9004_1('12345678901234567')|
call bug9004_2('12345678901234567890')|
delete from t1|
drop procedure bug9004_1|
drop procedure bug9004_2|
# #
# BUG#NNNN: New bug synopsis # BUG#NNNN: New bug synopsis
# #
......
...@@ -113,7 +113,7 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level, ...@@ -113,7 +113,7 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
!(thd->options & OPTION_SQL_NOTES)) !(thd->options & OPTION_SQL_NOTES))
DBUG_RETURN(0); DBUG_RETURN(0);
if (thd->query_id != thd->warn_id) if (thd->query_id != thd->warn_id && !thd->spcont)
mysql_reset_errors(thd, 0); mysql_reset_errors(thd, 0);
thd->got_warning= 1; thd->got_warning= 1;
......
...@@ -2268,9 +2268,11 @@ mysql_execute_command(THD *thd) ...@@ -2268,9 +2268,11 @@ mysql_execute_command(THD *thd)
A better approach would be to reset this for any commands A better approach would be to reset this for any commands
that is not a SHOW command or a select that only access local that is not a SHOW command or a select that only access local
variables, but for now this is probably good enough. variables, but for now this is probably good enough.
Don't reset warnings when executing a stored routine.
*/ */
if (all_tables || &lex->select_lex != lex->all_selects_list || if ((all_tables || &lex->select_lex != lex->all_selects_list ||
lex->spfuns.records || lex->spprocs.records) lex->spfuns.records || lex->spprocs.records) &&
!thd->spcont)
mysql_reset_errors(thd, 0); mysql_reset_errors(thd, 0);
#ifdef HAVE_REPLICATION #ifdef HAVE_REPLICATION
......
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