MDEV-17666 sql_mode=ORACLE: Keyword ELSEIF should not be reserved

This commit is contained in:
Alexander Barkov 2018-11-12 00:01:12 +04:00
parent f5855ba03d
commit 7f4aee2233
7 changed files with 48 additions and 5 deletions

View file

@ -532,3 +532,17 @@ BEGIN
NULL; NULL;
END; END;
/ /
#
# MDEV-17666 sql_mode=ORACLE: Keyword ELSEIF should not be reserved
#
DECLARE
ELSEIF INT;
BEGIN
ELSEIF:=1;
END;
/
BEGIN
<<ELSEIF>>
NULL;
END;
/

View file

@ -316,3 +316,26 @@ BEGIN
END; END;
/ /
DELIMITER ;/ DELIMITER ;/
--echo #
--echo # MDEV-17666 sql_mode=ORACLE: Keyword ELSEIF should not be reserved
--echo #
DELIMITER /;
DECLARE
ELSEIF INT;
BEGIN
ELSEIF:=1;
END;
/
DELIMITER ;/
DELIMITER /;
BEGIN
<<ELSEIF>>
NULL;
END;
/
DELIMITER ;/

View file

@ -258,7 +258,8 @@ void compute_tokens()
set_start_expr_token(RETURN_MARIADB_SYM); set_start_expr_token(RETURN_MARIADB_SYM);
set_start_expr_token(RETURN_ORACLE_SYM); set_start_expr_token(RETURN_ORACLE_SYM);
set_start_expr_token(IF_SYM); set_start_expr_token(IF_SYM);
set_start_expr_token(ELSEIF_SYM); set_start_expr_token(ELSEIF_MARIADB_SYM);
set_start_expr_token(ELSEIF_ORACLE_SYM);
set_start_expr_token(CASE_SYM); set_start_expr_token(CASE_SYM);
set_start_expr_token(WHEN_SYM); set_start_expr_token(WHEN_SYM);
set_start_expr_token(WHILE_SYM); set_start_expr_token(WHILE_SYM);

View file

@ -205,7 +205,7 @@ static SYMBOL symbols[] = {
{ "DYNAMIC", SYM(DYNAMIC_SYM)}, { "DYNAMIC", SYM(DYNAMIC_SYM)},
{ "EACH", SYM(EACH_SYM)}, { "EACH", SYM(EACH_SYM)},
{ "ELSE", SYM(ELSE)}, { "ELSE", SYM(ELSE)},
{ "ELSEIF", SYM(ELSEIF_SYM)}, { "ELSEIF", SYM(ELSEIF_MARIADB_SYM)},
{ "ELSIF", SYM(ELSIF_MARIADB_SYM)}, { "ELSIF", SYM(ELSIF_MARIADB_SYM)},
{ "ENABLE", SYM(ENABLE_SYM)}, { "ENABLE", SYM(ENABLE_SYM)},
{ "ENCLOSED", SYM(ENCLOSED)}, { "ENCLOSED", SYM(ENCLOSED)},

View file

@ -845,6 +845,7 @@ int Lex_input_stream::find_keyword(Lex_ident_cli_st *kwd,
case BODY_MARIADB_SYM: return BODY_ORACLE_SYM; case BODY_MARIADB_SYM: return BODY_ORACLE_SYM;
case CONTINUE_MARIADB_SYM: return CONTINUE_ORACLE_SYM; case CONTINUE_MARIADB_SYM: return CONTINUE_ORACLE_SYM;
case DECODE_MARIADB_SYM: return DECODE_ORACLE_SYM; case DECODE_MARIADB_SYM: return DECODE_ORACLE_SYM;
case ELSEIF_MARIADB_SYM: return ELSEIF_ORACLE_SYM;
case ELSIF_MARIADB_SYM: return ELSIF_ORACLE_SYM; case ELSIF_MARIADB_SYM: return ELSIF_ORACLE_SYM;
case EXCEPTION_MARIADB_SYM: return EXCEPTION_ORACLE_SYM; case EXCEPTION_MARIADB_SYM: return EXCEPTION_ORACLE_SYM;
case EXIT_MARIADB_SYM: return EXIT_ORACLE_SYM; case EXIT_MARIADB_SYM: return EXIT_ORACLE_SYM;

View file

@ -984,7 +984,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%token DUAL_SYM %token DUAL_SYM
%token EACH_SYM /* SQL-2003-R */ %token EACH_SYM /* SQL-2003-R */
%token ELSE /* SQL-2003-R */ %token ELSE /* SQL-2003-R */
%token ELSEIF_SYM %token ELSEIF_MARIADB_SYM
%token ELSIF_ORACLE_SYM /* PLSQL-R */ %token ELSIF_ORACLE_SYM /* PLSQL-R */
%token ENCLOSED %token ENCLOSED
%token END_OF_INPUT /* INTERNAL */ %token END_OF_INPUT /* INTERNAL */
@ -1219,6 +1219,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
Keywords that have different reserved status in std/oracle modes. Keywords that have different reserved status in std/oracle modes.
*/ */
%token <kwd> BODY_MARIADB_SYM // Oracle-R %token <kwd> BODY_MARIADB_SYM // Oracle-R
%token <kwd> ELSEIF_ORACLE_SYM
%token <kwd> ELSIF_MARIADB_SYM // PLSQL-R %token <kwd> ELSIF_MARIADB_SYM // PLSQL-R
%token <kwd> EXCEPTION_ORACLE_SYM // SQL-2003-N, PLSQL-R %token <kwd> EXCEPTION_ORACLE_SYM // SQL-2003-N, PLSQL-R
%token <kwd> GOTO_MARIADB_SYM // Oracle-R %token <kwd> GOTO_MARIADB_SYM // Oracle-R
@ -4510,7 +4511,7 @@ sp_if:
sp_elseifs: sp_elseifs:
/* Empty */ /* Empty */
| ELSEIF_SYM sp_if | ELSEIF_MARIADB_SYM sp_if
| ELSE sp_proc_stmts1 | ELSE sp_proc_stmts1
; ;
@ -15883,6 +15884,7 @@ keyword_sp_var_and_label:
| DUMPFILE | DUMPFILE
| DUPLICATE_SYM | DUPLICATE_SYM
| DYNAMIC_SYM | DYNAMIC_SYM
| ELSEIF_ORACLE_SYM
| ELSIF_MARIADB_SYM | ELSIF_MARIADB_SYM
| ENDS_SYM | ENDS_SYM
| ENGINE_SYM | ENGINE_SYM

View file

@ -378,7 +378,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
%token DUAL_SYM %token DUAL_SYM
%token EACH_SYM /* SQL-2003-R */ %token EACH_SYM /* SQL-2003-R */
%token ELSE /* SQL-2003-R */ %token ELSE /* SQL-2003-R */
%token ELSEIF_SYM %token ELSEIF_MARIADB_SYM
%token ELSIF_ORACLE_SYM /* PLSQL-R */ %token ELSIF_ORACLE_SYM /* PLSQL-R */
%token ENCLOSED %token ENCLOSED
%token END_OF_INPUT /* INTERNAL */ %token END_OF_INPUT /* INTERNAL */
@ -613,6 +613,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, size_t *yystacksize);
Keywords that have different reserved status in std/oracle modes. Keywords that have different reserved status in std/oracle modes.
*/ */
%token <kwd> BODY_MARIADB_SYM // Oracle-R %token <kwd> BODY_MARIADB_SYM // Oracle-R
%token <kwd> ELSEIF_ORACLE_SYM
%token <kwd> ELSIF_MARIADB_SYM // PLSQL-R %token <kwd> ELSIF_MARIADB_SYM // PLSQL-R
%token <kwd> EXCEPTION_ORACLE_SYM // SQL-2003-N, PLSQL-R %token <kwd> EXCEPTION_ORACLE_SYM // SQL-2003-N, PLSQL-R
%token <kwd> GOTO_MARIADB_SYM // Oracle-R %token <kwd> GOTO_MARIADB_SYM // Oracle-R
@ -15917,6 +15918,7 @@ keyword_sp_var_and_label:
| DUMPFILE | DUMPFILE
| DUPLICATE_SYM | DUPLICATE_SYM
| DYNAMIC_SYM | DYNAMIC_SYM
| ELSEIF_ORACLE_SYM
| ELSIF_MARIADB_SYM | ELSIF_MARIADB_SYM
| ENDS_SYM | ENDS_SYM
| ENGINE_SYM | ENGINE_SYM