mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fixed BUG#3287: Stored Procedure Case Statement Not SQL:2003 Compliant.
include/mysqld_error.h: New error code for missing ELSE in SP CASE statement. include/sql_state.h: New error code for missing ELSE in SP CASE statement. mysql-test/r/sp-error.result: Test case for missing ELSE in SP CASE statement. mysql-test/t/sp-error.test: Test case for missing ELSE in SP CASE statement. sql/share/czech/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/danish/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/dutch/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/english/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/estonian/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/french/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/german/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/greek/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/hungarian/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/italian/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/japanese/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/korean/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/norwegian-ny/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/norwegian/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/polish/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/portuguese/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/romanian/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/russian/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/serbian/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/slovak/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/spanish/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/swedish/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/share/ukrainian/errmsg.txt: New error message for missing ELSE in SP CASE statement. sql/sql_yacc.yy: Generate run-time error instruction when no ELSE in SP CASE statement.
This commit is contained in:
@ -342,4 +342,5 @@
|
|||||||
#define ER_SP_NO_USE 1323
|
#define ER_SP_NO_USE 1323
|
||||||
#define ER_SP_VARCOND_AFTER_CURSHNDLR 1324
|
#define ER_SP_VARCOND_AFTER_CURSHNDLR 1324
|
||||||
#define ER_SP_CURSOR_AFTER_HANDLER 1325
|
#define ER_SP_CURSOR_AFTER_HANDLER 1325
|
||||||
#define ER_ERROR_MESSAGES 326
|
#define ER_SP_CASE_NOT_FOUND 1326
|
||||||
|
#define ER_ERROR_MESSAGES 327
|
||||||
|
@ -199,3 +199,4 @@ ER_SP_SUBSELECT_NYI, "0A000", "",
|
|||||||
ER_SP_NO_USE, "42000", "",
|
ER_SP_NO_USE, "42000", "",
|
||||||
ER_SP_VARCOND_AFTER_CURSHNDLR, "42000", "",
|
ER_SP_VARCOND_AFTER_CURSHNDLR, "42000", "",
|
||||||
ER_SP_CURSOR_AFTER_HANDLER, "42000", "",
|
ER_SP_CURSOR_AFTER_HANDLER, "42000", "",
|
||||||
|
ER_SP_CASE_NOT_FOUND, "20000", "",
|
||||||
|
@ -341,4 +341,25 @@ call bug2329_2()|
|
|||||||
ERROR 42S22: Unknown column 'v' in 'field list'
|
ERROR 42S22: Unknown column 'v' in 'field list'
|
||||||
drop procedure bug2329_1|
|
drop procedure bug2329_1|
|
||||||
drop procedure bug2329_2|
|
drop procedure bug2329_2|
|
||||||
|
create function bug3287() returns int
|
||||||
|
begin
|
||||||
|
declare v int default null;
|
||||||
|
case
|
||||||
|
when v is not null then return 1;
|
||||||
|
end case;
|
||||||
|
return 2;
|
||||||
|
end|
|
||||||
|
select bug3287()|
|
||||||
|
ERROR 20000: Case not found for CASE statement
|
||||||
|
drop function bug3287|
|
||||||
|
create procedure bug3287(x int)
|
||||||
|
case x
|
||||||
|
when 0 then
|
||||||
|
insert into test.t1 values (x, 0.1);
|
||||||
|
when 1 then
|
||||||
|
insert into test.t1 values (x, 1.1);
|
||||||
|
end case|
|
||||||
|
call bug3287(2)|
|
||||||
|
ERROR 20000: Case not found for CASE statement
|
||||||
|
drop procedure bug3287|
|
||||||
drop table t1|
|
drop table t1|
|
||||||
|
@ -473,6 +473,33 @@ call bug2329_2()|
|
|||||||
drop procedure bug2329_1|
|
drop procedure bug2329_1|
|
||||||
drop procedure bug2329_2|
|
drop procedure bug2329_2|
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#3287
|
||||||
|
#
|
||||||
|
create function bug3287() returns int
|
||||||
|
begin
|
||||||
|
declare v int default null;
|
||||||
|
|
||||||
|
case
|
||||||
|
when v is not null then return 1;
|
||||||
|
end case;
|
||||||
|
return 2;
|
||||||
|
end|
|
||||||
|
--error 1326
|
||||||
|
select bug3287()|
|
||||||
|
drop function bug3287|
|
||||||
|
|
||||||
|
create procedure bug3287(x int)
|
||||||
|
case x
|
||||||
|
when 0 then
|
||||||
|
insert into test.t1 values (x, 0.1);
|
||||||
|
when 1 then
|
||||||
|
insert into test.t1 values (x, 1.1);
|
||||||
|
end case|
|
||||||
|
--error 1326
|
||||||
|
call bug3287(2)|
|
||||||
|
drop procedure bug3287|
|
||||||
|
|
||||||
drop table t1|
|
drop table t1|
|
||||||
|
|
||||||
delimiter ;|
|
delimiter ;|
|
||||||
|
@ -338,3 +338,4 @@ character-set=latin2
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -332,3 +332,4 @@ character-set=latin1
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -340,3 +340,4 @@ character-set=latin1
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -329,3 +329,4 @@ character-set=latin1
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -334,3 +334,4 @@ character-set=latin7
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -329,3 +329,4 @@ character-set=latin1
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -341,3 +341,4 @@ character-set=latin1
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -329,3 +329,4 @@ character-set=greek
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -331,3 +331,4 @@ character-set=latin2
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -329,3 +329,4 @@ character-set=latin1
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -331,3 +331,4 @@ character-set=ujis
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -329,3 +329,4 @@ character-set=euckr
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -331,3 +331,4 @@ character-set=latin1
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -331,3 +331,4 @@ character-set=latin1
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -333,3 +333,4 @@ character-set=latin2
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -330,3 +330,4 @@ character-set=latin1
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -333,3 +333,4 @@ character-set=latin2
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -331,3 +331,4 @@ character-set=koi8r
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -324,3 +324,4 @@ character-set=cp1250
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -337,3 +337,4 @@ character-set=latin2
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -331,3 +331,4 @@ character-set=latin1
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -329,3 +329,4 @@ character-set=latin1
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -334,3 +334,4 @@ character-set=koi8u
|
|||||||
"USE is not allowed in a stored procedure"
|
"USE is not allowed in a stored procedure"
|
||||||
"Variable or condition declaration after cursor or handler declaration"
|
"Variable or condition declaration after cursor or handler declaration"
|
||||||
"Cursor declaration after handler declaration"
|
"Cursor declaration after handler declaration"
|
||||||
|
"Case not found for CASE statement"
|
||||||
|
@ -1908,9 +1908,16 @@ sp_case:
|
|||||||
;
|
;
|
||||||
|
|
||||||
sp_whens:
|
sp_whens:
|
||||||
/* Empty */ {}
|
/* Empty */
|
||||||
| WHEN_SYM sp_case {}
|
{
|
||||||
|
sp_head *sp= Lex->sphead;
|
||||||
|
uint ip= sp->instructions();
|
||||||
|
sp_instr_error *i= new sp_instr_error(ip, ER_SP_CASE_NOT_FOUND);
|
||||||
|
|
||||||
|
sp->add_instr(i);
|
||||||
|
}
|
||||||
| ELSE sp_proc_stmts {}
|
| ELSE sp_proc_stmts {}
|
||||||
|
| WHEN_SYM sp_case {}
|
||||||
;
|
;
|
||||||
|
|
||||||
sp_labeled_control:
|
sp_labeled_control:
|
||||||
|
Reference in New Issue
Block a user