Commit d2b66206 authored by unknown's avatar unknown

Merge sinisa@work.mysql.com:/home/bk/mysql-5.0

into sinisa.nasamreza.org:/mnt/work/petica


mysql-test/r/sp.result:
  Auto merged
mysql-test/t/sp.test:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
parents 6d5f7d1c cbc75706
......@@ -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
......@@ -72,10 +72,23 @@ set x = x-1;
insert into test.t1 values ("a", x);
end while;
create procedure b(x int)
sprepeat
insert into test.t1 values ("b", x);
repeat
insert into test.t1 values (repeat("b",3), x);
set x = x-1;
until x = 0 end sprepeat;
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);
......@@ -196,9 +209,9 @@ delete from t1;
call b(3);
select * from t1;
id data
b 3
b 2
b 1
bbb 3
bbb 2
bbb 1
delete from t1;
call c(3);
select * from t1;
......
......@@ -122,10 +122,28 @@ end while|
# REPEAT
create procedure b(x int)
sprepeat
insert into test.t1 values ("b", x);
repeat
insert into test.t1 values (repeat("b",3), x);
set x = x-1;
until x = 0 end sprepeat|
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)
......
......@@ -318,7 +318,7 @@ static SYMBOL symbols[] = {
{ "REPAIR", SYM(REPAIR),0,0},
{ "REPLACE", SYM(REPLACE),0,0},
{ "REPLICATION", SYM(REPLICATION),0,0},
{ "SPREPEAT", SYM(SPREPEAT_SYM),0,0}, /* QQ Temp. until conflict solved */
{ "REPEAT", SYM(REPEAT_SYM),0,0},
{ "REPEATABLE", SYM(REPEATABLE_SYM),0,0},
{ "REQUIRE", SYM(REQUIRE_SYM),0,0},
{ "RESET", SYM(RESET_SYM),0,0},
......@@ -567,7 +567,6 @@ static SYMBOL sql_functions[] = {
{ "RADIANS", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_radians)},
{ "RAND", SYM(RAND),0,0},
{ "RELEASE_LOCK", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_release_lock)},
{ "REPEAT", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_repeat)},
{ "REVERSE", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_reverse)},
{ "ROUND", SYM(ROUND),0,0},
{ "RPAD", SYM(FUNC_ARG3),0,CREATE_FUNC(create_func_rpad)},
......
......@@ -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"
......@@ -535,8 +535,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token ITERATE_SYM
%token LEAVE_SYM
%token LOOP_SYM
/* QQ This is temporary, until the REPEAT conflict is solved. */
%token SPREPEAT_SYM
%token REPEAT_SYM
%token UNTIL_SYM
%token WHILE_SYM
%token ASENSITIVE_SYM
......@@ -1042,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
......@@ -1097,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
......@@ -1115,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
......@@ -1284,8 +1292,8 @@ sp_unlabeled_control:
lex->sphead->add_instr(i);
}
| SPREPEAT_SYM sp_proc_stmts UNTIL_SYM expr END SPREPEAT_SYM
{ /* ^^ QQ temp. until conflict solved ^^ */
| REPEAT_SYM sp_proc_stmts UNTIL_SYM expr END REPEAT_SYM
{
LEX *lex= Lex;
uint ip= lex->sphead->instructions();
sp_label_t *lab= lex->spcont->last_label(); /* Jumping back */
......@@ -2517,6 +2525,8 @@ simple_expr:
{ $$= ((Item*(*)(Item*,Item*))($1.symbol->create_func))($3,$5);}
| FUNC_ARG3 '(' expr ',' expr ',' expr ')'
{ $$= ((Item*(*)(Item*,Item*,Item*))($1.symbol->create_func))($3,$5,$7);}
| REPEAT_SYM '(' expr ',' expr ')'
{ $$= new Item_func_repeat($3,$5); }
| ATAN '(' expr ')'
{ $$= new Item_func_atan($3); }
| ATAN '(' expr ',' expr ')'
......
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