Skip to content

Commit fbee70c

Browse files
authored
feat: update alter and drop statements (#94)
* feat: add UNIQUE keyword * feat: support ifExist, addConstraint, dropConstraint and addUnique of alter table statement * feat: support ifExist, addConstraint, dropConstraint and addUnique of alter table statement * tests: add tests of alter statements * docs: add comments for sql syntax * build: optimize promote of build/antlr4 * ci: add max_old_space_size * ci: add max_old_space_size * ci: update tests script
1 parent 1064508 commit fbee70c

15 files changed

Lines changed: 4238 additions & 3699 deletions

.github/workflows/nodejs.yml

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
steps:
1818
- name: checkout
1919
uses: actions/checkout@v2
20-
20+
2121
- name: cache yarn.lock
2222
uses: actions/cache@v2
2323
with:
@@ -49,7 +49,7 @@ jobs:
4949
needs: [setup]
5050
steps:
5151
- uses: actions/checkout@v2
52-
52+
5353
- name: Restore cache from yarn.lock
5454
uses: actions/cache@v2
5555
with:
@@ -61,21 +61,17 @@ jobs:
6161
with:
6262
path: node_modules
6363
key: node_modules-${{ hashFiles('**/package-temp-dir/yarn.lock') }}
64-
65-
- name: Test utils
66-
run: npx jest test/utils
67-
- name: Test FLinkSQL
68-
run: npx jest test/parser/flinksql
69-
- name: Test SparkSQL
70-
run: npx jest test/parser/spark
71-
- name: Test GenericSQL
72-
run: npx jest test/parser/generic
73-
- name: Test HiveSQL
74-
run: npx jest test/parser/hive
75-
- name: Test PGSQL
76-
run: npx jest test/parser/pgsql
77-
- name: Test PLSQL
78-
run: npx jest test/parser/plsql
64+
65+
- name: Run Units Test
66+
run: |
67+
export NODE_OPTIONS="--max_old_space_size=4096"
68+
npx jest test/utils
69+
npx jest test/parser/flinksql
70+
npx jest test/parser/spark
71+
npx jest test/parser/generic
72+
npx jest test/parser/hive
73+
npx jest test/parser/pgsql
74+
npx jest test/parser/plsql
7975
build:
8076
runs-on: ubuntu-latest
8177
needs: [setup]
@@ -95,4 +91,4 @@ jobs:
9591
key: node_modules-${{ hashFiles('**/package-temp-dir/yarn.lock') }}
9692

9793
- name: Run Build
98-
run: yarn build
94+
run: yarn build

build/antlr4.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ if (argv.all) { // build all: yarn antlr4 --all
4343
if (supportedLanguage) {
4444
compile(argv.lang);
4545
} else {
46-
console.error('Unsupported language: ' + argv.lang);
46+
console.error('Invalid language: ' + argv.lang + ', supported languages:\n' + entry.join(', '));
4747
}
4848
} else {
4949
console.error('Please to specify the language, just like: yarn antlr4 --lang flinksql');

src/grammar/flinksql/FlinkSqlLexer.g4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ CATALOGS: 'CATALOGS';
265265
VIEWS: 'VIEWS';
266266
JARS: 'JARS';
267267
PRIMARY: 'PRIMARY';
268+
UNIQUE: 'UNIQUE';
268269
KEY: 'KEY';
269270
PERIOD: 'PERIOD';
270271
SYSTEM_TIME: 'SYSTEM_TIME';

src/grammar/flinksql/FlinkSqlParser.g4

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,19 +277,37 @@ jarFileName
277277
;
278278

279279
// Alter statements
280+
// Just for simple alter table statements,
281+
// it only includes rename, set key, add constraint, drop constraint, add unique
280282

281283
alterTable
282-
: ALTER TABLE uid (renameDefinition | setKeyValueDefinition)
284+
: ALTER TABLE ifExists? uid (renameDefinition | setKeyValueDefinition | addConstraint | dropConstraint | addUnique)
283285
;
284286

285287
renameDefinition
286-
: RENAME TO uid
288+
: RENAME uid? TO uid
287289
;
288290

289291
setKeyValueDefinition
290292
: SET tablePropertyList
291293
;
292294

295+
addConstraint
296+
: ADD CONSTRAINT constraintName PRIMARY KEY columnNameList notForced?
297+
;
298+
299+
dropConstraint
300+
: DROP CONSTRAINT constraintName
301+
;
302+
303+
addUnique
304+
: ADD UNIQUE columnNameList
305+
;
306+
307+
notForced
308+
: NOT ENFORCED
309+
;
310+
293311
alertView
294312
: ALTER VIEW uid (renameDefinition | AS queryStatement)
295313
;

src/lib/flinksql/FlinkSqlLexer.interp

Lines changed: 4 additions & 1 deletion
Large diffs are not rendered by default.

src/lib/flinksql/FlinkSqlLexer.tokens

Lines changed: 137 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -254,78 +254,79 @@ CATALOGS=253
254254
VIEWS=254
255255
JARS=255
256256
PRIMARY=256
257-
KEY=257
258-
PERIOD=258
259-
SYSTEM_TIME=259
260-
ENFORCED=260
261-
METADATA=261
262-
VIRTUAL=262
263-
ZONE=263
264-
STRING=264
265-
ARRAY=265
266-
MAP=266
267-
CHAR=267
268-
VARCHAR=268
269-
BINARY=269
270-
VARBINARY=270
271-
BYTES=271
272-
DECIMAL=272
273-
DEC=273
274-
NUMERIC=274
275-
TINYINT=275
276-
SMALLINT=276
277-
INT=277
278-
INTEGER=278
279-
BIGINT=279
280-
FLOAT=280
281-
DOUBLE=281
282-
DATE=282
283-
TIME=283
284-
TIMESTAMP=284
285-
TIMESTAMP_LTZ=285
286-
MULTISET=286
287-
BOOLEAN=287
288-
RAW=288
289-
ROW=289
290-
NULL=290
291-
DATETIME=291
292-
EQUAL_SYMBOL=292
293-
GREATER_SYMBOL=293
294-
LESS_SYMBOL=294
295-
EXCLAMATION_SYMBOL=295
296-
BIT_NOT_OP=296
297-
BIT_OR_OP=297
298-
BIT_AND_OP=298
299-
BIT_XOR_OP=299
300-
DOT=300
301-
LS_BRACKET=301
302-
RS_BRACKET=302
303-
LR_BRACKET=303
304-
RR_BRACKET=304
305-
COMMA=305
306-
SEMICOLON=306
307-
AT_SIGN=307
308-
SINGLE_QUOTE_SYMB=308
309-
DOUBLE_QUOTE_SYMB=309
310-
REVERSE_QUOTE_SYMB=310
311-
COLON_SYMB=311
312-
ASTERISK_SIGN=312
313-
UNDERLINE_SIGN=313
314-
HYPNEN_SIGN=314
315-
ADD_SIGN=315
316-
PENCENT_SIGN=316
317-
DOUBLE_VERTICAL_SIGN=317
318-
DOUBLE_HYPNEN_SIGN=318
319-
SLASH_SIGN=319
320-
DOT_ID=320
321-
PLUS_DOT_ID=321
322-
STRING_LITERAL=322
323-
DIG_LITERAL=323
324-
REAL_LITERAL=324
325-
BIT_STRING=325
326-
ID_LITERAL=326
327-
PLUS_ID_LITERAL=327
328-
FILE_PATH=328
257+
UNIQUE=257
258+
KEY=258
259+
PERIOD=259
260+
SYSTEM_TIME=260
261+
ENFORCED=261
262+
METADATA=262
263+
VIRTUAL=263
264+
ZONE=264
265+
STRING=265
266+
ARRAY=266
267+
MAP=267
268+
CHAR=268
269+
VARCHAR=269
270+
BINARY=270
271+
VARBINARY=271
272+
BYTES=272
273+
DECIMAL=273
274+
DEC=274
275+
NUMERIC=275
276+
TINYINT=276
277+
SMALLINT=277
278+
INT=278
279+
INTEGER=279
280+
BIGINT=280
281+
FLOAT=281
282+
DOUBLE=282
283+
DATE=283
284+
TIME=284
285+
TIMESTAMP=285
286+
TIMESTAMP_LTZ=286
287+
MULTISET=287
288+
BOOLEAN=288
289+
RAW=289
290+
ROW=290
291+
NULL=291
292+
DATETIME=292
293+
EQUAL_SYMBOL=293
294+
GREATER_SYMBOL=294
295+
LESS_SYMBOL=295
296+
EXCLAMATION_SYMBOL=296
297+
BIT_NOT_OP=297
298+
BIT_OR_OP=298
299+
BIT_AND_OP=299
300+
BIT_XOR_OP=300
301+
DOT=301
302+
LS_BRACKET=302
303+
RS_BRACKET=303
304+
LR_BRACKET=304
305+
RR_BRACKET=305
306+
COMMA=306
307+
SEMICOLON=307
308+
AT_SIGN=308
309+
SINGLE_QUOTE_SYMB=309
310+
DOUBLE_QUOTE_SYMB=310
311+
REVERSE_QUOTE_SYMB=311
312+
COLON_SYMB=312
313+
ASTERISK_SIGN=313
314+
UNDERLINE_SIGN=314
315+
HYPNEN_SIGN=315
316+
ADD_SIGN=316
317+
PENCENT_SIGN=317
318+
DOUBLE_VERTICAL_SIGN=318
319+
DOUBLE_HYPNEN_SIGN=319
320+
SLASH_SIGN=320
321+
DOT_ID=321
322+
PLUS_DOT_ID=322
323+
STRING_LITERAL=323
324+
DIG_LITERAL=324
325+
REAL_LITERAL=325
326+
BIT_STRING=326
327+
ID_LITERAL=327
328+
PLUS_ID_LITERAL=328
329+
FILE_PATH=329
329330
'SELECT'=4
330331
'FROM'=5
331332
'ADD'=6
@@ -579,66 +580,67 @@ FILE_PATH=328
579580
'VIEWS'=254
580581
'JARS'=255
581582
'PRIMARY'=256
582-
'KEY'=257
583-
'PERIOD'=258
584-
'SYSTEM_TIME'=259
585-
'ENFORCED'=260
586-
'METADATA'=261
587-
'VIRTUAL'=262
588-
'ZONE'=263
589-
'STRING'=264
590-
'ARRAY'=265
591-
'MAP'=266
592-
'CHAR'=267
593-
'VARCHAR'=268
594-
'BINARY'=269
595-
'VARBINARY'=270
596-
'BYTES'=271
597-
'DECIMAL'=272
598-
'DEC'=273
599-
'NUMERIC'=274
600-
'TINYINT'=275
601-
'SMALLINT'=276
602-
'INT'=277
603-
'INTEGER'=278
604-
'BIGINT'=279
605-
'FLOAT'=280
606-
'DOUBLE'=281
607-
'DATE'=282
608-
'TIME'=283
609-
'TIMESTAMP'=284
610-
'TIMESTAMP_LTZ'=285
611-
'MULTISET'=286
612-
'BOOLEAN'=287
613-
'RAW'=288
614-
'ROW'=289
615-
'NULL'=290
616-
'DATETIME'=291
617-
'='=292
618-
'>'=293
619-
'<'=294
620-
'!'=295
621-
'~'=296
622-
'|'=297
623-
'&'=298
624-
'^'=299
625-
'.'=300
626-
'['=301
627-
']'=302
628-
'('=303
629-
')'=304
630-
','=305
631-
';'=306
632-
'@'=307
633-
'\''=308
634-
'"'=309
635-
'`'=310
636-
':'=311
637-
'*'=312
638-
'_'=313
639-
'-'=314
640-
'+'=315
641-
'%'=316
642-
'||'=317
643-
'--'=318
644-
'/'=319
583+
'UNIQUE'=257
584+
'KEY'=258
585+
'PERIOD'=259
586+
'SYSTEM_TIME'=260
587+
'ENFORCED'=261
588+
'METADATA'=262
589+
'VIRTUAL'=263
590+
'ZONE'=264
591+
'STRING'=265
592+
'ARRAY'=266
593+
'MAP'=267
594+
'CHAR'=268
595+
'VARCHAR'=269
596+
'BINARY'=270
597+
'VARBINARY'=271
598+
'BYTES'=272
599+
'DECIMAL'=273
600+
'DEC'=274
601+
'NUMERIC'=275
602+
'TINYINT'=276
603+
'SMALLINT'=277
604+
'INT'=278
605+
'INTEGER'=279
606+
'BIGINT'=280
607+
'FLOAT'=281
608+
'DOUBLE'=282
609+
'DATE'=283
610+
'TIME'=284
611+
'TIMESTAMP'=285
612+
'TIMESTAMP_LTZ'=286
613+
'MULTISET'=287
614+
'BOOLEAN'=288
615+
'RAW'=289
616+
'ROW'=290
617+
'NULL'=291
618+
'DATETIME'=292
619+
'='=293
620+
'>'=294
621+
'<'=295
622+
'!'=296
623+
'~'=297
624+
'|'=298
625+
'&'=299
626+
'^'=300
627+
'.'=301
628+
'['=302
629+
']'=303
630+
'('=304
631+
')'=305
632+
','=306
633+
';'=307
634+
'@'=308
635+
'\''=309
636+
'"'=310
637+
'`'=311
638+
':'=312
639+
'*'=313
640+
'_'=314
641+
'-'=315
642+
'+'=316
643+
'%'=317
644+
'||'=318
645+
'--'=319
646+
'/'=320

0 commit comments

Comments
 (0)