mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
Various syntax fixes in sql/sql_yacc.yy for stored procedures:
- No RESTICT|CASCADE in DROP SP (since it's not implemented)
- Added optional "noise" to FETCH: [[NEXT] FROM]
- At least one statement required in all block constructs except BEGIN-END
(where zero is allowed)
mysql-test/r/sp.result:
Modified test cases for optional [[NEXT] FROM] in FETCH.
mysql-test/t/sp.test:
Modified test cases for optional [[NEXT] FROM] in FETCH.
sql/sql_yacc.yy:
Various syntax fixes for stored procedures:
- No RESTICT|CASCADE in DROP SP (since it's not implemented)
- Added optional "noise" to FETCH: [[NEXT] FROM]
- At least one statement required in all block constructs except BEGIN-END
(where zero is allowed)
This commit is contained in:
@@ -851,8 +851,8 @@ repeat
|
||||
begin
|
||||
declare a char(16);
|
||||
declare b,c int;
|
||||
fetch c1 into a, b;
|
||||
fetch c2 into c;
|
||||
fetch from c1 into a, b;
|
||||
fetch next from c2 into c;
|
||||
if not done then
|
||||
if b < c then
|
||||
insert into test.t3 values (a, b);
|
||||
|
||||
@@ -953,8 +953,8 @@ begin
|
||||
declare a char(16);
|
||||
declare b,c int;
|
||||
|
||||
fetch c1 into a, b;
|
||||
fetch c2 into c;
|
||||
fetch from c1 into a, b;
|
||||
fetch next from c2 into c;
|
||||
if not done then
|
||||
if b < c then
|
||||
insert into test.t3 values (a, b);
|
||||
|
||||
@@ -792,7 +792,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
||||
sp_c_chistics sp_a_chistics sp_chistic sp_c_chistic
|
||||
END_OF_INPUT
|
||||
|
||||
%type <NONE> call sp_proc_stmts sp_proc_stmt
|
||||
%type <NONE> call sp_proc_stmts sp_proc_stmts1 sp_proc_stmt
|
||||
%type <num> sp_decl_idents sp_opt_inout sp_handler_type sp_hcond_list
|
||||
%type <spcondtype> sp_cond sp_hcond
|
||||
%type <spblock> sp_decls sp_decl
|
||||
@@ -1507,7 +1507,11 @@ sp_opt_inout:
|
||||
sp_proc_stmts:
|
||||
/* Empty */ {}
|
||||
| sp_proc_stmts { Lex->query_tables= 0; } sp_proc_stmt ';'
|
||||
;
|
||||
|
||||
sp_proc_stmts1:
|
||||
sp_proc_stmt ';' {}
|
||||
| sp_proc_stmts1 { Lex->query_tables= 0; } sp_proc_stmt ';'
|
||||
;
|
||||
|
||||
sp_decls:
|
||||
@@ -2070,16 +2074,16 @@ sp_proc_stmt:
|
||||
i= new sp_instr_copen(sp->instructions(), lex->spcont, offset);
|
||||
sp->add_instr(i);
|
||||
}
|
||||
| FETCH_SYM ident INTO
|
||||
| FETCH_SYM sp_opt_fetch_noise ident INTO
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
sp_head *sp= lex->sphead;
|
||||
uint offset;
|
||||
sp_instr_cfetch *i;
|
||||
|
||||
if (! lex->spcont->find_cursor(&$2, &offset))
|
||||
if (! lex->spcont->find_cursor(&$3, &offset))
|
||||
{
|
||||
net_printf(YYTHD, ER_SP_CURSOR_MISMATCH, $2.str);
|
||||
net_printf(YYTHD, ER_SP_CURSOR_MISMATCH, $3.str);
|
||||
YYABORT;
|
||||
}
|
||||
i= new sp_instr_cfetch(sp->instructions(), lex->spcont, offset);
|
||||
@@ -2104,6 +2108,12 @@ sp_proc_stmt:
|
||||
}
|
||||
;
|
||||
|
||||
sp_opt_fetch_noise:
|
||||
/* Empty */
|
||||
| NEXT_SYM FROM
|
||||
| FROM
|
||||
;
|
||||
|
||||
sp_fetch_list:
|
||||
ident
|
||||
{
|
||||
@@ -2164,7 +2174,7 @@ sp_if:
|
||||
sp->push_backpatch(i, ctx->push_label((char *)"", 0));
|
||||
sp->add_instr(i);
|
||||
}
|
||||
sp_proc_stmts
|
||||
sp_proc_stmts1
|
||||
{
|
||||
sp_head *sp= Lex->sphead;
|
||||
sp_pcontext *ctx= Lex->spcont;
|
||||
@@ -2186,7 +2196,7 @@ sp_if:
|
||||
sp_elseifs:
|
||||
/* Empty */
|
||||
| ELSEIF_SYM sp_if
|
||||
| ELSE sp_proc_stmts
|
||||
| ELSE sp_proc_stmts1
|
||||
;
|
||||
|
||||
sp_case:
|
||||
@@ -2218,7 +2228,7 @@ sp_case:
|
||||
lex->query_tables= 0;
|
||||
sp->add_instr(i);
|
||||
}
|
||||
sp_proc_stmts
|
||||
sp_proc_stmts1
|
||||
{
|
||||
sp_head *sp= Lex->sphead;
|
||||
sp_pcontext *ctx= Lex->spcont;
|
||||
@@ -2247,7 +2257,7 @@ sp_whens:
|
||||
|
||||
sp->add_instr(i);
|
||||
}
|
||||
| ELSE sp_proc_stmts {}
|
||||
| ELSE sp_proc_stmts1 {}
|
||||
| WHEN_SYM sp_case {}
|
||||
;
|
||||
|
||||
@@ -2325,7 +2335,7 @@ sp_unlabeled_control:
|
||||
lex->spcont= ctx->pop_context();
|
||||
}
|
||||
| LOOP_SYM
|
||||
sp_proc_stmts END LOOP_SYM
|
||||
sp_proc_stmts1 END LOOP_SYM
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
uint ip= lex->sphead->instructions();
|
||||
@@ -2348,7 +2358,7 @@ sp_unlabeled_control:
|
||||
lex->query_tables= 0;
|
||||
sp->add_instr(i);
|
||||
}
|
||||
sp_proc_stmts END WHILE_SYM
|
||||
sp_proc_stmts1 END WHILE_SYM
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
uint ip= lex->sphead->instructions();
|
||||
@@ -2357,7 +2367,7 @@ sp_unlabeled_control:
|
||||
|
||||
lex->sphead->add_instr(i);
|
||||
}
|
||||
| REPEAT_SYM sp_proc_stmts UNTIL_SYM expr END REPEAT_SYM
|
||||
| REPEAT_SYM sp_proc_stmts1 UNTIL_SYM expr END REPEAT_SYM
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
uint ip= lex->sphead->instructions();
|
||||
@@ -5473,7 +5483,7 @@ drop:
|
||||
lex->drop_if_exists=$3;
|
||||
lex->name=$4.str;
|
||||
}
|
||||
| DROP FUNCTION_SYM if_exists sp_name opt_restrict
|
||||
| DROP FUNCTION_SYM if_exists sp_name
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (lex->sphead)
|
||||
@@ -5485,7 +5495,7 @@ drop:
|
||||
lex->drop_if_exists= $3;
|
||||
lex->spname= $4;
|
||||
}
|
||||
| DROP PROCEDURE if_exists sp_name opt_restrict
|
||||
| DROP PROCEDURE if_exists sp_name
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (lex->sphead)
|
||||
|
||||
Reference in New Issue
Block a user