mirror of
https://github.com/MariaDB/server.git
synced 2025-12-15 08:21:24 +03:00
Added check for selects without into in SPs, and updated error messages and tests
accordingly.
This commit is contained in:
@@ -271,10 +271,10 @@
|
||||
#define ER_SP_DOES_NOT_EXIST 1252
|
||||
#define ER_SP_DROP_FAILED 1253
|
||||
#define ER_SP_STORE_FAILED 1254
|
||||
#define ER_SP_LEAVE_MISMATCH 1255
|
||||
#define ER_SP_ITERATE_MISMATCH 1256
|
||||
#define ER_SP_LABEL_REDEFINE 1257
|
||||
#define ER_SP_LABEL_MISMATCH 1258
|
||||
#define ER_SP_UNINIT_VAR 1259
|
||||
#define ER_SP_LILABEL_MISMATCH 1255
|
||||
#define ER_SP_LABEL_REDEFINE 1256
|
||||
#define ER_SP_LABEL_MISMATCH 1257
|
||||
#define ER_SP_UNINIT_VAR 1258
|
||||
#define ER_SP_BADSELECT 1259
|
||||
#define ER_ERROR_MESSAGES 260
|
||||
|
||||
|
||||
@@ -76,6 +76,19 @@ repeat
|
||||
insert into test.t1 values (repeat("b",3), x);
|
||||
set x = x-1;
|
||||
until x = 0 end repeat;
|
||||
create procedure b2(x int)
|
||||
repeat(select 1 into outfile 'b2');
|
||||
insert into test.t1 values (repeat("b2",3), x);
|
||||
set x = x-1;
|
||||
until x = 0 end repeat;
|
||||
drop procedure b2;
|
||||
create procedure b3(x int)
|
||||
repeat
|
||||
select * from test.t1; # No INTO!
|
||||
insert into test.t1 values (repeat("b3",3), x);
|
||||
set x = x-1;
|
||||
until x = 0 end repeat;
|
||||
SELECT in a stored procedure must have INTO
|
||||
create procedure c(x int)
|
||||
hmm: while x > 0 do
|
||||
insert into test.t1 values ("c", x);
|
||||
|
||||
@@ -127,6 +127,24 @@ repeat
|
||||
set x = x-1;
|
||||
until x = 0 end repeat|
|
||||
|
||||
# Check that repeat isn't parsed the wrong way
|
||||
create procedure b2(x int)
|
||||
repeat(select 1 into outfile 'b2');
|
||||
insert into test.t1 values (repeat("b2",3), x);
|
||||
set x = x-1;
|
||||
until x = 0 end repeat|
|
||||
# We don't actually want to call it.
|
||||
drop procedure b2|
|
||||
|
||||
# Btw, this should generate an error
|
||||
--error 1259
|
||||
create procedure b3(x int)
|
||||
repeat
|
||||
select * from test.t1; # No INTO!
|
||||
insert into test.t1 values (repeat("b3",3), x);
|
||||
set x = x-1;
|
||||
until x = 0 end repeat|
|
||||
|
||||
# Labelled WHILE with ITERATE (pointless really)
|
||||
create procedure c(x int)
|
||||
hmm: while x > 0 do
|
||||
|
||||
@@ -264,9 +264,9 @@ v/*
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -258,9 +258,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -266,9 +266,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -256,8 +256,8 @@
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -260,9 +260,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -255,9 +255,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -265,9 +265,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -255,9 +255,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -257,9 +257,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -255,9 +255,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -257,9 +257,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -255,9 +255,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -257,9 +257,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -257,9 +257,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -255,9 +255,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -259,9 +259,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -258,9 +258,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -251,9 +251,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -263,9 +263,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -256,9 +256,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -255,9 +255,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -260,9 +260,9 @@
|
||||
"PROCEDURE already exists"
|
||||
"PROCEDURE does not exist"
|
||||
"Failed to DROP PROCEDURE"
|
||||
"Failed to store PROCEDURE"
|
||||
"LEAVE with no matching label"
|
||||
"ITERATE with no matching label"
|
||||
"Failed to CREATE PROCEDURE"
|
||||
"%s with no matching label"
|
||||
"Redefining label"
|
||||
"End-label without match"
|
||||
"Referring to uninitialized variable"
|
||||
"SELECT in a stored procedure must have INTO"
|
||||
|
||||
@@ -1041,11 +1041,20 @@ sp_proc_stmt:
|
||||
statement
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
sp_instr_stmt *i= new sp_instr_stmt(lex->sphead->instructions());
|
||||
|
||||
i->set_lex(lex);
|
||||
lex->sphead->add_instr(i);
|
||||
lex->sphead->restore_lex(YYTHD);
|
||||
if (lex->sql_command == SQLCOM_SELECT && !lex->result)
|
||||
{
|
||||
send_error(YYTHD, ER_SP_BADSELECT);
|
||||
YYABORT;
|
||||
}
|
||||
else
|
||||
{
|
||||
sp_instr_stmt *i= new sp_instr_stmt(lex->sphead->instructions());
|
||||
|
||||
i->set_lex(lex);
|
||||
lex->sphead->add_instr(i);
|
||||
lex->sphead->restore_lex(YYTHD);
|
||||
}
|
||||
}
|
||||
| IF sp_if END IF {}
|
||||
| CASE_SYM WHEN_SYM
|
||||
@@ -1096,7 +1105,7 @@ sp_proc_stmt:
|
||||
|
||||
if (! lab)
|
||||
{
|
||||
send_error(YYTHD, ER_SP_LEAVE_MISMATCH);
|
||||
send_error(YYTHD, ER_SP_LILABEL_MISMATCH, "LEAVE");
|
||||
YYABORT;
|
||||
}
|
||||
else
|
||||
@@ -1114,7 +1123,7 @@ sp_proc_stmt:
|
||||
|
||||
if (! lab)
|
||||
{
|
||||
send_error(YYTHD, ER_SP_ITERATE_MISMATCH);
|
||||
send_error(YYTHD, ER_SP_LILABEL_MISMATCH, "ITERATE");
|
||||
YYABORT;
|
||||
}
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user