Skip to content

Commit 6cd24d1

Browse files
author
Alexander Barkov
committed
MDEV-10411 Providing compatibility for basic PL/SQL constructs
Part 15: ELSIF vs ELSEIF Also, moving tests for Oracle keywords in sql_mode=DEFAULT from "parser.test" to a better place "keywords.test".
1 parent a83d0ae commit 6cd24d1

File tree

7 files changed

+71
-1
lines changed

7 files changed

+71
-1
lines changed

mysql-test/r/keywords.result

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,3 +331,18 @@ DROP TABLE OTHERS;
331331
#
332332
CREATE TABLE immediate (immediate int);
333333
DROP TABLE immediate;
334+
#
335+
# MDEV-10142 Pluggable parser
336+
# Testing keywords that were added into lex.h for Oracle compatibility
337+
# that are not reserved keywords in MariaDB
338+
#
339+
CREATE TABLE clob (clob int);
340+
DROP TABLE clob;
341+
CREATE TABLE elsif (elsif INT);
342+
DROP TABLE elsif;
343+
CREATE TABLE exception (exception INT);
344+
DROP TABLE exception;
345+
CREATE TABLE raw (raw int);
346+
DROP TABLE raw;
347+
CREATE TABLE varchar2 (varchar2 int);
348+
DROP TABLE varchar2;

mysql-test/suite/compat/oracle/r/sp.result

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,20 @@ CREATE TABLE begin (begin INT);
326326
DROP TABLE begin;
327327
CREATE TABLE end (end INT);
328328
DROP TABLE end;
329+
# Testing ELSIF
330+
CREATE FUNCTION f1(a INT) RETURN CLOB
331+
AS
332+
BEGIN
333+
IF a=1 THEN RETURN 'a is 1';
334+
ELSIF a=2 THEN RETURN 'a is 2';
335+
ELSE RETURN 'a is unknown';
336+
END IF;
337+
END;
338+
/
339+
SELECT f1(2) FROM DUAL;
340+
f1(2)
341+
a is 2
342+
DROP FUNCTION f1;
329343
# Testing top-level declarations
330344
CREATE PROCEDURE p1 (p1 OUT VARCHAR2(10))
331345
AS

mysql-test/suite/compat/oracle/t/sp.test

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,22 @@ DROP TABLE begin;
342342
CREATE TABLE end (end INT);
343343
DROP TABLE end;
344344

345+
--echo # Testing ELSIF
346+
DELIMITER /;
347+
CREATE FUNCTION f1(a INT) RETURN CLOB
348+
AS
349+
BEGIN
350+
IF a=1 THEN RETURN 'a is 1';
351+
ELSIF a=2 THEN RETURN 'a is 2';
352+
ELSE RETURN 'a is unknown';
353+
END IF;
354+
END;
355+
/
356+
DELIMITER ;/
357+
SELECT f1(2) FROM DUAL;
358+
DROP FUNCTION f1;
359+
360+
345361

346362
--echo # Testing top-level declarations
347363
DELIMITER /;

mysql-test/t/keywords.test

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,3 +220,24 @@ DROP TABLE OTHERS;
220220

221221
CREATE TABLE immediate (immediate int);
222222
DROP TABLE immediate;
223+
224+
--echo #
225+
--echo # MDEV-10142 Pluggable parser
226+
--echo # Testing keywords that were added into lex.h for Oracle compatibility
227+
--echo # that are not reserved keywords in MariaDB
228+
--echo #
229+
230+
CREATE TABLE clob (clob int);
231+
DROP TABLE clob;
232+
233+
CREATE TABLE elsif (elsif INT);
234+
DROP TABLE elsif;
235+
236+
CREATE TABLE exception (exception INT);
237+
DROP TABLE exception;
238+
239+
CREATE TABLE raw (raw int);
240+
DROP TABLE raw;
241+
242+
CREATE TABLE varchar2 (varchar2 int);
243+
DROP TABLE varchar2;

sql/lex.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ static SYMBOL symbols[] = {
203203
{ "EACH", SYM(EACH_SYM)},
204204
{ "ELSE", SYM(ELSE)},
205205
{ "ELSEIF", SYM(ELSEIF_SYM)},
206+
{ "ELSIF", SYM(ELSIF_SYM)},
206207
{ "ENABLE", SYM(ENABLE_SYM)},
207208
{ "ENCLOSED", SYM(ENCLOSED)},
208209
{ "END", SYM(END)},

sql/sql_yacc.yy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,6 +1068,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
10681068
%token EACH_SYM /* SQL-2003-R */
10691069
%token ELSE /* SQL-2003-R */
10701070
%token ELSEIF_SYM
1071+
%token ELSIF_SYM /* Oracle, reserved in PL/SQL*/
10711072
%token ENABLE_SYM
10721073
%token ENCLOSED
10731074
%token END /* SQL-2003-R */
@@ -14340,6 +14341,7 @@ keyword_sp:
1434014341
| DUMPFILE {}
1434114342
| DUPLICATE_SYM {}
1434214343
| DYNAMIC_SYM {}
14344+
| ELSIF_SYM {}
1434314345
| ENDS_SYM {}
1434414346
| ENUM {}
1434514347
| ENGINE_SYM {}

sql/sql_yacc_ora.yy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
442442
%token EACH_SYM /* SQL-2003-R */
443443
%token ELSE /* SQL-2003-R */
444444
%token ELSEIF_SYM
445+
%token ELSIF_SYM /* Oracle, reserved in PL/SQL*/
445446
%token ENABLE_SYM
446447
%token ENCLOSED
447448
%token END /* SQL-2003-R */
@@ -3131,7 +3132,7 @@ sp_if:
31313132

31323133
sp_elseifs:
31333134
/* Empty */
3134-
| ELSEIF_SYM sp_if
3135+
| ELSIF_SYM sp_if
31353136
| ELSE sp_proc_stmts1
31363137
;
31373138

0 commit comments

Comments
 (0)