Skip to content

Commit def2ac2

Browse files
committed
MDEV-17652 Add sql_mode specific tokens for some keywords
1 parent aa4772e commit def2ac2

File tree

7 files changed

+370
-146
lines changed

7 files changed

+370
-146
lines changed

sql/gen_lex_token.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,8 @@ void compute_tokens()
255255
set_start_expr_token(STARTS_SYM);
256256
set_start_expr_token(ENDS_SYM);
257257
set_start_expr_token(DEFAULT);
258-
set_start_expr_token(RETURN_SYM);
258+
set_start_expr_token(RETURN_MARIADB_SYM);
259+
set_start_expr_token(RETURN_ORACLE_SYM);
259260
set_start_expr_token(IF_SYM);
260261
set_start_expr_token(ELSEIF_SYM);
261262
set_start_expr_token(CASE_SYM);

sql/lex.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,15 @@ static SYMBOL symbols[] = {
8282
{ "AVG_ROW_LENGTH", SYM(AVG_ROW_LENGTH)},
8383
{ "BACKUP", SYM(BACKUP_SYM)},
8484
{ "BEFORE", SYM(BEFORE_SYM)},
85-
{ "BEGIN", SYM(BEGIN_SYM)},
85+
{ "BEGIN", SYM(BEGIN_MARIADB_SYM)},
8686
{ "BETWEEN", SYM(BETWEEN_SYM)},
8787
{ "BIGINT", SYM(BIGINT)},
8888
{ "BINARY", SYM(BINARY)},
8989
{ "BINLOG", SYM(BINLOG_SYM)},
9090
{ "BIT", SYM(BIT_SYM)},
9191
{ "BLOB", SYM(BLOB_SYM)},
9292
{ "BLOCK", SYM(BLOCK_SYM)},
93-
{ "BODY", SYM(BODY_SYM)},
93+
{ "BODY", SYM(BODY_MARIADB_SYM)},
9494
{ "BOOL", SYM(BOOL_SYM)},
9595
{ "BOOLEAN", SYM(BOOLEAN_SYM)},
9696
{ "BOTH", SYM(BOTH)},
@@ -145,7 +145,7 @@ static SYMBOL symbols[] = {
145145
{ "CONSTRAINT_SCHEMA", SYM(CONSTRAINT_SCHEMA_SYM)},
146146
{ "CONTAINS", SYM(CONTAINS_SYM)},
147147
{ "CONTEXT", SYM(CONTEXT_SYM)},
148-
{ "CONTINUE", SYM(CONTINUE_SYM)},
148+
{ "CONTINUE", SYM(CONTINUE_MARIADB_SYM)},
149149
{ "CONTRIBUTORS", SYM(CONTRIBUTORS_SYM)},
150150
{ "CONVERT", SYM(CONVERT_SYM)},
151151
{ "CPU", SYM(CPU_SYM)},
@@ -206,7 +206,7 @@ static SYMBOL symbols[] = {
206206
{ "EACH", SYM(EACH_SYM)},
207207
{ "ELSE", SYM(ELSE)},
208208
{ "ELSEIF", SYM(ELSEIF_SYM)},
209-
{ "ELSIF", SYM(ELSIF_SYM)},
209+
{ "ELSIF", SYM(ELSIF_MARIADB_SYM)},
210210
{ "ENABLE", SYM(ENABLE_SYM)},
211211
{ "ENCLOSED", SYM(ENCLOSED)},
212212
{ "END", SYM(END)},
@@ -226,9 +226,9 @@ static SYMBOL symbols[] = {
226226
{ "EXCHANGE", SYM(EXCHANGE_SYM)},
227227
{ "EXCLUDE", SYM(EXCLUDE_SYM)},
228228
{ "EXECUTE", SYM(EXECUTE_SYM)},
229-
{ "EXCEPTION", SYM(EXCEPTION_SYM)},
229+
{ "EXCEPTION", SYM(EXCEPTION_MARIADB_SYM)},
230230
{ "EXISTS", SYM(EXISTS)},
231-
{ "EXIT", SYM(EXIT_SYM)},
231+
{ "EXIT", SYM(EXIT_MARIADB_SYM)},
232232
{ "EXPANSION", SYM(EXPANSION_SYM)},
233233
{ "EXPORT", SYM(EXPORT_SYM)},
234234
{ "EXPLAIN", SYM(DESCRIBE)},
@@ -264,7 +264,7 @@ static SYMBOL symbols[] = {
264264
{ "GET_FORMAT", SYM(GET_FORMAT)},
265265
{ "GET", SYM(GET_SYM)},
266266
{ "GLOBAL", SYM(GLOBAL_SYM)},
267-
{ "GOTO", SYM(GOTO_SYM)},
267+
{ "GOTO", SYM(GOTO_MARIADB_SYM)},
268268
{ "GRANT", SYM(GRANT)},
269269
{ "GRANTS", SYM(GRANTS)},
270270
{ "GROUP", SYM(GROUP_SYM)},
@@ -451,13 +451,13 @@ static SYMBOL symbols[] = {
451451
{ "OPTIONALLY", SYM(OPTIONALLY)},
452452
{ "OR", SYM(OR_SYM)},
453453
{ "ORDER", SYM(ORDER_SYM)},
454-
{ "OTHERS", SYM(OTHERS_SYM)},
454+
{ "OTHERS", SYM(OTHERS_MARIADB_SYM)},
455455
{ "OUT", SYM(OUT_SYM)},
456456
{ "OUTER", SYM(OUTER)},
457457
{ "OUTFILE", SYM(OUTFILE)},
458458
{ "OVER", SYM(OVER_SYM)},
459459
{ "OWNER", SYM(OWNER_SYM)},
460-
{ "PACKAGE", SYM(PACKAGE_SYM)},
460+
{ "PACKAGE", SYM(PACKAGE_MARIADB_SYM)},
461461
{ "PACK_KEYS", SYM(PACK_KEYS_SYM)},
462462
{ "PAGE", SYM(PAGE_SYM)},
463463
{ "PAGE_CHECKSUM", SYM(PAGE_CHECKSUM_SYM)},
@@ -495,7 +495,7 @@ static SYMBOL symbols[] = {
495495
{ "QUARTER", SYM(QUARTER_SYM)},
496496
{ "QUERY", SYM(QUERY_SYM)},
497497
{ "QUICK", SYM(QUICK)},
498-
{ "RAISE", SYM(RAISE_SYM)},
498+
{ "RAISE", SYM(RAISE_MARIADB_SYM)},
499499
{ "RANGE", SYM(RANGE_SYM)},
500500
{ "RAW", SYM(RAW)},
501501
{ "READ", SYM(READ_SYM)},
@@ -534,7 +534,7 @@ static SYMBOL symbols[] = {
534534
{ "RESTRICT", SYM(RESTRICT)},
535535
{ "RESUME", SYM(RESUME_SYM)},
536536
{ "RETURNED_SQLSTATE",SYM(RETURNED_SQLSTATE_SYM)},
537-
{ "RETURN", SYM(RETURN_SYM)},
537+
{ "RETURN", SYM(RETURN_MARIADB_SYM)},
538538
{ "RETURNING", SYM(RETURNING_SYM)},
539539
{ "RETURNS", SYM(RETURNS_SYM)},
540540
{ "REUSE", SYM(REUSE_SYM)},
@@ -549,7 +549,7 @@ static SYMBOL symbols[] = {
549549
{ "ROW", SYM(ROW_SYM)},
550550
{ "ROWCOUNT", SYM(ROWCOUNT_SYM)}, /* Oracle-N */
551551
{ "ROWS", SYM(ROWS_SYM)},
552-
{ "ROWTYPE", SYM(ROWTYPE_SYM)},
552+
{ "ROWTYPE", SYM(ROWTYPE_MARIADB_SYM)},
553553
{ "ROW_COUNT", SYM(ROW_COUNT_SYM)},
554554
{ "ROW_FORMAT", SYM(ROW_FORMAT_SYM)},
555555
{ "RTREE", SYM(RTREE_SYM)},

sql/sp_pcontext.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,19 @@ sp_condition_value *sp_pcontext::find_condition(const LEX_CSTRING *name,
409409
NULL;
410410
}
411411

412+
sp_condition_value *
413+
sp_pcontext::find_declared_or_predefined_condition(THD *thd,
414+
const LEX_CSTRING *name)
415+
const
416+
{
417+
sp_condition_value *p= find_condition(name, false);
418+
if (p)
419+
return p;
420+
if (thd->variables.sql_mode & MODE_ORACLE)
421+
return find_predefined_condition(name);
422+
return NULL;
423+
}
424+
412425

413426
static sp_condition_value
414427
// Warnings

sql/sp_pcontext.h

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -592,13 +592,7 @@ class sp_pcontext : public Sql_alloc
592592
bool current_scope_only) const;
593593

594594
sp_condition_value *
595-
find_declared_or_predefined_condition(const LEX_CSTRING *name) const
596-
{
597-
sp_condition_value *p= find_condition(name, false);
598-
if (p)
599-
return p;
600-
return find_predefined_condition(name);
601-
}
595+
find_declared_or_predefined_condition(THD *thd, const LEX_CSTRING *name) const;
602596

603597
bool declare_condition(THD *thd, const LEX_CSTRING *name,
604598
sp_condition_value *val)

sql/sql_lex.cc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,24 @@ int Lex_input_stream::find_keyword(Lex_ident_cli_st *kwd,
838838
DBUG_ASSERT(tok >= get_buf());
839839
DBUG_ASSERT(tok < get_end_of_query());
840840

841+
if (m_thd->variables.sql_mode & MODE_ORACLE)
842+
{
843+
switch (symbol->tok) {
844+
case BEGIN_MARIADB_SYM: return BEGIN_ORACLE_SYM;
845+
case BODY_MARIADB_SYM: return BODY_ORACLE_SYM;
846+
case CONTINUE_MARIADB_SYM: return CONTINUE_ORACLE_SYM;
847+
case ELSIF_MARIADB_SYM: return ELSIF_ORACLE_SYM;
848+
case EXCEPTION_MARIADB_SYM: return EXCEPTION_ORACLE_SYM;
849+
case EXIT_MARIADB_SYM: return EXIT_ORACLE_SYM;
850+
case GOTO_MARIADB_SYM: return GOTO_ORACLE_SYM;
851+
case OTHERS_MARIADB_SYM: return OTHERS_ORACLE_SYM;
852+
case PACKAGE_MARIADB_SYM: return PACKAGE_ORACLE_SYM;
853+
case RAISE_MARIADB_SYM: return RAISE_ORACLE_SYM;
854+
case RETURN_MARIADB_SYM: return RETURN_ORACLE_SYM;
855+
case ROWTYPE_MARIADB_SYM: return ROWTYPE_ORACLE_SYM;
856+
}
857+
}
858+
841859
if ((symbol->tok == NOT_SYM) &&
842860
(m_thd->variables.sql_mode & MODE_HIGH_NOT_PRECEDENCE))
843861
return NOT2_SYM;

0 commit comments

Comments
 (0)