@dbml/core 3.0.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3494 @@
1
+ /*
2
+ Original: https://github.com/antlr/grammars-v4/blob/master/sql/mysql/Positive-Technologies/MySqlParser.g4
3
+ Last updated: 2023-12-05
4
+ */
5
+
6
+ /*
7
+ MySQL (Positive Technologies) grammar
8
+ The MIT License (MIT).
9
+ Copyright (c) 2015-2017, Ivan Kochurkin (kvanttt@gmail.com), Positive Technologies.
10
+ Copyright (c) 2017, Ivan Khudyashev (IHudyashov@ptsecurity.com)
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in
20
+ all copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
28
+ THE SOFTWARE.
29
+ */
30
+
31
+ // $antlr-format alignTrailingComments true, columnLimit 150, minEmptyLines 1, maxEmptyLinesToKeep 1, reflowComments false, useTab false
32
+ // $antlr-format allowShortRulesOnASingleLine false, allowShortBlocksOnASingleLine true, alignSemicolons hanging, alignColons hanging
33
+
34
+ parser grammar MySqlParser;
35
+
36
+ options {
37
+ tokenVocab = MySqlLexer;
38
+ }
39
+
40
+ // Top Level Description
41
+
42
+ root
43
+ : sqlStatements? (MINUS MINUS)? EOF
44
+ ;
45
+
46
+ sqlStatements
47
+ : (sqlStatement (MINUS MINUS)? SEMI? | emptyStatement_)* (
48
+ sqlStatement ((MINUS MINUS)? SEMI)?
49
+ | emptyStatement_
50
+ )
51
+ ;
52
+
53
+ sqlStatement
54
+ : ddlStatement
55
+ | dmlStatement
56
+ | transactionStatement
57
+ | replicationStatement
58
+ | preparedStatement
59
+ | administrationStatement
60
+ | utilityStatement
61
+ ;
62
+
63
+ emptyStatement_
64
+ : SEMI
65
+ ;
66
+
67
+ ddlStatement
68
+ : createDatabase
69
+ | createEvent
70
+ | createIndex
71
+ | createLogfileGroup
72
+ | createProcedure
73
+ | createFunction
74
+ | createServer
75
+ | createTable
76
+ | createTablespaceInnodb
77
+ | createTablespaceNdb
78
+ | createTrigger
79
+ | createView
80
+ | createRole
81
+ | alterDatabase
82
+ | alterEvent
83
+ | alterFunction
84
+ | alterInstance
85
+ | alterLogfileGroup
86
+ | alterProcedure
87
+ | alterServer
88
+ | alterTable
89
+ | alterTablespace
90
+ | alterView
91
+ | dropDatabase
92
+ | dropEvent
93
+ | dropIndex
94
+ | dropLogfileGroup
95
+ | dropProcedure
96
+ | dropFunction
97
+ | dropServer
98
+ | dropTable
99
+ | dropTablespace
100
+ | dropTrigger
101
+ | dropView
102
+ | dropRole
103
+ | setRole
104
+ | renameTable
105
+ | truncateTable
106
+ ;
107
+
108
+ dmlStatement
109
+ : selectStatement
110
+ | insertStatement
111
+ | updateStatement
112
+ | deleteStatement
113
+ | replaceStatement
114
+ | callStatement
115
+ | loadDataStatement
116
+ | loadXmlStatement
117
+ | doStatement
118
+ | handlerStatement
119
+ | valuesStatement
120
+ | withStatement
121
+ | tableStatement
122
+ ;
123
+
124
+ transactionStatement
125
+ : startTransaction
126
+ | beginWork
127
+ | commitWork
128
+ | rollbackWork
129
+ | savepointStatement
130
+ | rollbackStatement
131
+ | releaseStatement
132
+ | lockTables
133
+ | unlockTables
134
+ ;
135
+
136
+ replicationStatement
137
+ : changeMaster
138
+ | changeReplicationFilter
139
+ | purgeBinaryLogs
140
+ | resetMaster
141
+ | resetSlave
142
+ | startSlave
143
+ | stopSlave
144
+ | startGroupReplication
145
+ | stopGroupReplication
146
+ | xaStartTransaction
147
+ | xaEndTransaction
148
+ | xaPrepareStatement
149
+ | xaCommitWork
150
+ | xaRollbackWork
151
+ | xaRecoverWork
152
+ ;
153
+
154
+ preparedStatement
155
+ : prepareStatement
156
+ | executeStatement
157
+ | deallocatePrepare
158
+ ;
159
+
160
+ // remark: NOT INCLUDED IN sqlStatement, but include in body
161
+ // of routine's statements
162
+ compoundStatement
163
+ : blockStatement
164
+ | caseStatement
165
+ | ifStatement
166
+ | leaveStatement
167
+ | loopStatement
168
+ | repeatStatement
169
+ | whileStatement
170
+ | iterateStatement
171
+ | returnStatement
172
+ | cursorStatement
173
+ ;
174
+
175
+ administrationStatement
176
+ : alterUser
177
+ | createUser
178
+ | dropUser
179
+ | grantStatement
180
+ | grantProxy
181
+ | renameUser
182
+ | revokeStatement
183
+ | revokeProxy
184
+ | analyzeTable
185
+ | checkTable
186
+ | checksumTable
187
+ | optimizeTable
188
+ | repairTable
189
+ | createUdfunction
190
+ | installPlugin
191
+ | uninstallPlugin
192
+ | setStatement
193
+ | showStatement
194
+ | binlogStatement
195
+ | cacheIndexStatement
196
+ | flushStatement
197
+ | killStatement
198
+ | loadIndexIntoCache
199
+ | resetStatement
200
+ | shutdownStatement
201
+ ;
202
+
203
+ utilityStatement
204
+ : simpleDescribeStatement
205
+ | fullDescribeStatement
206
+ | helpStatement
207
+ | useStatement
208
+ | signalStatement
209
+ | resignalStatement
210
+ | diagnosticsStatement
211
+ ;
212
+
213
+ // Data Definition Language
214
+
215
+ // Create statements
216
+
217
+ createDatabase
218
+ : CREATE dbFormat = (DATABASE | SCHEMA) ifNotExists? uid createDatabaseOption*
219
+ ;
220
+
221
+ createEvent
222
+ : CREATE ownerStatement? EVENT ifNotExists? fullId ON SCHEDULE scheduleExpression (
223
+ ON COMPLETION NOT? PRESERVE
224
+ )? enableType? (COMMENT STRING_LITERAL)? DO routineBody
225
+ ;
226
+
227
+ createIndex
228
+ : CREATE intimeAction = (ONLINE | OFFLINE)? indexCategory = (UNIQUE | FULLTEXT | SPATIAL)? INDEX uid indexType? ON tableName indexColumnNames
229
+ indexOption* (
230
+ ALGORITHM EQUAL_SYMBOL? algType = (DEFAULT | INPLACE | COPY)
231
+ | LOCK EQUAL_SYMBOL? lockType = (DEFAULT | NONE | SHARED | EXCLUSIVE)
232
+ )*
233
+ ;
234
+
235
+ createLogfileGroup
236
+ : CREATE LOGFILE GROUP uid ADD UNDOFILE undoFile = STRING_LITERAL (
237
+ INITIAL_SIZE '='? initSize = fileSizeLiteral
238
+ )? (UNDO_BUFFER_SIZE '='? undoSize = fileSizeLiteral)? (
239
+ REDO_BUFFER_SIZE '='? redoSize = fileSizeLiteral
240
+ )? (NODEGROUP '='? uid)? WAIT? (COMMENT '='? comment = STRING_LITERAL)? ENGINE '='? engineName
241
+ ;
242
+
243
+ createProcedure
244
+ : CREATE ownerStatement? PROCEDURE fullId '(' procedureParameter? (',' procedureParameter)* ')' routineOption* routineBody
245
+ ;
246
+
247
+ createFunction
248
+ : CREATE ownerStatement? AGGREGATE? FUNCTION ifNotExists? fullId '(' functionParameter? (
249
+ ',' functionParameter
250
+ )* ')' RETURNS dataType routineOption* (routineBody | returnStatement)
251
+ ;
252
+
253
+ createRole
254
+ : CREATE ROLE ifNotExists? roleName (',' roleName)*
255
+ ;
256
+
257
+ createServer
258
+ : CREATE SERVER uid FOREIGN DATA WRAPPER wrapperName = (MYSQL | STRING_LITERAL) OPTIONS '(' serverOption (
259
+ ',' serverOption
260
+ )* ')'
261
+ ;
262
+
263
+ createTable
264
+ : CREATE TEMPORARY? TABLE ifNotExists? tableName (
265
+ LIKE tableName
266
+ | '(' LIKE parenthesisTable = tableName ')'
267
+ ) # copyCreateTable
268
+ | CREATE TEMPORARY? TABLE ifNotExists? tableName createDefinitions? (
269
+ tableOption (','? tableOption)*
270
+ )? partitionDefinitions? keyViolate = (IGNORE | REPLACE)? AS? selectStatement # queryCreateTable
271
+ | CREATE TEMPORARY? TABLE ifNotExists? tableName createDefinitions (
272
+ tableOption (','? tableOption)*
273
+ )? partitionDefinitions? # columnCreateTable
274
+ ;
275
+
276
+ createTablespaceInnodb
277
+ : CREATE TABLESPACE uid ADD DATAFILE datafile = STRING_LITERAL (
278
+ FILE_BLOCK_SIZE '=' fileBlockSize = fileSizeLiteral
279
+ )? (ENGINE '='? engineName)?
280
+ ;
281
+
282
+ createTablespaceNdb
283
+ : CREATE TABLESPACE uid ADD DATAFILE datafile = STRING_LITERAL USE LOGFILE GROUP uid (
284
+ EXTENT_SIZE '='? extentSize = fileSizeLiteral
285
+ )? (INITIAL_SIZE '='? initialSize = fileSizeLiteral)? (
286
+ AUTOEXTEND_SIZE '='? autoextendSize = fileSizeLiteral
287
+ )? (MAX_SIZE '='? maxSize = fileSizeLiteral)? (NODEGROUP '='? uid)? WAIT? (
288
+ COMMENT '='? comment = STRING_LITERAL
289
+ )? ENGINE '='? engineName
290
+ ;
291
+
292
+ createTrigger
293
+ : CREATE ownerStatement? TRIGGER thisTrigger = fullId triggerTime = (BEFORE | AFTER) triggerEvent = (
294
+ INSERT
295
+ | UPDATE
296
+ | DELETE
297
+ ) ON tableName FOR EACH ROW (triggerPlace = (FOLLOWS | PRECEDES) otherTrigger = fullId)? routineBody
298
+ ;
299
+
300
+ withClause
301
+ : WITH RECURSIVE? commonTableExpressions
302
+ ;
303
+
304
+ commonTableExpressions
305
+ : cteName ('(' cteColumnName (',' cteColumnName)* ')')? AS '(' dmlStatement ')' (
306
+ ',' commonTableExpressions
307
+ )?
308
+ ;
309
+
310
+ cteName
311
+ : uid
312
+ ;
313
+
314
+ cteColumnName
315
+ : uid
316
+ ;
317
+
318
+ createView
319
+ : CREATE orReplace? (ALGORITHM '=' algType = (UNDEFINED | MERGE | TEMPTABLE))? ownerStatement? (
320
+ SQL SECURITY secContext = (DEFINER | INVOKER)
321
+ )? VIEW fullId ('(' uidList ')')? AS (
322
+ '(' withClause? selectStatement ')'
323
+ | withClause? selectStatement (WITH checkOption = (CASCADED | LOCAL)? CHECK OPTION)?
324
+ )
325
+ ;
326
+
327
+ // details
328
+
329
+ createDatabaseOption
330
+ : DEFAULT? charSet '='? (charsetName | DEFAULT)
331
+ | DEFAULT? COLLATE '='? collationName
332
+ | DEFAULT? ENCRYPTION '='? STRING_LITERAL
333
+ | READ ONLY '='? (DEFAULT | ZERO_DECIMAL | ONE_DECIMAL)
334
+ ;
335
+
336
+ charSet
337
+ : CHARACTER SET
338
+ | CHARSET
339
+ | CHAR SET
340
+ ;
341
+
342
+ currentUserExpression
343
+ : CURRENT_USER ('(' ')')?
344
+ ;
345
+
346
+ ownerStatement
347
+ : DEFINER '=' (userName | currentUserExpression)
348
+ ;
349
+
350
+ scheduleExpression
351
+ : AT timestampValue intervalExpr* # preciseSchedule
352
+ | EVERY (decimalLiteral | expression) intervalType (
353
+ STARTS startTimestamp = timestampValue (startIntervals += intervalExpr)*
354
+ )? (ENDS endTimestamp = timestampValue (endIntervals += intervalExpr)*)? # intervalSchedule
355
+ ;
356
+
357
+ timestampValue
358
+ : CURRENT_TIMESTAMP
359
+ | stringLiteral
360
+ | decimalLiteral
361
+ | expression
362
+ ;
363
+
364
+ intervalExpr
365
+ : '+' INTERVAL (decimalLiteral | expression) intervalType
366
+ ;
367
+
368
+ intervalType
369
+ : intervalTypeBase
370
+ | YEAR
371
+ | YEAR_MONTH
372
+ | DAY_HOUR
373
+ | DAY_MINUTE
374
+ | DAY_SECOND
375
+ | HOUR_MINUTE
376
+ | HOUR_SECOND
377
+ | MINUTE_SECOND
378
+ | SECOND_MICROSECOND
379
+ | MINUTE_MICROSECOND
380
+ | HOUR_MICROSECOND
381
+ | DAY_MICROSECOND
382
+ ;
383
+
384
+ enableType
385
+ : ENABLE
386
+ | DISABLE
387
+ | DISABLE ON SLAVE
388
+ ;
389
+
390
+ indexType
391
+ : USING (BTREE | HASH)
392
+ ;
393
+
394
+ indexOption
395
+ : KEY_BLOCK_SIZE EQUAL_SYMBOL? fileSizeLiteral
396
+ | indexType
397
+ | WITH PARSER uid
398
+ | COMMENT STRING_LITERAL
399
+ | (VISIBLE | INVISIBLE)
400
+ | ENGINE_ATTRIBUTE EQUAL_SYMBOL? STRING_LITERAL
401
+ | SECONDARY_ENGINE_ATTRIBUTE EQUAL_SYMBOL? STRING_LITERAL
402
+ ;
403
+
404
+ procedureParameter
405
+ : direction = (IN | OUT | INOUT)? uid dataType
406
+ ;
407
+
408
+ functionParameter
409
+ : uid dataType
410
+ ;
411
+
412
+ routineOption
413
+ : COMMENT STRING_LITERAL # routineComment
414
+ | LANGUAGE SQL # routineLanguage
415
+ | NOT? DETERMINISTIC # routineBehavior
416
+ | ( CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA) # routineData
417
+ | SQL SECURITY context = (DEFINER | INVOKER) # routineSecurity
418
+ ;
419
+
420
+ serverOption
421
+ : HOST STRING_LITERAL
422
+ | DATABASE STRING_LITERAL
423
+ | USER STRING_LITERAL
424
+ | PASSWORD STRING_LITERAL
425
+ | SOCKET STRING_LITERAL
426
+ | OWNER STRING_LITERAL
427
+ | PORT decimalLiteral
428
+ ;
429
+
430
+ createDefinitions
431
+ : '(' createDefinition (',' createDefinition)* ')'
432
+ ;
433
+
434
+ createDefinition
435
+ : fullColumnName columnDefinition # columnDeclaration
436
+ | tableConstraint NOT? ENFORCED? # constraintDeclaration
437
+ | indexColumnDefinition # indexDeclaration
438
+ ;
439
+
440
+ columnDefinition
441
+ : dataType columnConstraint* NOT? ENFORCED?
442
+ ;
443
+
444
+ columnConstraint
445
+ : nullNotnull # nullColumnConstraint
446
+ | DEFAULT defaultValue # defaultColumnConstraint
447
+ | VISIBLE # visibilityColumnConstraint
448
+ | INVISIBLE # invisibilityColumnConstraint
449
+ | (AUTO_INCREMENT | ON UPDATE currentTimestamp) # autoIncrementColumnConstraint
450
+ | PRIMARY? KEY # primaryKeyColumnConstraint
451
+ | UNIQUE KEY? # uniqueKeyColumnConstraint
452
+ | COMMENT STRING_LITERAL # commentColumnConstraint
453
+ | COLUMN_FORMAT colformat = (FIXED | DYNAMIC | DEFAULT) # formatColumnConstraint
454
+ | STORAGE storageval = (DISK | MEMORY | DEFAULT) # storageColumnConstraint
455
+ | referenceDefinition # referenceColumnConstraint
456
+ | COLLATE collationName # collateColumnConstraint
457
+ | (GENERATED ALWAYS)? AS '(' expression ')' (VIRTUAL | STORED)? # generatedColumnConstraint
458
+ | SERIAL DEFAULT VALUE # serialDefaultColumnConstraint
459
+ | (CONSTRAINT name = uid?)? CHECK '(' expression ')' # checkColumnConstraint
460
+ ;
461
+
462
+ tableConstraint
463
+ : (CONSTRAINT name = uid?)? PRIMARY KEY index = uid? indexType? indexColumnNames indexOption* # primaryKeyTableConstraint
464
+ | (CONSTRAINT name = uid?)? UNIQUE indexFormat = (INDEX | KEY)? index = uid? indexType? indexColumnNames indexOption* # uniqueKeyTableConstraint
465
+ | (CONSTRAINT name = uid?)? FOREIGN KEY index = uid? indexColumnNames referenceDefinition # foreignKeyTableConstraint
466
+ | (CONSTRAINT name = uid?)? CHECK '(' expression ')' # checkTableConstraint
467
+ ;
468
+
469
+ referenceDefinition
470
+ : REFERENCES tableName indexColumnNames? (MATCH matchType = (FULL | PARTIAL | SIMPLE))? referenceAction?
471
+ ;
472
+
473
+ referenceAction
474
+ : ON DELETE onDelete = referenceControlType (ON UPDATE onUpdate = referenceControlType)?
475
+ | ON UPDATE onUpdate = referenceControlType (ON DELETE onDelete = referenceControlType)?
476
+ ;
477
+
478
+ referenceControlType
479
+ : RESTRICT
480
+ | CASCADE
481
+ | SET NULL_LITERAL
482
+ | NO ACTION
483
+ | SET DEFAULT
484
+ ;
485
+
486
+ indexColumnDefinition
487
+ : indexFormat = (INDEX | KEY) uid? indexType? indexColumnNames indexOption* # simpleIndexDeclaration
488
+ | (FULLTEXT | SPATIAL) indexFormat = (INDEX | KEY)? uid? indexColumnNames indexOption* # specialIndexDeclaration
489
+ ;
490
+
491
+ tableOption
492
+ : ENGINE '='? engineName? # tableOptionEngine
493
+ | ENGINE_ATTRIBUTE '='? STRING_LITERAL # tableOptionEngineAttribute
494
+ | AUTOEXTEND_SIZE '='? decimalLiteral # tableOptionAutoextendSize
495
+ | AUTO_INCREMENT '='? decimalLiteral # tableOptionAutoIncrement
496
+ | AVG_ROW_LENGTH '='? decimalLiteral # tableOptionAverage
497
+ | DEFAULT? charSet '='? (charsetName | DEFAULT) # tableOptionCharset
498
+ | (CHECKSUM | PAGE_CHECKSUM) '='? boolValue = ('0' | '1') # tableOptionChecksum
499
+ | DEFAULT? COLLATE '='? collationName # tableOptionCollate
500
+ | COMMENT '='? STRING_LITERAL # tableOptionComment
501
+ | COMPRESSION '='? (STRING_LITERAL | ID) # tableOptionCompression
502
+ | CONNECTION '='? STRING_LITERAL # tableOptionConnection
503
+ | (DATA | INDEX) DIRECTORY '='? STRING_LITERAL # tableOptionDataDirectory
504
+ | DELAY_KEY_WRITE '='? boolValue = ('0' | '1') # tableOptionDelay
505
+ | ENCRYPTION '='? STRING_LITERAL # tableOptionEncryption
506
+ | (PAGE_COMPRESSED | STRING_LITERAL) '='? ('0' | '1') # tableOptionPageCompressed
507
+ | (PAGE_COMPRESSION_LEVEL | STRING_LITERAL) '='? decimalLiteral # tableOptionPageCompressionLevel
508
+ | ENCRYPTION_KEY_ID '='? decimalLiteral # tableOptionEncryptionKeyId
509
+ | INDEX DIRECTORY '='? STRING_LITERAL # tableOptionIndexDirectory
510
+ | INSERT_METHOD '='? insertMethod = (NO | FIRST | LAST) # tableOptionInsertMethod
511
+ | KEY_BLOCK_SIZE '='? fileSizeLiteral # tableOptionKeyBlockSize
512
+ | MAX_ROWS '='? decimalLiteral # tableOptionMaxRows
513
+ | MIN_ROWS '='? decimalLiteral # tableOptionMinRows
514
+ | PACK_KEYS '='? extBoolValue = ('0' | '1' | DEFAULT) # tableOptionPackKeys
515
+ | PASSWORD '='? STRING_LITERAL # tableOptionPassword
516
+ | ROW_FORMAT '='? rowFormat = (
517
+ DEFAULT
518
+ | DYNAMIC
519
+ | FIXED
520
+ | COMPRESSED
521
+ | REDUNDANT
522
+ | COMPACT
523
+ | ID
524
+ ) # tableOptionRowFormat
525
+ | START TRANSACTION # tableOptionStartTransaction
526
+ | SECONDARY_ENGINE_ATTRIBUTE '='? STRING_LITERAL # tableOptionSecondaryEngineAttribute
527
+ | STATS_AUTO_RECALC '='? extBoolValue = (DEFAULT | '0' | '1') # tableOptionRecalculation
528
+ | STATS_PERSISTENT '='? extBoolValue = (DEFAULT | '0' | '1') # tableOptionPersistent
529
+ | STATS_SAMPLE_PAGES '='? (DEFAULT | decimalLiteral) # tableOptionSamplePage
530
+ | TABLESPACE uid tablespaceStorage? # tableOptionTablespace
531
+ | TABLE_TYPE '=' tableType # tableOptionTableType
532
+ | tablespaceStorage # tableOptionTablespace
533
+ | TRANSACTIONAL '='? ('0' | '1') # tableOptionTransactional
534
+ | UNION '='? '(' tables ')' # tableOptionUnion
535
+ ;
536
+
537
+ tableType
538
+ : MYSQL
539
+ | ODBC
540
+ ;
541
+
542
+ tablespaceStorage
543
+ : STORAGE (DISK | MEMORY | DEFAULT)
544
+ ;
545
+
546
+ partitionDefinitions
547
+ : PARTITION BY partitionFunctionDefinition (PARTITIONS count = decimalLiteral)? (
548
+ SUBPARTITION BY subpartitionFunctionDefinition (SUBPARTITIONS subCount = decimalLiteral)?
549
+ )? ('(' partitionDefinition (',' partitionDefinition)* ')')?
550
+ ;
551
+
552
+ partitionFunctionDefinition
553
+ : LINEAR? HASH '(' expression ')' # partitionFunctionHash
554
+ | LINEAR? KEY (ALGORITHM '=' algType = ('1' | '2'))? '(' uidList? ')' # partitionFunctionKey // Optional uidList for MySQL only
555
+ | RANGE ('(' expression ')' | COLUMNS '(' uidList ')') # partitionFunctionRange
556
+ | LIST ('(' expression ')' | COLUMNS '(' uidList ')') # partitionFunctionList
557
+ ;
558
+
559
+ subpartitionFunctionDefinition
560
+ : LINEAR? HASH '(' expression ')' # subPartitionFunctionHash
561
+ | LINEAR? KEY (ALGORITHM '=' algType = ('1' | '2'))? '(' uidList ')' # subPartitionFunctionKey
562
+ ;
563
+
564
+ partitionDefinition
565
+ : PARTITION uid VALUES LESS THAN '(' partitionDefinerAtom (',' partitionDefinerAtom)* ')' partitionOption* (
566
+ '(' subpartitionDefinition (',' subpartitionDefinition)* ')'
567
+ )? # partitionComparison
568
+ | PARTITION uid VALUES LESS THAN partitionDefinerAtom partitionOption* (
569
+ '(' subpartitionDefinition (',' subpartitionDefinition)* ')'
570
+ )? # partitionComparison
571
+ | PARTITION uid VALUES IN '(' partitionDefinerAtom (',' partitionDefinerAtom)* ')' partitionOption* (
572
+ '(' subpartitionDefinition (',' subpartitionDefinition)* ')'
573
+ )? # partitionListAtom
574
+ | PARTITION uid VALUES IN '(' partitionDefinerVector (',' partitionDefinerVector)* ')' partitionOption* (
575
+ '(' subpartitionDefinition (',' subpartitionDefinition)* ')'
576
+ )? # partitionListVector
577
+ | PARTITION uid partitionOption* ('(' subpartitionDefinition (',' subpartitionDefinition)* ')')? # partitionSimple
578
+ ;
579
+
580
+ partitionDefinerAtom
581
+ : constant
582
+ | expression
583
+ | MAXVALUE
584
+ ;
585
+
586
+ partitionDefinerVector
587
+ : '(' partitionDefinerAtom (',' partitionDefinerAtom)+ ')'
588
+ ;
589
+
590
+ subpartitionDefinition
591
+ : SUBPARTITION uid partitionOption*
592
+ ;
593
+
594
+ partitionOption
595
+ : DEFAULT? STORAGE? ENGINE '='? engineName # partitionOptionEngine
596
+ | COMMENT '='? comment = STRING_LITERAL # partitionOptionComment
597
+ | DATA DIRECTORY '='? dataDirectory = STRING_LITERAL # partitionOptionDataDirectory
598
+ | INDEX DIRECTORY '='? indexDirectory = STRING_LITERAL # partitionOptionIndexDirectory
599
+ | MAX_ROWS '='? maxRows = decimalLiteral # partitionOptionMaxRows
600
+ | MIN_ROWS '='? minRows = decimalLiteral # partitionOptionMinRows
601
+ | TABLESPACE '='? tablespace = uid # partitionOptionTablespace
602
+ | NODEGROUP '='? nodegroup = uid # partitionOptionNodeGroup
603
+ ;
604
+
605
+ // Alter statements
606
+
607
+ alterDatabase
608
+ : ALTER dbFormat = (DATABASE | SCHEMA) uid? createDatabaseOption+ # alterSimpleDatabase
609
+ | ALTER dbFormat = (DATABASE | SCHEMA) uid UPGRADE DATA DIRECTORY NAME # alterUpgradeName
610
+ ;
611
+
612
+ alterEvent
613
+ : ALTER ownerStatement? EVENT fullId (ON SCHEDULE scheduleExpression)? (
614
+ ON COMPLETION NOT? PRESERVE
615
+ )? (RENAME TO fullId)? enableType? (COMMENT STRING_LITERAL)? (DO routineBody)?
616
+ ;
617
+
618
+ alterFunction
619
+ : ALTER FUNCTION fullId routineOption*
620
+ ;
621
+
622
+ alterInstance
623
+ : ALTER INSTANCE ROTATE INNODB MASTER KEY
624
+ ;
625
+
626
+ alterLogfileGroup
627
+ : ALTER LOGFILE GROUP uid ADD UNDOFILE STRING_LITERAL (INITIAL_SIZE '='? fileSizeLiteral)? WAIT? ENGINE '='? engineName
628
+ ;
629
+
630
+ alterProcedure
631
+ : ALTER PROCEDURE fullId routineOption*
632
+ ;
633
+
634
+ alterServer
635
+ : ALTER SERVER uid OPTIONS '(' serverOption (',' serverOption)* ')'
636
+ ;
637
+
638
+ alterTable
639
+ : ALTER intimeAction = (ONLINE | OFFLINE)? IGNORE? TABLE tableName waitNowaitClause? (
640
+ alterSpecification (',' alterSpecification)*
641
+ )? partitionDefinitions?
642
+ ;
643
+
644
+ alterTablespace
645
+ : ALTER TABLESPACE uid objectAction = (ADD | DROP) DATAFILE STRING_LITERAL (
646
+ INITIAL_SIZE '=' fileSizeLiteral
647
+ )? WAIT? ENGINE '='? engineName
648
+ ;
649
+
650
+ alterView
651
+ : ALTER (ALGORITHM '=' algType = (UNDEFINED | MERGE | TEMPTABLE))? ownerStatement? (
652
+ SQL SECURITY secContext = (DEFINER | INVOKER)
653
+ )? VIEW fullId ('(' uidList ')')? AS selectStatement (
654
+ WITH checkOpt = (CASCADED | LOCAL)? CHECK OPTION
655
+ )?
656
+ ;
657
+
658
+ // details
659
+
660
+ alterSpecification
661
+ : tableOption (','? tableOption)* # alterByTableOption
662
+ | ADD COLUMN? uid columnDefinition (FIRST | AFTER uid)? # alterByAddColumn
663
+ | ADD COLUMN? '(' uid columnDefinition (',' uid columnDefinition)* ')' # alterByAddColumns
664
+ | ADD indexFormat = (INDEX | KEY) uid? indexType? indexColumnNames indexOption* # alterByAddIndex
665
+ | ADD (CONSTRAINT name = uid?)? PRIMARY KEY index = uid? indexType? indexColumnNames indexOption* # alterByAddPrimaryKey
666
+ | ADD (CONSTRAINT name = uid?)? UNIQUE indexFormat = (INDEX | KEY)? indexName = uid? indexType? indexColumnNames indexOption* # alterByAddUniqueKey
667
+ | ADD keyType = (FULLTEXT | SPATIAL) indexFormat = (INDEX | KEY)? uid? indexColumnNames indexOption* # alterByAddSpecialIndex
668
+ | ADD (CONSTRAINT name = uid?)? FOREIGN KEY indexName = uid? indexColumnNames referenceDefinition # alterByAddForeignKey
669
+ | ADD (CONSTRAINT name = uid?)? CHECK (uid | stringLiteral | '(' expression ')') NOT? ENFORCED? # alterByAddCheckTableConstraint
670
+ | ALTER (CONSTRAINT name = uid?)? CHECK (uid | stringLiteral | '(' expression ')') NOT? ENFORCED? # alterByAlterCheckTableConstraint
671
+ | ADD (CONSTRAINT name = uid?)? CHECK '(' expression ')' # alterByAddCheckTableConstraint
672
+ | ALGORITHM '='? algType = (DEFAULT | INSTANT | INPLACE | COPY) # alterBySetAlgorithm
673
+ | ALTER COLUMN? uid (SET DEFAULT defaultValue | DROP DEFAULT) # alterByChangeDefault
674
+ | CHANGE COLUMN? oldColumn = uid newColumn = uid columnDefinition (
675
+ FIRST
676
+ | AFTER afterColumn = uid
677
+ )? # alterByChangeColumn
678
+ | RENAME COLUMN oldColumn = uid TO newColumn = uid # alterByRenameColumn
679
+ | LOCK '='? lockType = (DEFAULT | NONE | SHARED | EXCLUSIVE) # alterByLock
680
+ | MODIFY COLUMN? uid columnDefinition (FIRST | AFTER uid)? # alterByModifyColumn
681
+ | DROP COLUMN? uid RESTRICT? # alterByDropColumn
682
+ | DROP (CONSTRAINT | CHECK) uid # alterByDropConstraintCheck
683
+ | DROP PRIMARY KEY # alterByDropPrimaryKey
684
+ | DROP indexFormat = (INDEX | KEY) uid # alterByDropIndex
685
+ | RENAME indexFormat = (INDEX | KEY) uid TO uid # alterByRenameIndex
686
+ | ALTER COLUMN? uid (
687
+ SET DEFAULT ( stringLiteral | '(' expression ')')
688
+ | SET (VISIBLE | INVISIBLE)
689
+ | DROP DEFAULT
690
+ ) # alterByAlterColumnDefault
691
+ | ALTER INDEX uid (VISIBLE | INVISIBLE) # alterByAlterIndexVisibility
692
+ | DROP FOREIGN KEY uid # alterByDropForeignKey
693
+ | DISABLE KEYS # alterByDisableKeys
694
+ | ENABLE KEYS # alterByEnableKeys
695
+ | RENAME renameFormat = (TO | AS)? (uid | fullId) # alterByRename
696
+ | ORDER BY uidList # alterByOrder
697
+ | CONVERT TO (CHARSET | CHARACTER SET) charsetName (COLLATE collationName)? # alterByConvertCharset
698
+ | DEFAULT? CHARACTER SET '=' charsetName (COLLATE '=' collationName)? # alterByDefaultCharset
699
+ | DISCARD TABLESPACE # alterByDiscardTablespace
700
+ | IMPORT TABLESPACE # alterByImportTablespace
701
+ | FORCE # alterByForce
702
+ | validationFormat = (WITHOUT | WITH) VALIDATION # alterByValidate
703
+ | ADD COLUMN? '(' createDefinition (',' createDefinition)* ')' # alterByAddDefinitions
704
+ | alterPartitionSpecification # alterPartition
705
+ ;
706
+
707
+ alterPartitionSpecification
708
+ : ADD PARTITION '(' partitionDefinition (',' partitionDefinition)* ')' # alterByAddPartition
709
+ | DROP PARTITION uidList # alterByDropPartition
710
+ | DISCARD PARTITION (uidList | ALL) TABLESPACE # alterByDiscardPartition
711
+ | IMPORT PARTITION (uidList | ALL) TABLESPACE # alterByImportPartition
712
+ | TRUNCATE PARTITION (uidList | ALL) # alterByTruncatePartition
713
+ | COALESCE PARTITION decimalLiteral # alterByCoalescePartition
714
+ | REORGANIZE PARTITION uidList INTO '(' partitionDefinition (',' partitionDefinition)* ')' # alterByReorganizePartition
715
+ | EXCHANGE PARTITION uid WITH TABLE tableName (validationFormat = (WITH | WITHOUT) VALIDATION)? # alterByExchangePartition
716
+ | ANALYZE PARTITION (uidList | ALL) # alterByAnalyzePartition
717
+ | CHECK PARTITION (uidList | ALL) # alterByCheckPartition
718
+ | OPTIMIZE PARTITION (uidList | ALL) # alterByOptimizePartition
719
+ | REBUILD PARTITION (uidList | ALL) # alterByRebuildPartition
720
+ | REPAIR PARTITION (uidList | ALL) # alterByRepairPartition
721
+ | REMOVE PARTITIONING # alterByRemovePartitioning
722
+ | UPGRADE PARTITIONING # alterByUpgradePartitioning
723
+ ;
724
+
725
+ // Drop statements
726
+
727
+ dropDatabase
728
+ : DROP dbFormat = (DATABASE | SCHEMA) ifExists? uid
729
+ ;
730
+
731
+ dropEvent
732
+ : DROP EVENT ifExists? fullId
733
+ ;
734
+
735
+ dropIndex
736
+ : DROP INDEX intimeAction = (ONLINE | OFFLINE)? uid ON tableName (
737
+ ALGORITHM '='? algType = (DEFAULT | INPLACE | COPY)
738
+ | LOCK '='? lockType = (DEFAULT | NONE | SHARED | EXCLUSIVE)
739
+ )*
740
+ ;
741
+
742
+ dropLogfileGroup
743
+ : DROP LOGFILE GROUP uid ENGINE '=' engineName
744
+ ;
745
+
746
+ dropProcedure
747
+ : DROP PROCEDURE ifExists? fullId
748
+ ;
749
+
750
+ dropFunction
751
+ : DROP FUNCTION ifExists? fullId
752
+ ;
753
+
754
+ dropServer
755
+ : DROP SERVER ifExists? uid
756
+ ;
757
+
758
+ dropTable
759
+ : DROP TEMPORARY? TABLE ifExists? tables dropType = (RESTRICT | CASCADE)?
760
+ ;
761
+
762
+ dropTablespace
763
+ : DROP TABLESPACE uid (ENGINE '='? engineName)?
764
+ ;
765
+
766
+ dropTrigger
767
+ : DROP TRIGGER ifExists? fullId
768
+ ;
769
+
770
+ dropView
771
+ : DROP VIEW ifExists? fullId (',' fullId)* dropType = (RESTRICT | CASCADE)?
772
+ ;
773
+
774
+ dropRole
775
+ : DROP ROLE ifExists? roleName (',' roleName)*
776
+ ;
777
+
778
+ setRole
779
+ : SET DEFAULT ROLE (NONE | ALL | roleName (',' roleName)*) TO (userName | uid) (
780
+ ',' (userName | uid)
781
+ )*
782
+ | SET ROLE roleOption
783
+ ;
784
+
785
+ // Other DDL statements
786
+
787
+ renameTable
788
+ : RENAME TABLE renameTableClause (',' renameTableClause)*
789
+ ;
790
+
791
+ renameTableClause
792
+ : tableName TO tableName
793
+ ;
794
+
795
+ truncateTable
796
+ : TRUNCATE TABLE? tableName
797
+ ;
798
+
799
+ // Data Manipulation Language
800
+
801
+ // Primary DML Statements
802
+
803
+ callStatement
804
+ : CALL fullId ('(' (constants | expressions)? ')')?
805
+ ;
806
+
807
+ deleteStatement
808
+ : singleDeleteStatement
809
+ | multipleDeleteStatement
810
+ ;
811
+
812
+ doStatement
813
+ : DO expressions
814
+ ;
815
+
816
+ handlerStatement
817
+ : handlerOpenStatement
818
+ | handlerReadIndexStatement
819
+ | handlerReadStatement
820
+ | handlerCloseStatement
821
+ ;
822
+
823
+ insertStatement
824
+ : INSERT priority = (LOW_PRIORITY | DELAYED | HIGH_PRIORITY)? IGNORE? INTO? tableName (
825
+ PARTITION '(' partitions = uidList? ')'
826
+ )? (
827
+ ('(' columns = fullColumnNameList? ')')? insertStatementValue (AS? uid)?
828
+ | SET setFirst = updatedElement (',' setElements += updatedElement)*
829
+ ) (
830
+ ON DUPLICATE KEY UPDATE duplicatedFirst = updatedElement (
831
+ ',' duplicatedElements += updatedElement
832
+ )*
833
+ )?
834
+ ;
835
+
836
+ loadDataStatement
837
+ : LOAD DATA priority = (LOW_PRIORITY | CONCURRENT)? LOCAL? INFILE filename = STRING_LITERAL violation = (
838
+ REPLACE
839
+ | IGNORE
840
+ )? INTO TABLE tableName (PARTITION '(' uidList ')')? (CHARACTER SET charset = charsetName)? (
841
+ fieldsFormat = (FIELDS | COLUMNS) selectFieldsInto+
842
+ )? (LINES selectLinesInto+)? (IGNORE decimalLiteral linesFormat = (LINES | ROWS))? (
843
+ '(' assignmentField (',' assignmentField)* ')'
844
+ )? (SET updatedElement (',' updatedElement)*)?
845
+ ;
846
+
847
+ loadXmlStatement
848
+ : LOAD XML priority = (LOW_PRIORITY | CONCURRENT)? LOCAL? INFILE filename = STRING_LITERAL violation = (
849
+ REPLACE
850
+ | IGNORE
851
+ )? INTO TABLE tableName (CHARACTER SET charset = charsetName)? (
852
+ ROWS IDENTIFIED BY '<' tag = STRING_LITERAL '>'
853
+ )? (IGNORE decimalLiteral linesFormat = (LINES | ROWS))? (
854
+ '(' assignmentField (',' assignmentField)* ')'
855
+ )? (SET updatedElement (',' updatedElement)*)?
856
+ ;
857
+
858
+ replaceStatement
859
+ : REPLACE priority = (LOW_PRIORITY | DELAYED)? INTO? tableName (
860
+ PARTITION '(' partitions = uidList ')'
861
+ )? (
862
+ ('(' columns = uidList ')')? insertStatementValue
863
+ | SET setFirst = updatedElement (',' setElements += updatedElement)*
864
+ )
865
+ ;
866
+
867
+ selectStatement
868
+ : querySpecification lockClause? # simpleSelect
869
+ | queryExpression lockClause? # parenthesisSelect
870
+ | (querySpecificationNointo | queryExpressionNointo) unionStatement+ (
871
+ UNION unionType = (ALL | DISTINCT)? (querySpecification | queryExpression)
872
+ )? orderByClause? limitClause? lockClause? # unionSelect
873
+ | queryExpressionNointo unionParenthesis+ (UNION unionType = (ALL | DISTINCT)? queryExpression)? orderByClause? limitClause? lockClause? #
874
+ unionParenthesisSelect
875
+ | querySpecificationNointo (',' lateralStatement)+ # withLateralStatement
876
+ ;
877
+
878
+ updateStatement
879
+ : singleUpdateStatement
880
+ | multipleUpdateStatement
881
+ ;
882
+
883
+ // https://dev.mysql.com/doc/refman/8.0/en/values.html
884
+ valuesStatement
885
+ : VALUES '(' expressionsWithDefaults? ')' (',' '(' expressionsWithDefaults? ')')*
886
+ ;
887
+
888
+ // details
889
+
890
+ insertStatementValue
891
+ : selectStatement
892
+ | insertFormat = (VALUES | VALUE) '(' expressionsWithDefaults? ')' (
893
+ ',' '(' expressionsWithDefaults? ')'
894
+ )*
895
+ ;
896
+
897
+ updatedElement
898
+ : fullColumnName '=' (expression | DEFAULT)
899
+ ;
900
+
901
+ assignmentField
902
+ : uid
903
+ | LOCAL_ID
904
+ ;
905
+
906
+ lockClause
907
+ : FOR UPDATE
908
+ | LOCK IN SHARE MODE
909
+ ;
910
+
911
+ // Detailed DML Statements
912
+
913
+ singleDeleteStatement
914
+ : DELETE priority = LOW_PRIORITY? QUICK? IGNORE? FROM tableName (AS? uid)? (
915
+ PARTITION '(' uidList ')'
916
+ )? (WHERE expression)? orderByClause? (LIMIT limitClauseAtom)?
917
+ ;
918
+
919
+ multipleDeleteStatement
920
+ : DELETE priority = LOW_PRIORITY? QUICK? IGNORE? (
921
+ tableName ('.' '*')? ( ',' tableName ('.' '*')?)* FROM tableSources
922
+ | FROM tableName ('.' '*')? ( ',' tableName ('.' '*')?)* USING tableSources
923
+ ) (WHERE expression)?
924
+ ;
925
+
926
+ handlerOpenStatement
927
+ : HANDLER tableName OPEN (AS? uid)?
928
+ ;
929
+
930
+ handlerReadIndexStatement
931
+ : HANDLER tableName READ index = uid (
932
+ comparisonOperator '(' constants ')'
933
+ | moveOrder = (FIRST | NEXT | PREV | LAST)
934
+ ) (WHERE expression)? (LIMIT limitClauseAtom)?
935
+ ;
936
+
937
+ handlerReadStatement
938
+ : HANDLER tableName READ moveOrder = (FIRST | NEXT) (WHERE expression)? (LIMIT limitClauseAtom)?
939
+ ;
940
+
941
+ handlerCloseStatement
942
+ : HANDLER tableName CLOSE
943
+ ;
944
+
945
+ singleUpdateStatement
946
+ : UPDATE priority = LOW_PRIORITY? IGNORE? tableName (AS? uid)? SET updatedElement (
947
+ ',' updatedElement
948
+ )* (WHERE expression)? orderByClause? limitClause?
949
+ ;
950
+
951
+ multipleUpdateStatement
952
+ : UPDATE priority = LOW_PRIORITY? IGNORE? tableSources SET updatedElement (',' updatedElement)* (
953
+ WHERE expression
954
+ )?
955
+ ;
956
+
957
+ // details
958
+
959
+ orderByClause
960
+ : ORDER BY orderByExpression (',' orderByExpression)*
961
+ ;
962
+
963
+ orderByExpression
964
+ : expression order = (ASC | DESC)?
965
+ ;
966
+
967
+ tableSources
968
+ : tableSource (',' tableSource)*
969
+ ;
970
+
971
+ tableSource
972
+ : tableSourceItem joinPart* # tableSourceBase
973
+ | '(' tableSourceItem joinPart* ')' # tableSourceNested
974
+ | jsonTable # tableJson
975
+ ;
976
+
977
+ tableSourceItem
978
+ : tableName (PARTITION '(' uidList ')')? (AS? alias = uid)? (indexHint (',' indexHint)*)? # atomTableItem
979
+ | (selectStatement | '(' parenthesisSubquery = selectStatement ')') AS? alias = uid # subqueryTableItem
980
+ | '(' tableSources ')' # tableSourcesItem
981
+ ;
982
+
983
+ indexHint
984
+ : indexHintAction = (USE | IGNORE | FORCE) keyFormat = (INDEX | KEY) (FOR indexHintType)? '(' uidList ')'
985
+ ;
986
+
987
+ indexHintType
988
+ : JOIN
989
+ | ORDER BY
990
+ | GROUP BY
991
+ ;
992
+
993
+ joinPart
994
+ : (INNER | CROSS)? JOIN LATERAL? tableSourceItem joinSpec* # innerJoin
995
+ | STRAIGHT_JOIN tableSourceItem (ON expression)* # straightJoin
996
+ | (LEFT | RIGHT) OUTER? JOIN LATERAL? tableSourceItem joinSpec* # outerJoin
997
+ | NATURAL ((LEFT | RIGHT) OUTER?)? JOIN tableSourceItem # naturalJoin
998
+ ;
999
+
1000
+ joinSpec
1001
+ : (ON expression)
1002
+ | USING '(' uidList ')'
1003
+ ;
1004
+
1005
+ // Select Statement's Details
1006
+
1007
+ queryExpression
1008
+ : '(' querySpecification ')'
1009
+ | '(' queryExpression ')'
1010
+ ;
1011
+
1012
+ queryExpressionNointo
1013
+ : '(' querySpecificationNointo ')'
1014
+ | '(' queryExpressionNointo ')'
1015
+ ;
1016
+
1017
+ querySpecification
1018
+ : SELECT selectSpec* selectElements selectIntoExpression? fromClause groupByClause? havingClause? windowClause? orderByClause? limitClause?
1019
+ | SELECT selectSpec* selectElements fromClause groupByClause? havingClause? windowClause? orderByClause? limitClause? selectIntoExpression?
1020
+ ;
1021
+
1022
+ querySpecificationNointo
1023
+ : SELECT selectSpec* selectElements fromClause groupByClause? havingClause? windowClause? orderByClause? limitClause?
1024
+ ;
1025
+
1026
+ unionParenthesis
1027
+ : UNION unionType = (ALL | DISTINCT)? queryExpressionNointo
1028
+ ;
1029
+
1030
+ unionStatement
1031
+ : UNION unionType = (ALL | DISTINCT)? (querySpecificationNointo | queryExpressionNointo)
1032
+ ;
1033
+
1034
+ lateralStatement
1035
+ : LATERAL (
1036
+ querySpecificationNointo
1037
+ | queryExpressionNointo
1038
+ | ('(' (querySpecificationNointo | queryExpressionNointo) ')' (AS? uid)?)
1039
+ )
1040
+ ;
1041
+
1042
+ // JSON
1043
+
1044
+ // https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html
1045
+ jsonTable
1046
+ : JSON_TABLE '(' STRING_LITERAL ',' STRING_LITERAL COLUMNS '(' jsonColumnList ')' ')' (AS? uid)?
1047
+ ;
1048
+
1049
+ jsonColumnList
1050
+ : jsonColumn (',' jsonColumn)*
1051
+ ;
1052
+
1053
+ jsonColumn
1054
+ : fullColumnName (
1055
+ FOR ORDINALITY
1056
+ | dataType (PATH STRING_LITERAL jsonOnEmpty? jsonOnError? | EXISTS PATH STRING_LITERAL)
1057
+ )
1058
+ | NESTED PATH? STRING_LITERAL COLUMNS '(' jsonColumnList ')'
1059
+ ;
1060
+
1061
+ jsonOnEmpty
1062
+ : (NULL_LITERAL | ERROR | DEFAULT defaultValue) ON EMPTY
1063
+ ;
1064
+
1065
+ jsonOnError
1066
+ : (NULL_LITERAL | ERROR | DEFAULT defaultValue) ON ERROR
1067
+ ;
1068
+
1069
+ // details
1070
+
1071
+ selectSpec
1072
+ : (ALL | DISTINCT | DISTINCTROW)
1073
+ | HIGH_PRIORITY
1074
+ | STRAIGHT_JOIN
1075
+ | SQL_SMALL_RESULT
1076
+ | SQL_BIG_RESULT
1077
+ | SQL_BUFFER_RESULT
1078
+ | (SQL_CACHE | SQL_NO_CACHE)
1079
+ | SQL_CALC_FOUND_ROWS
1080
+ ;
1081
+
1082
+ selectElements
1083
+ : (star = '*' | selectElement) (',' selectElement)*
1084
+ ;
1085
+
1086
+ selectElement
1087
+ : fullId '.' '*' # selectStarElement
1088
+ | fullColumnName (AS? uid)? # selectColumnElement
1089
+ | functionCall (AS? uid)? # selectFunctionElement
1090
+ | (LOCAL_ID VAR_ASSIGN)? expression (AS? uid)? # selectExpressionElement
1091
+ ;
1092
+
1093
+ selectIntoExpression
1094
+ : INTO assignmentField (',' assignmentField)* # selectIntoVariables
1095
+ | INTO DUMPFILE STRING_LITERAL # selectIntoDumpFile
1096
+ | (
1097
+ INTO OUTFILE filename = STRING_LITERAL (CHARACTER SET charset = charsetName)? (
1098
+ fieldsFormat = (FIELDS | COLUMNS) selectFieldsInto+
1099
+ )? (LINES selectLinesInto+)?
1100
+ ) # selectIntoTextFile
1101
+ ;
1102
+
1103
+ selectFieldsInto
1104
+ : TERMINATED BY terminationField = STRING_LITERAL
1105
+ | OPTIONALLY? ENCLOSED BY enclosion = STRING_LITERAL
1106
+ | ESCAPED BY escaping = STRING_LITERAL
1107
+ ;
1108
+
1109
+ selectLinesInto
1110
+ : STARTING BY starting = STRING_LITERAL
1111
+ | TERMINATED BY terminationLine = STRING_LITERAL
1112
+ ;
1113
+
1114
+ fromClause
1115
+ : (FROM tableSources)? (WHERE whereExpr = expression)?
1116
+ ;
1117
+
1118
+ groupByClause
1119
+ : GROUP BY groupByItem (',' groupByItem)* (WITH ROLLUP)?
1120
+ ;
1121
+
1122
+ havingClause
1123
+ : HAVING havingExpr = expression
1124
+ ;
1125
+
1126
+ windowClause
1127
+ : WINDOW windowName AS '(' windowSpec ')' (',' windowName AS '(' windowSpec ')')*
1128
+ ;
1129
+
1130
+ groupByItem
1131
+ : expression order = (ASC | DESC)?
1132
+ ;
1133
+
1134
+ limitClause
1135
+ : LIMIT (
1136
+ (offset = limitClauseAtom ',')? limit = limitClauseAtom
1137
+ | limit = limitClauseAtom OFFSET offset = limitClauseAtom
1138
+ )
1139
+ ;
1140
+
1141
+ limitClauseAtom
1142
+ : decimalLiteral
1143
+ | mysqlVariable
1144
+ | simpleId
1145
+ ;
1146
+
1147
+ // Transaction's Statements
1148
+
1149
+ startTransaction
1150
+ : START TRANSACTION (transactionMode (',' transactionMode)*)?
1151
+ ;
1152
+
1153
+ beginWork
1154
+ : BEGIN WORK?
1155
+ ;
1156
+
1157
+ commitWork
1158
+ : COMMIT WORK? (AND nochain = NO? CHAIN)? (norelease = NO? RELEASE)?
1159
+ ;
1160
+
1161
+ rollbackWork
1162
+ : ROLLBACK WORK? (AND nochain = NO? CHAIN)? (norelease = NO? RELEASE)?
1163
+ ;
1164
+
1165
+ savepointStatement
1166
+ : SAVEPOINT uid
1167
+ ;
1168
+
1169
+ rollbackStatement
1170
+ : ROLLBACK WORK? TO SAVEPOINT? uid
1171
+ ;
1172
+
1173
+ releaseStatement
1174
+ : RELEASE SAVEPOINT uid
1175
+ ;
1176
+
1177
+ lockTables
1178
+ : LOCK (TABLE | TABLES) lockTableElement (',' lockTableElement)* waitNowaitClause?
1179
+ ;
1180
+
1181
+ unlockTables
1182
+ : UNLOCK TABLES
1183
+ ;
1184
+
1185
+ // details
1186
+
1187
+ setAutocommitStatement
1188
+ : SET AUTOCOMMIT '=' autocommitValue = ('0' | '1')
1189
+ ;
1190
+
1191
+ setTransactionStatement
1192
+ : SET transactionContext = (GLOBAL | SESSION)? TRANSACTION transactionOption (
1193
+ ',' transactionOption
1194
+ )*
1195
+ ;
1196
+
1197
+ transactionMode
1198
+ : WITH CONSISTENT SNAPSHOT
1199
+ | READ WRITE
1200
+ | READ ONLY
1201
+ ;
1202
+
1203
+ lockTableElement
1204
+ : tableName (AS? uid)? lockAction
1205
+ ;
1206
+
1207
+ lockAction
1208
+ : READ LOCAL?
1209
+ | LOW_PRIORITY? WRITE
1210
+ ;
1211
+
1212
+ transactionOption
1213
+ : ISOLATION LEVEL transactionLevel
1214
+ | READ WRITE
1215
+ | READ ONLY
1216
+ ;
1217
+
1218
+ transactionLevel
1219
+ : REPEATABLE READ
1220
+ | READ COMMITTED
1221
+ | READ UNCOMMITTED
1222
+ | SERIALIZABLE
1223
+ ;
1224
+
1225
+ // Replication's Statements
1226
+
1227
+ // Base Replication
1228
+
1229
+ changeMaster
1230
+ : CHANGE MASTER TO masterOption (',' masterOption)* channelOption?
1231
+ ;
1232
+
1233
+ changeReplicationFilter
1234
+ : CHANGE REPLICATION FILTER replicationFilter (',' replicationFilter)*
1235
+ ;
1236
+
1237
+ purgeBinaryLogs
1238
+ : PURGE purgeFormat = (BINARY | MASTER) LOGS (
1239
+ TO fileName = STRING_LITERAL
1240
+ | BEFORE timeValue = STRING_LITERAL
1241
+ )
1242
+ ;
1243
+
1244
+ resetMaster
1245
+ : RESET MASTER
1246
+ ;
1247
+
1248
+ resetSlave
1249
+ : RESET SLAVE ALL? channelOption?
1250
+ ;
1251
+
1252
+ startSlave
1253
+ : START SLAVE (threadType (',' threadType)*)? (UNTIL untilOption)? connectionOption* channelOption?
1254
+ ;
1255
+
1256
+ stopSlave
1257
+ : STOP SLAVE (threadType (',' threadType)*)?
1258
+ ;
1259
+
1260
+ startGroupReplication
1261
+ : START GROUP_REPLICATION
1262
+ ;
1263
+
1264
+ stopGroupReplication
1265
+ : STOP GROUP_REPLICATION
1266
+ ;
1267
+
1268
+ // details
1269
+
1270
+ masterOption
1271
+ : stringMasterOption '=' STRING_LITERAL # masterStringOption
1272
+ | decimalMasterOption '=' decimalLiteral # masterDecimalOption
1273
+ | boolMasterOption '=' boolVal = ('0' | '1') # masterBoolOption
1274
+ | MASTER_HEARTBEAT_PERIOD '=' REAL_LITERAL # masterRealOption
1275
+ | IGNORE_SERVER_IDS '=' '(' (uid (',' uid)*)? ')' # masterUidListOption
1276
+ ;
1277
+
1278
+ stringMasterOption
1279
+ : MASTER_BIND
1280
+ | MASTER_HOST
1281
+ | MASTER_USER
1282
+ | MASTER_PASSWORD
1283
+ | MASTER_LOG_FILE
1284
+ | RELAY_LOG_FILE
1285
+ | MASTER_SSL_CA
1286
+ | MASTER_SSL_CAPATH
1287
+ | MASTER_SSL_CERT
1288
+ | MASTER_SSL_CRL
1289
+ | MASTER_SSL_CRLPATH
1290
+ | MASTER_SSL_KEY
1291
+ | MASTER_SSL_CIPHER
1292
+ | MASTER_TLS_VERSION
1293
+ ;
1294
+
1295
+ decimalMasterOption
1296
+ : MASTER_PORT
1297
+ | MASTER_CONNECT_RETRY
1298
+ | MASTER_RETRY_COUNT
1299
+ | MASTER_DELAY
1300
+ | MASTER_LOG_POS
1301
+ | RELAY_LOG_POS
1302
+ ;
1303
+
1304
+ boolMasterOption
1305
+ : MASTER_AUTO_POSITION
1306
+ | MASTER_SSL
1307
+ | MASTER_SSL_VERIFY_SERVER_CERT
1308
+ ;
1309
+
1310
+ channelOption
1311
+ : FOR CHANNEL STRING_LITERAL
1312
+ ;
1313
+
1314
+ replicationFilter
1315
+ : REPLICATE_DO_DB '=' '(' uidList ')' # doDbReplication
1316
+ | REPLICATE_IGNORE_DB '=' '(' uidList ')' # ignoreDbReplication
1317
+ | REPLICATE_DO_TABLE '=' '(' tables ')' # doTableReplication
1318
+ | REPLICATE_IGNORE_TABLE '=' '(' tables ')' # ignoreTableReplication
1319
+ | REPLICATE_WILD_DO_TABLE '=' '(' simpleStrings ')' # wildDoTableReplication
1320
+ | REPLICATE_WILD_IGNORE_TABLE '=' '(' simpleStrings ')' # wildIgnoreTableReplication
1321
+ | REPLICATE_REWRITE_DB '=' '(' tablePair (',' tablePair)* ')' # rewriteDbReplication
1322
+ ;
1323
+
1324
+ tablePair
1325
+ : '(' firstTable = tableName ',' secondTable = tableName ')'
1326
+ ;
1327
+
1328
+ threadType
1329
+ : IO_THREAD
1330
+ | SQL_THREAD
1331
+ ;
1332
+
1333
+ untilOption
1334
+ : gtids = (SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS) '=' gtuidSet # gtidsUntilOption
1335
+ | MASTER_LOG_FILE '=' STRING_LITERAL ',' MASTER_LOG_POS '=' decimalLiteral # masterLogUntilOption
1336
+ | RELAY_LOG_FILE '=' STRING_LITERAL ',' RELAY_LOG_POS '=' decimalLiteral # relayLogUntilOption
1337
+ | SQL_AFTER_MTS_GAPS # sqlGapsUntilOption
1338
+ ;
1339
+
1340
+ connectionOption
1341
+ : USER '=' conOptUser = STRING_LITERAL # userConnectionOption
1342
+ | PASSWORD '=' conOptPassword = STRING_LITERAL # passwordConnectionOption
1343
+ | DEFAULT_AUTH '=' conOptDefAuth = STRING_LITERAL # defaultAuthConnectionOption
1344
+ | PLUGIN_DIR '=' conOptPluginDir = STRING_LITERAL # pluginDirConnectionOption
1345
+ ;
1346
+
1347
+ gtuidSet
1348
+ : uuidSet (',' uuidSet)*
1349
+ | STRING_LITERAL
1350
+ ;
1351
+
1352
+ // XA Transactions
1353
+
1354
+ xaStartTransaction
1355
+ : XA xaStart = (START | BEGIN) xid xaAction = (JOIN | RESUME)?
1356
+ ;
1357
+
1358
+ xaEndTransaction
1359
+ : XA END xid (SUSPEND (FOR MIGRATE)?)?
1360
+ ;
1361
+
1362
+ xaPrepareStatement
1363
+ : XA PREPARE xid
1364
+ ;
1365
+
1366
+ xaCommitWork
1367
+ : XA COMMIT xid (ONE PHASE)?
1368
+ ;
1369
+
1370
+ xaRollbackWork
1371
+ : XA ROLLBACK xid
1372
+ ;
1373
+
1374
+ xaRecoverWork
1375
+ : XA RECOVER (CONVERT xid)?
1376
+ ;
1377
+
1378
+ // Prepared Statements
1379
+
1380
+ prepareStatement
1381
+ : PREPARE uid FROM (query = STRING_LITERAL | variable = LOCAL_ID)
1382
+ ;
1383
+
1384
+ executeStatement
1385
+ : EXECUTE uid (USING userVariables)?
1386
+ ;
1387
+
1388
+ deallocatePrepare
1389
+ : dropFormat = (DEALLOCATE | DROP) PREPARE uid
1390
+ ;
1391
+
1392
+ // Compound Statements
1393
+
1394
+ routineBody
1395
+ : blockStatement
1396
+ | sqlStatement
1397
+ ;
1398
+
1399
+ // details
1400
+
1401
+ blockStatement
1402
+ : (uid ':')? BEGIN (declareVariable SEMI)* (declareCondition SEMI)* (declareCursor SEMI)* (
1403
+ declareHandler SEMI
1404
+ )* procedureSqlStatement* END uid?
1405
+ ;
1406
+
1407
+ caseStatement
1408
+ : CASE (uid | expression)? caseAlternative+ (ELSE procedureSqlStatement+)? END CASE
1409
+ ;
1410
+
1411
+ ifStatement
1412
+ : IF expression THEN thenStatements += procedureSqlStatement+ elifAlternative* (
1413
+ ELSE elseStatements += procedureSqlStatement+
1414
+ )? END IF
1415
+ ;
1416
+
1417
+ iterateStatement
1418
+ : ITERATE uid
1419
+ ;
1420
+
1421
+ leaveStatement
1422
+ : LEAVE uid
1423
+ ;
1424
+
1425
+ loopStatement
1426
+ : (uid ':')? LOOP procedureSqlStatement+ END LOOP uid?
1427
+ ;
1428
+
1429
+ repeatStatement
1430
+ : (uid ':')? REPEAT procedureSqlStatement+ UNTIL expression END REPEAT uid?
1431
+ ;
1432
+
1433
+ returnStatement
1434
+ : RETURN expression
1435
+ ;
1436
+
1437
+ whileStatement
1438
+ : (uid ':')? WHILE expression DO procedureSqlStatement+ END WHILE uid?
1439
+ ;
1440
+
1441
+ cursorStatement
1442
+ : CLOSE uid # CloseCursor
1443
+ | FETCH (NEXT? FROM)? uid INTO uidList # FetchCursor
1444
+ | OPEN uid # OpenCursor
1445
+ ;
1446
+
1447
+ // details
1448
+
1449
+ declareVariable
1450
+ : DECLARE uidList dataType (DEFAULT expression)?
1451
+ ;
1452
+
1453
+ declareCondition
1454
+ : DECLARE uid CONDITION FOR (decimalLiteral | SQLSTATE VALUE? STRING_LITERAL)
1455
+ ;
1456
+
1457
+ declareCursor
1458
+ : DECLARE uid CURSOR FOR selectStatement
1459
+ ;
1460
+
1461
+ declareHandler
1462
+ : DECLARE handlerAction = (CONTINUE | EXIT | UNDO) HANDLER FOR handlerConditionValue (
1463
+ ',' handlerConditionValue
1464
+ )* routineBody
1465
+ ;
1466
+
1467
+ handlerConditionValue
1468
+ : decimalLiteral # handlerConditionCode
1469
+ | SQLSTATE VALUE? STRING_LITERAL # handlerConditionState
1470
+ | uid # handlerConditionName
1471
+ | SQLWARNING # handlerConditionWarning
1472
+ | NOT FOUND # handlerConditionNotfound
1473
+ | SQLEXCEPTION # handlerConditionException
1474
+ ;
1475
+
1476
+ procedureSqlStatement
1477
+ : (compoundStatement | sqlStatement) SEMI
1478
+ ;
1479
+
1480
+ caseAlternative
1481
+ : WHEN (constant | expression) THEN procedureSqlStatement+
1482
+ ;
1483
+
1484
+ elifAlternative
1485
+ : ELSEIF expression THEN procedureSqlStatement+
1486
+ ;
1487
+
1488
+ // Administration Statements
1489
+
1490
+ // Account management statements
1491
+
1492
+ alterUser
1493
+ : ALTER USER userSpecification (',' userSpecification)* # alterUserMysqlV56
1494
+ | ALTER USER ifExists? userAuthOption (',' userAuthOption)* (
1495
+ REQUIRE (tlsNone = NONE | tlsOption (AND? tlsOption)*)
1496
+ )? (WITH userResourceOption+)? (userPasswordOption | userLockOption)* (
1497
+ COMMENT STRING_LITERAL
1498
+ | ATTRIBUTE STRING_LITERAL
1499
+ )? # alterUserMysqlV80
1500
+ | ALTER USER ifExists? (userName | uid) DEFAULT ROLE roleOption # alterUserMysqlV80
1501
+ ;
1502
+
1503
+ createUser
1504
+ : CREATE USER userAuthOption (',' userAuthOption)* # createUserMysqlV56
1505
+ | CREATE USER ifNotExists? userAuthOption (',' userAuthOption)* (DEFAULT ROLE roleOption)? (
1506
+ REQUIRE (tlsNone = NONE | tlsOption (AND? tlsOption)*)
1507
+ )? (WITH userResourceOption+)? (userPasswordOption | userLockOption)* (
1508
+ COMMENT STRING_LITERAL
1509
+ | ATTRIBUTE STRING_LITERAL
1510
+ )? # createUserMysqlV80
1511
+ ;
1512
+
1513
+ dropUser
1514
+ : DROP USER ifExists? userName (',' userName)*
1515
+ ;
1516
+
1517
+ grantStatement
1518
+ : GRANT privelegeClause (',' privelegeClause)* ON privilegeObject = (
1519
+ TABLE
1520
+ | FUNCTION
1521
+ | PROCEDURE
1522
+ )? privilegeLevel TO userAuthOption (',' userAuthOption)* (
1523
+ REQUIRE (tlsNone = NONE | tlsOption (AND? tlsOption)*)
1524
+ )? (WITH (GRANT OPTION | userResourceOption)*)? (AS userName WITH ROLE roleOption)?
1525
+ | GRANT (userName | uid) (',' (userName | uid))* TO (userName | uid) (',' (userName | uid))* (
1526
+ WITH ADMIN OPTION
1527
+ )?
1528
+ ;
1529
+
1530
+ roleOption
1531
+ : DEFAULT
1532
+ | NONE
1533
+ | ALL (EXCEPT userName (',' userName)*)?
1534
+ | userName (',' userName)*
1535
+ ;
1536
+
1537
+ grantProxy
1538
+ : GRANT PROXY ON fromFirst = userName TO toFirst = userName (',' toOther += userName)* (
1539
+ WITH GRANT OPTION
1540
+ )?
1541
+ ;
1542
+
1543
+ renameUser
1544
+ : RENAME USER renameUserClause (',' renameUserClause)*
1545
+ ;
1546
+
1547
+ revokeStatement
1548
+ : REVOKE privelegeClause (',' privelegeClause)* ON privilegeObject = (
1549
+ TABLE
1550
+ | FUNCTION
1551
+ | PROCEDURE
1552
+ )? privilegeLevel FROM userName (',' userName)* # detailRevoke
1553
+ | REVOKE ALL PRIVILEGES? ',' GRANT OPTION FROM userName (',' userName)* # shortRevoke
1554
+ | REVOKE (userName | uid) (',' (userName | uid))* FROM (userName | uid) (',' (userName | uid))* # roleRevoke
1555
+ ;
1556
+
1557
+ revokeProxy
1558
+ : REVOKE PROXY ON onUser = userName FROM fromFirst = userName (',' fromOther += userName)*
1559
+ ;
1560
+
1561
+ setPasswordStatement
1562
+ : SET PASSWORD (FOR userName)? '=' (passwordFunctionClause | STRING_LITERAL)
1563
+ ;
1564
+
1565
+ // details
1566
+
1567
+ userSpecification
1568
+ : userName userPasswordOption
1569
+ ;
1570
+
1571
+ userAuthOption
1572
+ : userName IDENTIFIED BY PASSWORD hashed = STRING_LITERAL # hashAuthOption
1573
+ | userName IDENTIFIED BY RANDOM PASSWORD authOptionClause # randomAuthOption
1574
+ | userName IDENTIFIED BY STRING_LITERAL authOptionClause # stringAuthOption
1575
+ | userName IDENTIFIED WITH authenticationRule # moduleAuthOption
1576
+ | userName # simpleAuthOption
1577
+ ;
1578
+
1579
+ authOptionClause
1580
+ : (REPLACE STRING_LITERAL)? (RETAIN CURRENT PASSWORD)?
1581
+ ;
1582
+
1583
+ authenticationRule
1584
+ : authPlugin ((BY | USING | AS) (STRING_LITERAL | RANDOM PASSWORD) authOptionClause)? # module
1585
+ | authPlugin USING passwordFunctionClause # passwordModuleOption
1586
+ ;
1587
+
1588
+ tlsOption
1589
+ : SSL
1590
+ | X509
1591
+ | CIPHER STRING_LITERAL
1592
+ | ISSUER STRING_LITERAL
1593
+ | SUBJECT STRING_LITERAL
1594
+ ;
1595
+
1596
+ userResourceOption
1597
+ : MAX_QUERIES_PER_HOUR decimalLiteral
1598
+ | MAX_UPDATES_PER_HOUR decimalLiteral
1599
+ | MAX_CONNECTIONS_PER_HOUR decimalLiteral
1600
+ | MAX_USER_CONNECTIONS decimalLiteral
1601
+ ;
1602
+
1603
+ userPasswordOption
1604
+ : PASSWORD EXPIRE (
1605
+ expireType = DEFAULT
1606
+ | expireType = NEVER
1607
+ | expireType = INTERVAL decimalLiteral DAY
1608
+ )?
1609
+ | PASSWORD HISTORY (DEFAULT | decimalLiteral)
1610
+ | PASSWORD REUSE INTERVAL (DEFAULT | decimalLiteral DAY)
1611
+ | PASSWORD REQUIRE CURRENT (OPTIONAL | DEFAULT)?
1612
+ | FAILED_LOGIN_ATTEMPTS decimalLiteral
1613
+ | PASSWORD_LOCK_TIME (decimalLiteral | UNBOUNDED)
1614
+ ;
1615
+
1616
+ userLockOption
1617
+ : ACCOUNT lockType = (LOCK | UNLOCK)
1618
+ ;
1619
+
1620
+ privelegeClause
1621
+ : privilege ('(' uidList ')')?
1622
+ ;
1623
+
1624
+ privilege
1625
+ : ALL PRIVILEGES?
1626
+ | ALTER ROUTINE?
1627
+ | CREATE (TEMPORARY TABLES | ROUTINE | VIEW | USER | TABLESPACE | ROLE)?
1628
+ | DELETE
1629
+ | DROP (ROLE)?
1630
+ | EVENT
1631
+ | EXECUTE
1632
+ | FILE
1633
+ | GRANT OPTION
1634
+ | INDEX
1635
+ | INSERT
1636
+ | LOCK TABLES
1637
+ | PROCESS
1638
+ | PROXY
1639
+ | REFERENCES
1640
+ | RELOAD
1641
+ | REPLICATION (CLIENT | SLAVE)
1642
+ | SELECT
1643
+ | SHOW (VIEW | DATABASES)
1644
+ | SHUTDOWN
1645
+ | SUPER
1646
+ | TRIGGER
1647
+ | UPDATE
1648
+ | USAGE
1649
+ | APPLICATION_PASSWORD_ADMIN
1650
+ | AUDIT_ABORT_EXEMPT
1651
+ | AUDIT_ADMIN
1652
+ | AUTHENTICATION_POLICY_ADMIN
1653
+ | BACKUP_ADMIN
1654
+ | BINLOG_ADMIN
1655
+ | BINLOG_ENCRYPTION_ADMIN
1656
+ | CLONE_ADMIN
1657
+ | CONNECTION_ADMIN
1658
+ | ENCRYPTION_KEY_ADMIN
1659
+ | FIREWALL_ADMIN
1660
+ | FIREWALL_EXEMPT
1661
+ | FIREWALL_USER
1662
+ | FLUSH_OPTIMIZER_COSTS
1663
+ | FLUSH_STATUS
1664
+ | FLUSH_TABLES
1665
+ | FLUSH_USER_RESOURCES
1666
+ | GROUP_REPLICATION_ADMIN
1667
+ | INNODB_REDO_LOG_ARCHIVE
1668
+ | INNODB_REDO_LOG_ENABLE
1669
+ | NDB_STORED_USER
1670
+ | PASSWORDLESS_USER_ADMIN
1671
+ | PERSIST_RO_VARIABLES_ADMIN
1672
+ | REPLICATION_APPLIER
1673
+ | REPLICATION_SLAVE_ADMIN
1674
+ | RESOURCE_GROUP_ADMIN
1675
+ | RESOURCE_GROUP_USER
1676
+ | ROLE_ADMIN
1677
+ | SERVICE_CONNECTION_ADMIN
1678
+ | SESSION_VARIABLES_ADMIN
1679
+ | SET_USER_ID
1680
+ | SKIP_QUERY_REWRITE
1681
+ | SHOW_ROUTINE
1682
+ | SYSTEM_USER
1683
+ | SYSTEM_VARIABLES_ADMIN
1684
+ | TABLE_ENCRYPTION_ADMIN
1685
+ | TP_CONNECTION_ADMIN
1686
+ | VERSION_TOKEN_ADMIN
1687
+ | XA_RECOVER_ADMIN
1688
+ // MySQL on Amazon RDS
1689
+ | LOAD FROM S3
1690
+ | SELECT INTO S3
1691
+ | INVOKE LAMBDA
1692
+ ;
1693
+
1694
+ privilegeLevel
1695
+ : '*' # currentSchemaPriviLevel
1696
+ | '*' '.' '*' # globalPrivLevel
1697
+ | uid '.' '*' # definiteSchemaPrivLevel
1698
+ | uid '.' uid # definiteFullTablePrivLevel
1699
+ | uid dottedId # definiteFullTablePrivLevel2
1700
+ | uid # definiteTablePrivLevel
1701
+ ;
1702
+
1703
+ renameUserClause
1704
+ : fromFirst = userName TO toFirst = userName
1705
+ ;
1706
+
1707
+ // Table maintenance statements
1708
+
1709
+ analyzeTable
1710
+ : ANALYZE actionOption = (NO_WRITE_TO_BINLOG | LOCAL)? (TABLE | TABLES) tables (
1711
+ UPDATE HISTOGRAM ON fullColumnName (',' fullColumnName)* (WITH decimalLiteral BUCKETS)?
1712
+ )? (DROP HISTOGRAM ON fullColumnName (',' fullColumnName)*)?
1713
+ ;
1714
+
1715
+ checkTable
1716
+ : CHECK TABLE tables checkTableOption*
1717
+ ;
1718
+
1719
+ checksumTable
1720
+ : CHECKSUM TABLE tables actionOption = (QUICK | EXTENDED)?
1721
+ ;
1722
+
1723
+ optimizeTable
1724
+ : OPTIMIZE actionOption = (NO_WRITE_TO_BINLOG | LOCAL)? (TABLE | TABLES) tables
1725
+ ;
1726
+
1727
+ repairTable
1728
+ : REPAIR actionOption = (NO_WRITE_TO_BINLOG | LOCAL)? TABLE tables QUICK? EXTENDED? USE_FRM?
1729
+ ;
1730
+
1731
+ // details
1732
+
1733
+ checkTableOption
1734
+ : FOR UPGRADE
1735
+ | QUICK
1736
+ | FAST
1737
+ | MEDIUM
1738
+ | EXTENDED
1739
+ | CHANGED
1740
+ ;
1741
+
1742
+ // Plugin and udf statements
1743
+
1744
+ createUdfunction
1745
+ : CREATE AGGREGATE? FUNCTION ifNotExists? uid RETURNS returnType = (
1746
+ STRING
1747
+ | INTEGER
1748
+ | REAL
1749
+ | DECIMAL
1750
+ ) SONAME STRING_LITERAL
1751
+ ;
1752
+
1753
+ installPlugin
1754
+ : INSTALL PLUGIN uid SONAME STRING_LITERAL
1755
+ ;
1756
+
1757
+ uninstallPlugin
1758
+ : UNINSTALL PLUGIN uid
1759
+ ;
1760
+
1761
+ // Set and show statements
1762
+
1763
+ setStatement
1764
+ : SET variableClause ('=' | ':=') (expression | ON) (
1765
+ ',' variableClause ('=' | ':=') (expression | ON)
1766
+ )* # setVariable
1767
+ | SET charSet (charsetName | DEFAULT) # setCharset
1768
+ | SET NAMES (charsetName (COLLATE collationName)? | DEFAULT) # setNames
1769
+ | setPasswordStatement # setPassword
1770
+ | setTransactionStatement # setTransaction
1771
+ | setAutocommitStatement # setAutocommit
1772
+ | SET fullId ('=' | ':=') expression (',' fullId ('=' | ':=') expression)* # setNewValueInsideTrigger
1773
+ ;
1774
+
1775
+ showStatement
1776
+ : SHOW logFormat = (BINARY | MASTER) LOGS # showMasterLogs
1777
+ | SHOW logFormat = (BINLOG | RELAYLOG) EVENTS (IN filename = STRING_LITERAL)? (
1778
+ FROM fromPosition = decimalLiteral
1779
+ )? (LIMIT (offset = decimalLiteral ',')? rowCount = decimalLiteral)? # showLogEvents
1780
+ | SHOW showCommonEntity showFilter? # showObjectFilter
1781
+ | SHOW FULL? columnsFormat = (COLUMNS | FIELDS) tableFormat = (FROM | IN) tableName (
1782
+ schemaFormat = (FROM | IN) uid
1783
+ )? showFilter? # showColumns
1784
+ | SHOW CREATE schemaFormat = (DATABASE | SCHEMA) ifNotExists? uid # showCreateDb
1785
+ | SHOW CREATE namedEntity = (EVENT | FUNCTION | PROCEDURE | TABLE | TRIGGER | VIEW) fullId # showCreateFullIdObject
1786
+ | SHOW CREATE USER userName # showCreateUser
1787
+ | SHOW ENGINE engineName engineOption = (STATUS | MUTEX) # showEngine
1788
+ | SHOW showGlobalInfoClause # showGlobalInfo
1789
+ | SHOW errorFormat = (ERRORS | WARNINGS) (
1790
+ LIMIT (offset = decimalLiteral ',')? rowCount = decimalLiteral
1791
+ )? # showErrors
1792
+ | SHOW COUNT '(' '*' ')' errorFormat = (ERRORS | WARNINGS) # showCountErrors
1793
+ | SHOW showSchemaEntity (schemaFormat = (FROM | IN) uid)? showFilter? # showSchemaFilter
1794
+ | SHOW routine = (FUNCTION | PROCEDURE) CODE fullId # showRoutine
1795
+ | SHOW GRANTS (FOR userName)? # showGrants
1796
+ | SHOW indexFormat = (INDEX | INDEXES | KEYS) tableFormat = (FROM | IN) tableName (
1797
+ schemaFormat = (FROM | IN) uid
1798
+ )? (WHERE expression)? # showIndexes
1799
+ | SHOW OPEN TABLES (schemaFormat = (FROM | IN) uid)? showFilter? # showOpenTables
1800
+ | SHOW PROFILE showProfileType (',' showProfileType)* (FOR QUERY queryCount = decimalLiteral)? (
1801
+ LIMIT (offset = decimalLiteral ',')? rowCount = decimalLiteral
1802
+ ) # showProfile
1803
+ | SHOW SLAVE STATUS (FOR CHANNEL STRING_LITERAL)? # showSlaveStatus
1804
+ ;
1805
+
1806
+ // details
1807
+
1808
+ variableClause
1809
+ : LOCAL_ID
1810
+ | GLOBAL_ID
1811
+ | ( ('@' '@')? (GLOBAL | SESSION | LOCAL))? uid
1812
+ ;
1813
+
1814
+ showCommonEntity
1815
+ : CHARACTER SET
1816
+ | COLLATION
1817
+ | DATABASES
1818
+ | SCHEMAS
1819
+ | FUNCTION STATUS
1820
+ | PROCEDURE STATUS
1821
+ | (GLOBAL | SESSION)? (STATUS | VARIABLES)
1822
+ ;
1823
+
1824
+ showFilter
1825
+ : LIKE STRING_LITERAL
1826
+ | WHERE expression
1827
+ ;
1828
+
1829
+ showGlobalInfoClause
1830
+ : STORAGE? ENGINES
1831
+ | MASTER STATUS
1832
+ | PLUGINS
1833
+ | PRIVILEGES
1834
+ | FULL? PROCESSLIST
1835
+ | PROFILES
1836
+ | SLAVE HOSTS
1837
+ | AUTHORS
1838
+ | CONTRIBUTORS
1839
+ ;
1840
+
1841
+ showSchemaEntity
1842
+ : EVENTS
1843
+ | TABLE STATUS
1844
+ | FULL? TABLES
1845
+ | TRIGGERS
1846
+ ;
1847
+
1848
+ showProfileType
1849
+ : ALL
1850
+ | BLOCK IO
1851
+ | CONTEXT SWITCHES
1852
+ | CPU
1853
+ | IPC
1854
+ | MEMORY
1855
+ | PAGE FAULTS
1856
+ | SOURCE
1857
+ | SWAPS
1858
+ ;
1859
+
1860
+ // Other administrative statements
1861
+
1862
+ binlogStatement
1863
+ : BINLOG STRING_LITERAL
1864
+ ;
1865
+
1866
+ cacheIndexStatement
1867
+ : CACHE INDEX tableIndexes (',' tableIndexes)* (PARTITION '(' (uidList | ALL) ')')? IN schema = uid
1868
+ ;
1869
+
1870
+ flushStatement
1871
+ : FLUSH flushFormat = (NO_WRITE_TO_BINLOG | LOCAL)? flushOption (',' flushOption)*
1872
+ ;
1873
+
1874
+ killStatement
1875
+ : KILL connectionFormat = (CONNECTION | QUERY)? expression
1876
+ ;
1877
+
1878
+ loadIndexIntoCache
1879
+ : LOAD INDEX INTO CACHE loadedTableIndexes (',' loadedTableIndexes)*
1880
+ ;
1881
+
1882
+ // remark reset (maser | slave) describe in replication's
1883
+ // statements section
1884
+ resetStatement
1885
+ : RESET QUERY CACHE
1886
+ ;
1887
+
1888
+ shutdownStatement
1889
+ : SHUTDOWN
1890
+ ;
1891
+
1892
+ // details
1893
+
1894
+ tableIndexes
1895
+ : tableName (indexFormat = (INDEX | KEY)? '(' uidList ')')?
1896
+ ;
1897
+
1898
+ flushOption
1899
+ : (
1900
+ DES_KEY_FILE
1901
+ | HOSTS
1902
+ | ( BINARY | ENGINE | ERROR | GENERAL | RELAY | SLOW)? LOGS
1903
+ | OPTIMIZER_COSTS
1904
+ | PRIVILEGES
1905
+ | QUERY CACHE
1906
+ | STATUS
1907
+ | USER_RESOURCES
1908
+ | TABLES (WITH READ LOCK)?
1909
+ ) # simpleFlushOption
1910
+ | RELAY LOGS channelOption? # channelFlushOption
1911
+ | (TABLE | TABLES) tables? flushTableOption? # tableFlushOption
1912
+ ;
1913
+
1914
+ flushTableOption
1915
+ : WITH READ LOCK
1916
+ | FOR EXPORT
1917
+ ;
1918
+
1919
+ loadedTableIndexes
1920
+ : tableName (PARTITION '(' (partitionList = uidList | ALL) ')')? (
1921
+ indexFormat = (INDEX | KEY)? '(' indexList = uidList ')'
1922
+ )? (IGNORE LEAVES)?
1923
+ ;
1924
+
1925
+ // Utility Statements
1926
+
1927
+ simpleDescribeStatement
1928
+ : command = (EXPLAIN | DESCRIBE | DESC) tableName (column = uid | pattern = STRING_LITERAL)?
1929
+ ;
1930
+
1931
+ fullDescribeStatement
1932
+ : command = (EXPLAIN | DESCRIBE | DESC) (
1933
+ formatType = (EXTENDED | PARTITIONS | FORMAT) '=' formatValue = (TRADITIONAL | JSON)
1934
+ )? describeObjectClause
1935
+ ;
1936
+
1937
+ helpStatement
1938
+ : HELP STRING_LITERAL
1939
+ ;
1940
+
1941
+ useStatement
1942
+ : USE uid
1943
+ ;
1944
+
1945
+ signalStatement
1946
+ : SIGNAL (( SQLSTATE VALUE? stringLiteral) | ID | REVERSE_QUOTE_ID) (
1947
+ SET signalConditionInformation ( ',' signalConditionInformation)*
1948
+ )?
1949
+ ;
1950
+
1951
+ resignalStatement
1952
+ : RESIGNAL (( SQLSTATE VALUE? stringLiteral) | ID | REVERSE_QUOTE_ID)? (
1953
+ SET signalConditionInformation ( ',' signalConditionInformation)*
1954
+ )?
1955
+ ;
1956
+
1957
+ signalConditionInformation
1958
+ : (
1959
+ CLASS_ORIGIN
1960
+ | SUBCLASS_ORIGIN
1961
+ | MESSAGE_TEXT
1962
+ | MYSQL_ERRNO
1963
+ | CONSTRAINT_CATALOG
1964
+ | CONSTRAINT_SCHEMA
1965
+ | CONSTRAINT_NAME
1966
+ | CATALOG_NAME
1967
+ | SCHEMA_NAME
1968
+ | TABLE_NAME
1969
+ | COLUMN_NAME
1970
+ | CURSOR_NAME
1971
+ ) '=' (stringLiteral | DECIMAL_LITERAL | mysqlVariable | simpleId)
1972
+ ;
1973
+
1974
+ withStatement
1975
+ : WITH RECURSIVE? commonTableExpressions (',' commonTableExpressions)*
1976
+ ;
1977
+
1978
+ tableStatement
1979
+ : TABLE tableName orderByClause? limitClause?
1980
+ ;
1981
+
1982
+ diagnosticsStatement
1983
+ : GET (CURRENT | STACKED)? DIAGNOSTICS (
1984
+ (variableClause '=' ( NUMBER | ROW_COUNT) ( ',' variableClause '=' ( NUMBER | ROW_COUNT))*)
1985
+ | (
1986
+ CONDITION (decimalLiteral | variableClause) variableClause '=' diagnosticsConditionInformationName (
1987
+ ',' variableClause '=' diagnosticsConditionInformationName
1988
+ )*
1989
+ )
1990
+ )
1991
+ ;
1992
+
1993
+ diagnosticsConditionInformationName
1994
+ : CLASS_ORIGIN
1995
+ | SUBCLASS_ORIGIN
1996
+ | RETURNED_SQLSTATE
1997
+ | MESSAGE_TEXT
1998
+ | MYSQL_ERRNO
1999
+ | CONSTRAINT_CATALOG
2000
+ | CONSTRAINT_SCHEMA
2001
+ | CONSTRAINT_NAME
2002
+ | CATALOG_NAME
2003
+ | SCHEMA_NAME
2004
+ | TABLE_NAME
2005
+ | COLUMN_NAME
2006
+ | CURSOR_NAME
2007
+ ;
2008
+
2009
+ // details
2010
+
2011
+ describeObjectClause
2012
+ : (selectStatement | deleteStatement | insertStatement | replaceStatement | updateStatement) # describeStatements
2013
+ | FOR CONNECTION uid # describeConnection
2014
+ ;
2015
+
2016
+ // Common Clauses
2017
+
2018
+ // DB Objects
2019
+
2020
+ fullId
2021
+ : uid (DOT_ID | '.' uid)?
2022
+ ;
2023
+
2024
+ tableName
2025
+ : fullId
2026
+ ;
2027
+
2028
+ roleName
2029
+ : userName
2030
+ | uid
2031
+ ;
2032
+
2033
+ fullColumnName
2034
+ : uid (dottedId dottedId?)?
2035
+ | .? dottedId dottedId?
2036
+ ;
2037
+
2038
+ indexColumnName
2039
+ : ((uid | STRING_LITERAL) ('(' decimalLiteral ')')? | expression) sortType = (ASC | DESC)?
2040
+ ;
2041
+
2042
+ simpleUserName
2043
+ : STRING_LITERAL
2044
+ | ID
2045
+ | ADMIN
2046
+ | keywordsCanBeId
2047
+ ;
2048
+
2049
+ hostName
2050
+ : (LOCAL_ID | HOST_IP_ADDRESS | '@')
2051
+ ;
2052
+
2053
+ userName
2054
+ : simpleUserName
2055
+ | simpleUserName hostName
2056
+ | currentUserExpression
2057
+ ;
2058
+
2059
+ mysqlVariable
2060
+ : LOCAL_ID
2061
+ | GLOBAL_ID
2062
+ ;
2063
+
2064
+ charsetName
2065
+ : BINARY
2066
+ | charsetNameBase
2067
+ | STRING_LITERAL
2068
+ | CHARSET_REVERSE_QOUTE_STRING
2069
+ ;
2070
+
2071
+ collationName
2072
+ : uid
2073
+ | STRING_LITERAL
2074
+ ;
2075
+
2076
+ engineName
2077
+ : engineNameBase
2078
+ | ID
2079
+ | STRING_LITERAL
2080
+ ;
2081
+
2082
+ engineNameBase
2083
+ : ARCHIVE
2084
+ | BLACKHOLE
2085
+ | CONNECT
2086
+ | CSV
2087
+ | FEDERATED
2088
+ | INNODB
2089
+ | MEMORY
2090
+ | MRG_MYISAM
2091
+ | MYISAM
2092
+ | NDB
2093
+ | NDBCLUSTER
2094
+ | PERFORMANCE_SCHEMA
2095
+ | TOKUDB
2096
+ ;
2097
+
2098
+ uuidSet
2099
+ : decimalLiteral '-' decimalLiteral '-' decimalLiteral '-' decimalLiteral '-' decimalLiteral (
2100
+ ':' decimalLiteral '-' decimalLiteral
2101
+ )+
2102
+ ;
2103
+
2104
+ xid
2105
+ : globalTableUid = xuidStringId (',' qualifier = xuidStringId (',' idFormat = decimalLiteral)?)?
2106
+ ;
2107
+
2108
+ xuidStringId
2109
+ : STRING_LITERAL
2110
+ | BIT_STRING
2111
+ | HEXADECIMAL_LITERAL+
2112
+ ;
2113
+
2114
+ authPlugin
2115
+ : uid
2116
+ | STRING_LITERAL
2117
+ ;
2118
+
2119
+ uid
2120
+ : simpleId
2121
+ //| DOUBLE_QUOTE_ID
2122
+ //| REVERSE_QUOTE_ID
2123
+ | CHARSET_REVERSE_QOUTE_STRING
2124
+ | STRING_LITERAL
2125
+ ;
2126
+
2127
+ simpleId
2128
+ : ID
2129
+ | charsetNameBase
2130
+ | transactionLevelBase
2131
+ | engineNameBase
2132
+ | privilegesBase
2133
+ | intervalTypeBase
2134
+ | dataTypeBase
2135
+ | keywordsCanBeId
2136
+ | scalarFunctionName
2137
+ ;
2138
+
2139
+ dottedId
2140
+ : DOT_ID
2141
+ | '.' uid
2142
+ ;
2143
+
2144
+ // Literals
2145
+
2146
+ decimalLiteral
2147
+ : DECIMAL_LITERAL
2148
+ | ZERO_DECIMAL
2149
+ | ONE_DECIMAL
2150
+ | TWO_DECIMAL
2151
+ | REAL_LITERAL
2152
+ ;
2153
+
2154
+ fileSizeLiteral
2155
+ : FILESIZE_LITERAL
2156
+ | decimalLiteral
2157
+ ;
2158
+
2159
+ stringLiteral
2160
+ : (STRING_CHARSET_NAME? STRING_LITERAL | START_NATIONAL_STRING_LITERAL) STRING_LITERAL+
2161
+ | (STRING_CHARSET_NAME? STRING_LITERAL | START_NATIONAL_STRING_LITERAL) (COLLATE collationName)?
2162
+ ;
2163
+
2164
+ booleanLiteral
2165
+ : TRUE
2166
+ | FALSE
2167
+ ;
2168
+
2169
+ hexadecimalLiteral
2170
+ : STRING_CHARSET_NAME? HEXADECIMAL_LITERAL
2171
+ ;
2172
+
2173
+ nullNotnull
2174
+ : NOT? (NULL_LITERAL | NULL_SPEC_LITERAL)
2175
+ ;
2176
+
2177
+ constant
2178
+ : stringLiteral
2179
+ | decimalLiteral
2180
+ | '-' decimalLiteral
2181
+ | hexadecimalLiteral
2182
+ | booleanLiteral
2183
+ | REAL_LITERAL
2184
+ | BIT_STRING
2185
+ | NOT? nullLiteral = (NULL_LITERAL | NULL_SPEC_LITERAL)
2186
+ ;
2187
+
2188
+ // Data Types
2189
+
2190
+ dataType
2191
+ : typeName = (
2192
+ CHAR
2193
+ | CHARACTER
2194
+ | VARCHAR
2195
+ | TINYTEXT
2196
+ | TEXT
2197
+ | MEDIUMTEXT
2198
+ | LONGTEXT
2199
+ | NCHAR
2200
+ | NVARCHAR
2201
+ | LONG
2202
+ ) VARYING? lengthOneDimension? BINARY? (charSet charsetName)? (COLLATE collationName | BINARY)? # stringDataType
2203
+ | NATIONAL typeName = (CHAR | CHARACTER) VARYING lengthOneDimension? BINARY? # nationalVaryingStringDataType
2204
+ | NATIONAL typeName = (VARCHAR | CHARACTER | CHAR) lengthOneDimension? BINARY? # nationalStringDataType
2205
+ | NCHAR typeName = VARCHAR lengthOneDimension? BINARY? # nationalStringDataType
2206
+ | typeName = (
2207
+ TINYINT
2208
+ | SMALLINT
2209
+ | MEDIUMINT
2210
+ | INT
2211
+ | INTEGER
2212
+ | BIGINT
2213
+ | MIDDLEINT
2214
+ | INT1
2215
+ | INT2
2216
+ | INT3
2217
+ | INT4
2218
+ | INT8
2219
+ ) lengthOneDimension? (SIGNED | UNSIGNED | ZEROFILL)* # dimensionDataType
2220
+ | typeName = REAL lengthTwoDimension? (SIGNED | UNSIGNED | ZEROFILL)* # dimensionDataType
2221
+ | typeName = DOUBLE PRECISION? lengthTwoDimension? (SIGNED | UNSIGNED | ZEROFILL)* # dimensionDataType
2222
+ | typeName = (DECIMAL | DEC | FIXED | NUMERIC | FLOAT | FLOAT4 | FLOAT8) lengthTwoOptionalDimension? (
2223
+ SIGNED
2224
+ | UNSIGNED
2225
+ | ZEROFILL
2226
+ )* # dimensionDataType
2227
+ | typeName = (DATE | TINYBLOB | MEDIUMBLOB | LONGBLOB | BOOL | BOOLEAN | SERIAL) # simpleDataType
2228
+ | typeName = (BIT | TIME | TIMESTAMP | DATETIME | BINARY | VARBINARY | BLOB | YEAR) lengthOneDimension? # dimensionDataType
2229
+ | typeName = (ENUM | SET) collectionOptions BINARY? (charSet charsetName)? # collectionDataType
2230
+ | typeName = (
2231
+ GEOMETRYCOLLECTION
2232
+ | GEOMCOLLECTION
2233
+ | LINESTRING
2234
+ | MULTILINESTRING
2235
+ | MULTIPOINT
2236
+ | MULTIPOLYGON
2237
+ | POINT
2238
+ | POLYGON
2239
+ | JSON
2240
+ | GEOMETRY
2241
+ ) (SRID decimalLiteral)? # spatialDataType
2242
+ | typeName = LONG VARCHAR? BINARY? (charSet charsetName)? (COLLATE collationName)? # longVarcharDataType // LONG VARCHAR is the same as LONG
2243
+ | LONG VARBINARY # longVarbinaryDataType
2244
+ ;
2245
+
2246
+ collectionOptions
2247
+ : '(' STRING_LITERAL (',' STRING_LITERAL)* ')'
2248
+ ;
2249
+
2250
+ convertedDataType
2251
+ : (
2252
+ typeName = (BINARY | NCHAR | FLOAT) lengthOneDimension?
2253
+ | typeName = CHAR lengthOneDimension? (charSet charsetName)?
2254
+ | typeName = (DATE | DATETIME | TIME | YEAR | JSON | INT | INTEGER | DOUBLE)
2255
+ | typeName = (DECIMAL | DEC) lengthTwoOptionalDimension?
2256
+ | (SIGNED | UNSIGNED) (INTEGER | INT)?
2257
+ ) ARRAY?
2258
+ ;
2259
+
2260
+ lengthOneDimension
2261
+ : '(' decimalLiteral ')'
2262
+ ;
2263
+
2264
+ lengthTwoDimension
2265
+ : '(' decimalLiteral ',' decimalLiteral ')'
2266
+ ;
2267
+
2268
+ lengthTwoOptionalDimension
2269
+ : '(' decimalLiteral (',' decimalLiteral)? ')'
2270
+ ;
2271
+
2272
+ // Common Lists
2273
+
2274
+ uidList
2275
+ : uid (',' uid)*
2276
+ ;
2277
+
2278
+ fullColumnNameList
2279
+ : fullColumnName (',' fullColumnName)*
2280
+ ;
2281
+
2282
+ tables
2283
+ : tableName (',' tableName)*
2284
+ ;
2285
+
2286
+ indexColumnNames
2287
+ : '(' indexColumnName (',' indexColumnName)* ')'
2288
+ ;
2289
+
2290
+ expressions
2291
+ : expression (',' expression)*
2292
+ ;
2293
+
2294
+ expressionsWithDefaults
2295
+ : expressionOrDefault (',' expressionOrDefault)*
2296
+ ;
2297
+
2298
+ constants
2299
+ : constant (',' constant)*
2300
+ ;
2301
+
2302
+ simpleStrings
2303
+ : STRING_LITERAL (',' STRING_LITERAL)*
2304
+ ;
2305
+
2306
+ userVariables
2307
+ : LOCAL_ID (',' LOCAL_ID)*
2308
+ ;
2309
+
2310
+ // Common Expressons
2311
+
2312
+ defaultValue
2313
+ : NULL_LITERAL
2314
+ | CAST '(' expression AS convertedDataType ')'
2315
+ | unaryOperator? constant
2316
+ | currentTimestamp (ON UPDATE currentTimestamp)?
2317
+ | '(' expression ')'
2318
+ | '(' fullId ')'
2319
+ ;
2320
+
2321
+ currentTimestamp
2322
+ : (
2323
+ (CURRENT_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP) ('(' decimalLiteral? ')')?
2324
+ | NOW '(' decimalLiteral? ')'
2325
+ )
2326
+ ;
2327
+
2328
+ expressionOrDefault
2329
+ : expression
2330
+ | DEFAULT
2331
+ ;
2332
+
2333
+ ifExists
2334
+ : IF EXISTS
2335
+ ;
2336
+
2337
+ ifNotExists
2338
+ : IF NOT EXISTS
2339
+ ;
2340
+
2341
+ orReplace
2342
+ : OR REPLACE
2343
+ ;
2344
+
2345
+ waitNowaitClause
2346
+ : WAIT decimalLiteral
2347
+ | NOWAIT
2348
+ ;
2349
+
2350
+ // Functions
2351
+
2352
+ functionCall
2353
+ : specificFunction # specificFunctionCall
2354
+ | aggregateWindowedFunction # aggregateFunctionCall
2355
+ | nonAggregateWindowedFunction # nonAggregateFunctionCall
2356
+ | scalarFunctionName '(' functionArgs? ')' # scalarFunctionCall
2357
+ | fullId '(' functionArgs? ')' # udfFunctionCall
2358
+ | passwordFunctionClause # passwordFunctionCall
2359
+ ;
2360
+
2361
+ specificFunction
2362
+ : (CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP | LOCALTIME | UTC_TIMESTAMP | SCHEMA) (
2363
+ '(' ')'
2364
+ )? # simpleFunctionCall
2365
+ | currentUserExpression # currentUser
2366
+ | CONVERT '(' expression separator = ',' convertedDataType ')' # dataTypeFunctionCall
2367
+ | CONVERT '(' expression USING charsetName ')' # dataTypeFunctionCall
2368
+ | CAST '(' expression AS convertedDataType ')' # dataTypeFunctionCall
2369
+ | VALUES '(' fullColumnName ')' # valuesFunctionCall
2370
+ | CASE expression caseFuncAlternative+ (ELSE elseArg = functionArg)? END # caseExpressionFunctionCall
2371
+ | CASE caseFuncAlternative+ (ELSE elseArg = functionArg)? END # caseFunctionCall
2372
+ | CHAR '(' functionArgs (USING charsetName)? ')' # charFunctionCall
2373
+ | POSITION '(' (positionString = stringLiteral | positionExpression = expression) IN (
2374
+ inString = stringLiteral
2375
+ | inExpression = expression
2376
+ ) ')' # positionFunctionCall
2377
+ | (SUBSTR | SUBSTRING) '(' (sourceString = stringLiteral | sourceExpression = expression) FROM (
2378
+ fromDecimal = decimalLiteral
2379
+ | fromExpression = expression
2380
+ ) (FOR ( forDecimal = decimalLiteral | forExpression = expression))? ')' # substrFunctionCall
2381
+ | TRIM '(' positioinForm = (BOTH | LEADING | TRAILING) (
2382
+ sourceString = stringLiteral
2383
+ | sourceExpression = expression
2384
+ )? FROM (fromString = stringLiteral | fromExpression = expression) ')' # trimFunctionCall
2385
+ | TRIM '(' (sourceString = stringLiteral | sourceExpression = expression) FROM (
2386
+ fromString = stringLiteral
2387
+ | fromExpression = expression
2388
+ ) ')' # trimFunctionCall
2389
+ | WEIGHT_STRING '(' (stringLiteral | expression) (
2390
+ AS stringFormat = (CHAR | BINARY) '(' decimalLiteral ')'
2391
+ )? levelsInWeightString? ')' # weightFunctionCall
2392
+ | EXTRACT '(' intervalType FROM (sourceString = stringLiteral | sourceExpression = expression) ')' # extractFunctionCall
2393
+ | GET_FORMAT '(' datetimeFormat = (DATE | TIME | DATETIME) ',' stringLiteral ')' # getFormatFunctionCall
2394
+ | JSON_VALUE '(' expression ',' expression (RETURNING convertedDataType)? jsonOnEmpty? jsonOnError? ')' # jsonValueFunctionCall
2395
+ ;
2396
+
2397
+ caseFuncAlternative
2398
+ : WHEN condition = functionArg THEN consequent = functionArg
2399
+ ;
2400
+
2401
+ levelsInWeightString
2402
+ : LEVEL levelInWeightListElement (',' levelInWeightListElement)* # levelWeightList
2403
+ | LEVEL firstLevel = decimalLiteral '-' lastLevel = decimalLiteral # levelWeightRange
2404
+ ;
2405
+
2406
+ levelInWeightListElement
2407
+ : decimalLiteral orderType = (ASC | DESC | REVERSE)?
2408
+ ;
2409
+
2410
+ aggregateWindowedFunction
2411
+ : (AVG | MAX | MIN | SUM) '(' aggregator = (ALL | DISTINCT)? functionArg ')' overClause?
2412
+ | COUNT '(' (
2413
+ starArg = '*'
2414
+ | aggregator = ALL? functionArg
2415
+ | aggregator = DISTINCT functionArgs
2416
+ ) ')' overClause?
2417
+ | (
2418
+ BIT_AND
2419
+ | BIT_OR
2420
+ | BIT_XOR
2421
+ | STD
2422
+ | STDDEV
2423
+ | STDDEV_POP
2424
+ | STDDEV_SAMP
2425
+ | VAR_POP
2426
+ | VAR_SAMP
2427
+ | VARIANCE
2428
+ ) '(' aggregator = ALL? functionArg ')' overClause?
2429
+ | GROUP_CONCAT '(' aggregator = DISTINCT? functionArgs (
2430
+ ORDER BY orderByExpression (',' orderByExpression)*
2431
+ )? (SEPARATOR separator = STRING_LITERAL)? ')'
2432
+ ;
2433
+
2434
+ nonAggregateWindowedFunction
2435
+ : (LAG | LEAD) '(' expression (',' decimalLiteral)? (',' decimalLiteral)? ')' overClause
2436
+ | (FIRST_VALUE | LAST_VALUE) '(' expression ')' overClause
2437
+ | (CUME_DIST | DENSE_RANK | PERCENT_RANK | RANK | ROW_NUMBER) '(' ')' overClause
2438
+ | NTH_VALUE '(' expression ',' decimalLiteral ')' overClause
2439
+ | NTILE '(' decimalLiteral ')' overClause
2440
+ ;
2441
+
2442
+ overClause
2443
+ : OVER ('(' windowSpec ')' | windowName)
2444
+ ;
2445
+
2446
+ windowSpec
2447
+ : windowName? partitionClause? orderByClause? frameClause?
2448
+ ;
2449
+
2450
+ windowName
2451
+ : uid
2452
+ ;
2453
+
2454
+ frameClause
2455
+ : frameUnits frameExtent
2456
+ ;
2457
+
2458
+ frameUnits
2459
+ : ROWS
2460
+ | RANGE
2461
+ ;
2462
+
2463
+ frameExtent
2464
+ : frameRange
2465
+ | frameBetween
2466
+ ;
2467
+
2468
+ frameBetween
2469
+ : BETWEEN frameRange AND frameRange
2470
+ ;
2471
+
2472
+ frameRange
2473
+ : CURRENT ROW
2474
+ | UNBOUNDED (PRECEDING | FOLLOWING)
2475
+ | expression (PRECEDING | FOLLOWING)
2476
+ ;
2477
+
2478
+ partitionClause
2479
+ : PARTITION BY expression (',' expression)*
2480
+ ;
2481
+
2482
+ scalarFunctionName
2483
+ : functionNameBase
2484
+ | ASCII
2485
+ | CURDATE
2486
+ | CURRENT_DATE
2487
+ | CURRENT_TIME
2488
+ | CURRENT_TIMESTAMP
2489
+ | CURTIME
2490
+ | DATE_ADD
2491
+ | DATE_SUB
2492
+ | IF
2493
+ | INSERT
2494
+ | LOCALTIME
2495
+ | LOCALTIMESTAMP
2496
+ | MID
2497
+ | NOW
2498
+ | REPEAT
2499
+ | REPLACE
2500
+ | SUBSTR
2501
+ | SUBSTRING
2502
+ | SYSDATE
2503
+ | TRIM
2504
+ | UTC_DATE
2505
+ | UTC_TIME
2506
+ | UTC_TIMESTAMP
2507
+ ;
2508
+
2509
+ passwordFunctionClause
2510
+ : functionName = (PASSWORD | OLD_PASSWORD) '(' functionArg ')'
2511
+ ;
2512
+
2513
+ functionArgs
2514
+ : (constant | fullColumnName | functionCall | expression) (
2515
+ ',' (constant | fullColumnName | functionCall | expression)
2516
+ )*
2517
+ ;
2518
+
2519
+ functionArg
2520
+ : constant
2521
+ | fullColumnName
2522
+ | functionCall
2523
+ | expression
2524
+ ;
2525
+
2526
+ // Expressions, predicates
2527
+
2528
+ // Simplified approach for expression
2529
+ expression
2530
+ : notOperator = (NOT | '!') expression # notExpression
2531
+ | expression logicalOperator expression # logicalExpression
2532
+ | predicate IS NOT? testValue = (TRUE | FALSE | UNKNOWN) # isExpression
2533
+ | predicate # predicateExpression
2534
+ ;
2535
+
2536
+ predicate
2537
+ : predicate NOT? IN '(' (selectStatement | expressions) ')' # inPredicate
2538
+ | predicate IS nullNotnull # isNullPredicate
2539
+ | left = predicate comparisonOperator right = predicate # binaryComparisonPredicate
2540
+ | predicate comparisonOperator quantifier = (ALL | ANY | SOME) '(' selectStatement ')' # subqueryComparisonPredicate
2541
+ | predicate NOT? BETWEEN predicate AND predicate # betweenPredicate
2542
+ | predicate SOUNDS LIKE predicate # soundsLikePredicate
2543
+ | predicate NOT? LIKE predicate (ESCAPE STRING_LITERAL)? # likePredicate
2544
+ | predicate NOT? regex = (REGEXP | RLIKE) predicate # regexpPredicate
2545
+ | predicate MEMBER OF '(' predicate ')' # jsonMemberOfPredicate
2546
+ | expressionAtom # expressionAtomPredicate
2547
+ ;
2548
+
2549
+ // Add in ASTVisitor nullNotnull in constant
2550
+ expressionAtom
2551
+ : constant # constantExpressionAtom
2552
+ | fullColumnName # fullColumnNameExpressionAtom
2553
+ | functionCall # functionCallExpressionAtom
2554
+ | expressionAtom COLLATE collationName # collateExpressionAtom
2555
+ | mysqlVariable # mysqlVariableExpressionAtom
2556
+ | unaryOperator expressionAtom # unaryExpressionAtom
2557
+ | BINARY expressionAtom # binaryExpressionAtom
2558
+ | LOCAL_ID VAR_ASSIGN expressionAtom # variableAssignExpressionAtom
2559
+ | '(' expression (',' expression)* ')' # nestedExpressionAtom
2560
+ | ROW '(' expression (',' expression)+ ')' # nestedRowExpressionAtom
2561
+ | EXISTS '(' selectStatement ')' # existsExpressionAtom
2562
+ | '(' selectStatement ')' # subqueryExpressionAtom
2563
+ | INTERVAL expression intervalType # intervalExpressionAtom
2564
+ | left = expressionAtom bitOperator right = expressionAtom # bitExpressionAtom
2565
+ | left = expressionAtom multOperator right = expressionAtom # mathExpressionAtom
2566
+ | left = expressionAtom addOperator right = expressionAtom # mathExpressionAtom
2567
+ | left = expressionAtom jsonOperator right = expressionAtom # jsonExpressionAtom
2568
+ ;
2569
+
2570
+ unaryOperator
2571
+ : '!'
2572
+ | '~'
2573
+ | '+'
2574
+ | '-'
2575
+ | NOT
2576
+ ;
2577
+
2578
+ comparisonOperator
2579
+ : '='
2580
+ | '>'
2581
+ | '<'
2582
+ | '<' '='
2583
+ | '>' '='
2584
+ | '<' '>'
2585
+ | '!' '='
2586
+ | '<' '=' '>'
2587
+ ;
2588
+
2589
+ logicalOperator
2590
+ : AND
2591
+ | '&' '&'
2592
+ | XOR
2593
+ | OR
2594
+ | '|' '|'
2595
+ ;
2596
+
2597
+ bitOperator
2598
+ : '<' '<'
2599
+ | '>' '>'
2600
+ | '&'
2601
+ | '^'
2602
+ | '|'
2603
+ ;
2604
+
2605
+ multOperator
2606
+ : '*'
2607
+ | '/'
2608
+ | '%'
2609
+ | DIV
2610
+ | MOD
2611
+ ;
2612
+
2613
+ addOperator
2614
+ : '+'
2615
+ | '-'
2616
+ ;
2617
+
2618
+ jsonOperator
2619
+ : '-' '>'
2620
+ | '-' '>' '>'
2621
+ ;
2622
+
2623
+ // Simple id sets
2624
+ // (that keyword, which can be id)
2625
+
2626
+ charsetNameBase
2627
+ : ARMSCII8
2628
+ | ASCII
2629
+ | BIG5
2630
+ | BINARY
2631
+ | CP1250
2632
+ | CP1251
2633
+ | CP1256
2634
+ | CP1257
2635
+ | CP850
2636
+ | CP852
2637
+ | CP866
2638
+ | CP932
2639
+ | DEC8
2640
+ | EUCJPMS
2641
+ | EUCKR
2642
+ | GB18030
2643
+ | GB2312
2644
+ | GBK
2645
+ | GEOSTD8
2646
+ | GREEK
2647
+ | HEBREW
2648
+ | HP8
2649
+ | KEYBCS2
2650
+ | KOI8R
2651
+ | KOI8U
2652
+ | LATIN1
2653
+ | LATIN2
2654
+ | LATIN5
2655
+ | LATIN7
2656
+ | MACCE
2657
+ | MACROMAN
2658
+ | SJIS
2659
+ | SWE7
2660
+ | TIS620
2661
+ | UCS2
2662
+ | UJIS
2663
+ | UTF16
2664
+ | UTF16LE
2665
+ | UTF32
2666
+ | UTF8
2667
+ | UTF8MB3
2668
+ | UTF8MB4
2669
+ ;
2670
+
2671
+ transactionLevelBase
2672
+ : REPEATABLE
2673
+ | COMMITTED
2674
+ | UNCOMMITTED
2675
+ | SERIALIZABLE
2676
+ ;
2677
+
2678
+ privilegesBase
2679
+ : TABLES
2680
+ | ROUTINE
2681
+ | EXECUTE
2682
+ | FILE
2683
+ | PROCESS
2684
+ | RELOAD
2685
+ | SHUTDOWN
2686
+ | SUPER
2687
+ | PRIVILEGES
2688
+ ;
2689
+
2690
+ intervalTypeBase
2691
+ : QUARTER
2692
+ | MONTH
2693
+ | DAY
2694
+ | HOUR
2695
+ | MINUTE
2696
+ | WEEK
2697
+ | SECOND
2698
+ | MICROSECOND
2699
+ ;
2700
+
2701
+ dataTypeBase
2702
+ : DATE
2703
+ | TIME
2704
+ | TIMESTAMP
2705
+ | DATETIME
2706
+ | YEAR
2707
+ | ENUM
2708
+ | TEXT
2709
+ ;
2710
+
2711
+ keywordsCanBeId
2712
+ : ACCOUNT
2713
+ | ACTION
2714
+ | ADMIN
2715
+ | AFTER
2716
+ | AGGREGATE
2717
+ | ALGORITHM
2718
+ | ANY
2719
+ | ARRAY
2720
+ | AT
2721
+ | AUDIT_ADMIN
2722
+ | AUDIT_ABORT_EXEMPT
2723
+ | AUTHORS
2724
+ | AUTOCOMMIT
2725
+ | AUTOEXTEND_SIZE
2726
+ | AUTO_INCREMENT
2727
+ | AUTHENTICATION_POLICY_ADMIN
2728
+ | AVG
2729
+ | AVG_ROW_LENGTH
2730
+ | ATTRIBUTE
2731
+ | BACKUP_ADMIN
2732
+ | BEGIN
2733
+ | BINLOG
2734
+ | BINLOG_ADMIN
2735
+ | BINLOG_ENCRYPTION_ADMIN
2736
+ | BIT
2737
+ | BIT_AND
2738
+ | BIT_OR
2739
+ | BIT_XOR
2740
+ | BLOCK
2741
+ | BOOL
2742
+ | BOOLEAN
2743
+ | BTREE
2744
+ | BUCKETS
2745
+ | CACHE
2746
+ | CASCADED
2747
+ | CHAIN
2748
+ | CHANGED
2749
+ | CHANNEL
2750
+ | CHECKSUM
2751
+ | PAGE_CHECKSUM
2752
+ | CATALOG_NAME
2753
+ | CIPHER
2754
+ | CLASS_ORIGIN
2755
+ | CLIENT
2756
+ | CLONE_ADMIN
2757
+ | CLOSE
2758
+ | CLUSTERING
2759
+ | COALESCE
2760
+ | CODE
2761
+ | COLUMNS
2762
+ | COLUMN_FORMAT
2763
+ | COLUMN_NAME
2764
+ | COMMENT
2765
+ | COMMIT
2766
+ | COMPACT
2767
+ | COMPLETION
2768
+ | COMPRESSED
2769
+ | COMPRESSION
2770
+ | CONCURRENT
2771
+ | CONDITION
2772
+ | CONNECT
2773
+ | CONNECTION
2774
+ | CONNECTION_ADMIN
2775
+ | CONSISTENT
2776
+ | CONSTRAINT_CATALOG
2777
+ | CONSTRAINT_NAME
2778
+ | CONSTRAINT_SCHEMA
2779
+ | CONTAINS
2780
+ | CONTEXT
2781
+ | CONTRIBUTORS
2782
+ | COPY
2783
+ | COUNT
2784
+ | CPU
2785
+ | CURRENT
2786
+ | CURRENT_USER
2787
+ | CURSOR_NAME
2788
+ | DATA
2789
+ | DATAFILE
2790
+ | DEALLOCATE
2791
+ | DEFAULT
2792
+ | DEFAULT_AUTH
2793
+ | DEFINER
2794
+ | DELAY_KEY_WRITE
2795
+ | DES_KEY_FILE
2796
+ | DIAGNOSTICS
2797
+ | DIRECTORY
2798
+ | DISABLE
2799
+ | DISCARD
2800
+ | DISK
2801
+ | DO
2802
+ | DUMPFILE
2803
+ | DUPLICATE
2804
+ | DYNAMIC
2805
+ | EMPTY
2806
+ | ENABLE
2807
+ | ENCRYPTION
2808
+ | ENCRYPTION_KEY_ADMIN
2809
+ | END
2810
+ | ENDS
2811
+ | ENGINE
2812
+ | ENGINE_ATTRIBUTE
2813
+ | ENGINES
2814
+ | ENFORCED
2815
+ | ERROR
2816
+ | ERRORS
2817
+ | ESCAPE
2818
+ | EUR
2819
+ | EVEN
2820
+ | EVENT
2821
+ | EVENTS
2822
+ | EVERY
2823
+ | EXCEPT
2824
+ | EXCHANGE
2825
+ | EXCLUSIVE
2826
+ | EXPIRE
2827
+ | EXPORT
2828
+ | EXTENDED
2829
+ | EXTENT_SIZE
2830
+ | FAILED_LOGIN_ATTEMPTS
2831
+ | FAST
2832
+ | FAULTS
2833
+ | FIELDS
2834
+ | FILE_BLOCK_SIZE
2835
+ | FILTER
2836
+ | FIREWALL_ADMIN
2837
+ | FIREWALL_EXEMPT
2838
+ | FIREWALL_USER
2839
+ | FIRST
2840
+ | FIXED
2841
+ | FLUSH
2842
+ | FOLLOWS
2843
+ | FOUND
2844
+ | FULL
2845
+ | FUNCTION
2846
+ | GENERAL
2847
+ | GLOBAL
2848
+ | GRANTS
2849
+ | GROUP
2850
+ | GROUP_CONCAT
2851
+ | GROUP_REPLICATION
2852
+ | GROUP_REPLICATION_ADMIN
2853
+ | HANDLER
2854
+ | HASH
2855
+ | HELP
2856
+ | HISTORY
2857
+ | HOST
2858
+ | HOSTS
2859
+ | IDENTIFIED
2860
+ | IGNORED
2861
+ | IGNORE_SERVER_IDS
2862
+ | IMPORT
2863
+ | INDEXES
2864
+ | INITIAL_SIZE
2865
+ | INNODB_REDO_LOG_ARCHIVE
2866
+ | INPLACE
2867
+ | INSERT_METHOD
2868
+ | INSTALL
2869
+ | INSTANCE
2870
+ | INSTANT
2871
+ | INTERNAL
2872
+ | INVOKE
2873
+ | INVOKER
2874
+ | IO
2875
+ | IO_THREAD
2876
+ | IPC
2877
+ | ISO
2878
+ | ISOLATION
2879
+ | ISSUER
2880
+ | JIS
2881
+ | JSON
2882
+ | KEY_BLOCK_SIZE
2883
+ | LAMBDA
2884
+ | LANGUAGE
2885
+ | LAST
2886
+ | LATERAL
2887
+ | LEAVES
2888
+ | LESS
2889
+ | LEVEL
2890
+ | LIST
2891
+ | LOCAL
2892
+ | LOGFILE
2893
+ | LOGS
2894
+ | MASTER
2895
+ | MASTER_AUTO_POSITION
2896
+ | MASTER_CONNECT_RETRY
2897
+ | MASTER_DELAY
2898
+ | MASTER_HEARTBEAT_PERIOD
2899
+ | MASTER_HOST
2900
+ | MASTER_LOG_FILE
2901
+ | MASTER_LOG_POS
2902
+ | MASTER_PASSWORD
2903
+ | MASTER_PORT
2904
+ | MASTER_RETRY_COUNT
2905
+ | MASTER_SSL
2906
+ | MASTER_SSL_CA
2907
+ | MASTER_SSL_CAPATH
2908
+ | MASTER_SSL_CERT
2909
+ | MASTER_SSL_CIPHER
2910
+ | MASTER_SSL_CRL
2911
+ | MASTER_SSL_CRLPATH
2912
+ | MASTER_SSL_KEY
2913
+ | MASTER_TLS_VERSION
2914
+ | MASTER_USER
2915
+ | MAX_CONNECTIONS_PER_HOUR
2916
+ | MAX_QUERIES_PER_HOUR
2917
+ | MAX
2918
+ | MAX_ROWS
2919
+ | MAX_SIZE
2920
+ | MAX_UPDATES_PER_HOUR
2921
+ | MAX_USER_CONNECTIONS
2922
+ | MEDIUM
2923
+ | MEMBER
2924
+ | MEMORY
2925
+ | MERGE
2926
+ | MESSAGE_TEXT
2927
+ | MID
2928
+ | MIGRATE
2929
+ | MIN
2930
+ | MIN_ROWS
2931
+ | MODE
2932
+ | MODIFY
2933
+ | MUTEX
2934
+ | MYSQL
2935
+ | MYSQL_ERRNO
2936
+ | NAME
2937
+ | NAMES
2938
+ | NCHAR
2939
+ | NDB_STORED_USER
2940
+ | NESTED
2941
+ | NEVER
2942
+ | NEXT
2943
+ | NO
2944
+ | NOCOPY
2945
+ | NODEGROUP
2946
+ | NONE
2947
+ | NOWAIT
2948
+ | NUMBER
2949
+ | ODBC
2950
+ | OFFLINE
2951
+ | OFFSET
2952
+ | OF
2953
+ | OJ
2954
+ | OLD_PASSWORD
2955
+ | ONE
2956
+ | ONLINE
2957
+ | ONLY
2958
+ | OPEN
2959
+ | OPTIMIZER_COSTS
2960
+ | OPTIONAL
2961
+ | OPTIONS
2962
+ | ORDER
2963
+ | ORDINALITY
2964
+ | OWNER
2965
+ | PACK_KEYS
2966
+ | PAGE
2967
+ | PARSER
2968
+ | PARTIAL
2969
+ | PARTITIONING
2970
+ | PARTITIONS
2971
+ | PASSWORD
2972
+ | PASSWORDLESS_USER_ADMIN
2973
+ | PASSWORD_LOCK_TIME
2974
+ | PATH
2975
+ | PERSIST_RO_VARIABLES_ADMIN
2976
+ | PHASE
2977
+ | PLUGINS
2978
+ | PLUGIN_DIR
2979
+ | PLUGIN
2980
+ | PORT
2981
+ | PRECEDES
2982
+ | PREPARE
2983
+ | PRESERVE
2984
+ | PREV
2985
+ | PRIMARY
2986
+ | PROCESSLIST
2987
+ | PROFILE
2988
+ | PROFILES
2989
+ | PROXY
2990
+ | QUERY
2991
+ | QUICK
2992
+ | REBUILD
2993
+ | RECOVER
2994
+ | RECURSIVE
2995
+ | REDO_BUFFER_SIZE
2996
+ | REDUNDANT
2997
+ | RELAY
2998
+ | RELAYLOG
2999
+ | RELAY_LOG_FILE
3000
+ | RELAY_LOG_POS
3001
+ | REMOVE
3002
+ | REORGANIZE
3003
+ | REPAIR
3004
+ | REPLICATE_DO_DB
3005
+ | REPLICATE_DO_TABLE
3006
+ | REPLICATE_IGNORE_DB
3007
+ | REPLICATE_IGNORE_TABLE
3008
+ | REPLICATE_REWRITE_DB
3009
+ | REPLICATE_WILD_DO_TABLE
3010
+ | REPLICATE_WILD_IGNORE_TABLE
3011
+ | REPLICATION
3012
+ | REPLICATION_APPLIER
3013
+ | REPLICATION_SLAVE_ADMIN
3014
+ | RESET
3015
+ | RESOURCE_GROUP_ADMIN
3016
+ | RESOURCE_GROUP_USER
3017
+ | RESUME
3018
+ | RETURNED_SQLSTATE
3019
+ | RETURNS
3020
+ | REUSE
3021
+ | ROLE
3022
+ | ROLE_ADMIN
3023
+ | ROLLBACK
3024
+ | ROLLUP
3025
+ | ROTATE
3026
+ | ROW
3027
+ | ROWS
3028
+ | ROW_FORMAT
3029
+ | RTREE
3030
+ | S3
3031
+ | SAVEPOINT
3032
+ | SCHEDULE
3033
+ | SCHEMA_NAME
3034
+ | SECURITY
3035
+ | SECONDARY_ENGINE_ATTRIBUTE
3036
+ | SERIAL
3037
+ | SERVER
3038
+ | SESSION
3039
+ | SESSION_VARIABLES_ADMIN
3040
+ | SET_USER_ID
3041
+ | SHARE
3042
+ | SHARED
3043
+ | SHOW_ROUTINE
3044
+ | SIGNED
3045
+ | SIMPLE
3046
+ | SLAVE
3047
+ | SLOW
3048
+ | SKIP_QUERY_REWRITE
3049
+ | SNAPSHOT
3050
+ | SOCKET
3051
+ | SOME
3052
+ | SONAME
3053
+ | SOUNDS
3054
+ | SOURCE
3055
+ | SQL_AFTER_GTIDS
3056
+ | SQL_AFTER_MTS_GAPS
3057
+ | SQL_BEFORE_GTIDS
3058
+ | SQL_BUFFER_RESULT
3059
+ | SQL_CACHE
3060
+ | SQL_NO_CACHE
3061
+ | SQL_THREAD
3062
+ | STACKED
3063
+ | START
3064
+ | STARTS
3065
+ | STATS_AUTO_RECALC
3066
+ | STATS_PERSISTENT
3067
+ | STATS_SAMPLE_PAGES
3068
+ | STATUS
3069
+ | STD
3070
+ | STDDEV
3071
+ | STDDEV_POP
3072
+ | STDDEV_SAMP
3073
+ | STOP
3074
+ | STORAGE
3075
+ | STRING
3076
+ | SUBCLASS_ORIGIN
3077
+ | SUBJECT
3078
+ | SUBPARTITION
3079
+ | SUBPARTITIONS
3080
+ | SUM
3081
+ | SUSPEND
3082
+ | SWAPS
3083
+ | SWITCHES
3084
+ | SYSTEM_VARIABLES_ADMIN
3085
+ | TABLE_NAME
3086
+ | TABLESPACE
3087
+ | TABLE_ENCRYPTION_ADMIN
3088
+ | TABLE_TYPE
3089
+ | TEMPORARY
3090
+ | TEMPTABLE
3091
+ | THAN
3092
+ | TP_CONNECTION_ADMIN
3093
+ | TRADITIONAL
3094
+ | TRANSACTION
3095
+ | TRANSACTIONAL
3096
+ | TRIGGERS
3097
+ | TRUNCATE
3098
+ | UNBOUNDED
3099
+ | UNDEFINED
3100
+ | UNDOFILE
3101
+ | UNDO_BUFFER_SIZE
3102
+ | UNINSTALL
3103
+ | UNKNOWN
3104
+ | UNTIL
3105
+ | UPGRADE
3106
+ | USA
3107
+ | USER
3108
+ | USE_FRM
3109
+ | USER_RESOURCES
3110
+ | VALIDATION
3111
+ | VALUE
3112
+ | VAR_POP
3113
+ | VAR_SAMP
3114
+ | VARIABLES
3115
+ | VARIANCE
3116
+ | VERSION_TOKEN_ADMIN
3117
+ | VIEW
3118
+ | VIRTUAL
3119
+ | WAIT
3120
+ | WARNINGS
3121
+ | WITHOUT
3122
+ | WORK
3123
+ | WRAPPER
3124
+ | X509
3125
+ | XA
3126
+ | XA_RECOVER_ADMIN
3127
+ | XML
3128
+ ;
3129
+
3130
+ functionNameBase
3131
+ : ABS
3132
+ | ACOS
3133
+ | ADDDATE
3134
+ | ADDTIME
3135
+ | AES_DECRYPT
3136
+ | AES_ENCRYPT
3137
+ | AREA
3138
+ | ASBINARY
3139
+ | ASIN
3140
+ | ASTEXT
3141
+ | ASWKB
3142
+ | ASWKT
3143
+ | ASYMMETRIC_DECRYPT
3144
+ | ASYMMETRIC_DERIVE
3145
+ | ASYMMETRIC_ENCRYPT
3146
+ | ASYMMETRIC_SIGN
3147
+ | ASYMMETRIC_VERIFY
3148
+ | ATAN
3149
+ | ATAN2
3150
+ | BENCHMARK
3151
+ | BIN
3152
+ | BIT_COUNT
3153
+ | BIT_LENGTH
3154
+ | BUFFER
3155
+ | CEIL
3156
+ | CEILING
3157
+ | CENTROID
3158
+ | CHARACTER_LENGTH
3159
+ | CHARSET
3160
+ | CHAR_LENGTH
3161
+ | COERCIBILITY
3162
+ | COLLATION
3163
+ | COMPRESS
3164
+ | CONCAT
3165
+ | CONCAT_WS
3166
+ | CONNECTION_ID
3167
+ | CONV
3168
+ | CONVERT_TZ
3169
+ | COS
3170
+ | COT
3171
+ | COUNT
3172
+ | CRC32
3173
+ | CREATE_ASYMMETRIC_PRIV_KEY
3174
+ | CREATE_ASYMMETRIC_PUB_KEY
3175
+ | CREATE_DH_PARAMETERS
3176
+ | CREATE_DIGEST
3177
+ | CROSSES
3178
+ | CUME_DIST
3179
+ | DATABASE
3180
+ | DATE
3181
+ | DATEDIFF
3182
+ | DATE_FORMAT
3183
+ | DAY
3184
+ | DAYNAME
3185
+ | DAYOFMONTH
3186
+ | DAYOFWEEK
3187
+ | DAYOFYEAR
3188
+ | DECODE
3189
+ | DEGREES
3190
+ | DENSE_RANK
3191
+ | DES_DECRYPT
3192
+ | DES_ENCRYPT
3193
+ | DIMENSION
3194
+ | DISJOINT
3195
+ | ELT
3196
+ | ENCODE
3197
+ | ENCRYPT
3198
+ | ENDPOINT
3199
+ | ENVELOPE
3200
+ | EQUALS
3201
+ | EXP
3202
+ | EXPORT_SET
3203
+ | EXTERIORRING
3204
+ | EXTRACTVALUE
3205
+ | FIELD
3206
+ | FIND_IN_SET
3207
+ | FIRST_VALUE
3208
+ | FLOOR
3209
+ | FORMAT
3210
+ | FOUND_ROWS
3211
+ | FROM_BASE64
3212
+ | FROM_DAYS
3213
+ | FROM_UNIXTIME
3214
+ | GEOMCOLLFROMTEXT
3215
+ | GEOMCOLLFROMWKB
3216
+ | GEOMETRYCOLLECTION
3217
+ | GEOMETRYCOLLECTIONFROMTEXT
3218
+ | GEOMETRYCOLLECTIONFROMWKB
3219
+ | GEOMETRYFROMTEXT
3220
+ | GEOMETRYFROMWKB
3221
+ | GEOMETRYN
3222
+ | GEOMETRYTYPE
3223
+ | GEOMFROMTEXT
3224
+ | GEOMFROMWKB
3225
+ | GET_FORMAT
3226
+ | GET_LOCK
3227
+ | GLENGTH
3228
+ | GREATEST
3229
+ | GTID_SUBSET
3230
+ | GTID_SUBTRACT
3231
+ | HEX
3232
+ | HOUR
3233
+ | IFNULL
3234
+ | INET6_ATON
3235
+ | INET6_NTOA
3236
+ | INET_ATON
3237
+ | INET_NTOA
3238
+ | INSTR
3239
+ | INTERIORRINGN
3240
+ | INTERSECTS
3241
+ | INVISIBLE
3242
+ | ISCLOSED
3243
+ | ISEMPTY
3244
+ | ISNULL
3245
+ | ISSIMPLE
3246
+ | IS_FREE_LOCK
3247
+ | IS_IPV4
3248
+ | IS_IPV4_COMPAT
3249
+ | IS_IPV4_MAPPED
3250
+ | IS_IPV6
3251
+ | IS_USED_LOCK
3252
+ | LAG
3253
+ | LAST_INSERT_ID
3254
+ | LAST_VALUE
3255
+ | LCASE
3256
+ | LEAD
3257
+ | LEAST
3258
+ | LEFT
3259
+ | LENGTH
3260
+ | LINEFROMTEXT
3261
+ | LINEFROMWKB
3262
+ | LINESTRING
3263
+ | LINESTRINGFROMTEXT
3264
+ | LINESTRINGFROMWKB
3265
+ | LN
3266
+ | LOAD_FILE
3267
+ | LOCATE
3268
+ | LOG
3269
+ | LOG10
3270
+ | LOG2
3271
+ | LOWER
3272
+ | LPAD
3273
+ | LTRIM
3274
+ | MAKEDATE
3275
+ | MAKETIME
3276
+ | MAKE_SET
3277
+ | MASTER_POS_WAIT
3278
+ | MBRCONTAINS
3279
+ | MBRDISJOINT
3280
+ | MBREQUAL
3281
+ | MBRINTERSECTS
3282
+ | MBROVERLAPS
3283
+ | MBRTOUCHES
3284
+ | MBRWITHIN
3285
+ | MD5
3286
+ | MICROSECOND
3287
+ | MINUTE
3288
+ | MLINEFROMTEXT
3289
+ | MLINEFROMWKB
3290
+ | MOD
3291
+ | MONTH
3292
+ | MONTHNAME
3293
+ | MPOINTFROMTEXT
3294
+ | MPOINTFROMWKB
3295
+ | MPOLYFROMTEXT
3296
+ | MPOLYFROMWKB
3297
+ | MULTILINESTRING
3298
+ | MULTILINESTRINGFROMTEXT
3299
+ | MULTILINESTRINGFROMWKB
3300
+ | MULTIPOINT
3301
+ | MULTIPOINTFROMTEXT
3302
+ | MULTIPOINTFROMWKB
3303
+ | MULTIPOLYGON
3304
+ | MULTIPOLYGONFROMTEXT
3305
+ | MULTIPOLYGONFROMWKB
3306
+ | NAME_CONST
3307
+ | NTH_VALUE
3308
+ | NTILE
3309
+ | NULLIF
3310
+ | NUMGEOMETRIES
3311
+ | NUMINTERIORRINGS
3312
+ | NUMPOINTS
3313
+ | OCT
3314
+ | OCTET_LENGTH
3315
+ | ORD
3316
+ | OVERLAPS
3317
+ | PERCENT_RANK
3318
+ | PERIOD_ADD
3319
+ | PERIOD_DIFF
3320
+ | PI
3321
+ | POINT
3322
+ | POINTFROMTEXT
3323
+ | POINTFROMWKB
3324
+ | POINTN
3325
+ | POLYFROMTEXT
3326
+ | POLYFROMWKB
3327
+ | POLYGON
3328
+ | POLYGONFROMTEXT
3329
+ | POLYGONFROMWKB
3330
+ | POSITION
3331
+ | POW
3332
+ | POWER
3333
+ | QUARTER
3334
+ | QUOTE
3335
+ | RADIANS
3336
+ | RAND
3337
+ | RANDOM
3338
+ | RANK
3339
+ | RANDOM_BYTES
3340
+ | RELEASE_LOCK
3341
+ | REVERSE
3342
+ | RIGHT
3343
+ | ROUND
3344
+ | ROW_COUNT
3345
+ | ROW_NUMBER
3346
+ | RPAD
3347
+ | RTRIM
3348
+ | SCHEMA
3349
+ | SECOND
3350
+ | SEC_TO_TIME
3351
+ | SESSION_USER
3352
+ | SESSION_VARIABLES_ADMIN
3353
+ | SHA
3354
+ | SHA1
3355
+ | SHA2
3356
+ | SIGN
3357
+ | SIN
3358
+ | SLEEP
3359
+ | SOUNDEX
3360
+ | SQL_THREAD_WAIT_AFTER_GTIDS
3361
+ | SQRT
3362
+ | SRID
3363
+ | STARTPOINT
3364
+ | STRCMP
3365
+ | STR_TO_DATE
3366
+ | ST_AREA
3367
+ | ST_ASBINARY
3368
+ | ST_ASTEXT
3369
+ | ST_ASWKB
3370
+ | ST_ASWKT
3371
+ | ST_BUFFER
3372
+ | ST_CENTROID
3373
+ | ST_CONTAINS
3374
+ | ST_CROSSES
3375
+ | ST_DIFFERENCE
3376
+ | ST_DIMENSION
3377
+ | ST_DISJOINT
3378
+ | ST_DISTANCE
3379
+ | ST_ENDPOINT
3380
+ | ST_ENVELOPE
3381
+ | ST_EQUALS
3382
+ | ST_EXTERIORRING
3383
+ | ST_GEOMCOLLFROMTEXT
3384
+ | ST_GEOMCOLLFROMTXT
3385
+ | ST_GEOMCOLLFROMWKB
3386
+ | ST_GEOMETRYCOLLECTIONFROMTEXT
3387
+ | ST_GEOMETRYCOLLECTIONFROMWKB
3388
+ | ST_GEOMETRYFROMTEXT
3389
+ | ST_GEOMETRYFROMWKB
3390
+ | ST_GEOMETRYN
3391
+ | ST_GEOMETRYTYPE
3392
+ | ST_GEOMFROMTEXT
3393
+ | ST_GEOMFROMWKB
3394
+ | ST_INTERIORRINGN
3395
+ | ST_INTERSECTION
3396
+ | ST_INTERSECTS
3397
+ | ST_ISCLOSED
3398
+ | ST_ISEMPTY
3399
+ | ST_ISSIMPLE
3400
+ | ST_LINEFROMTEXT
3401
+ | ST_LINEFROMWKB
3402
+ | ST_LINESTRINGFROMTEXT
3403
+ | ST_LINESTRINGFROMWKB
3404
+ | ST_NUMGEOMETRIES
3405
+ | ST_NUMINTERIORRING
3406
+ | ST_NUMINTERIORRINGS
3407
+ | ST_NUMPOINTS
3408
+ | ST_OVERLAPS
3409
+ | ST_POINTFROMTEXT
3410
+ | ST_POINTFROMWKB
3411
+ | ST_POINTN
3412
+ | ST_POLYFROMTEXT
3413
+ | ST_POLYFROMWKB
3414
+ | ST_POLYGONFROMTEXT
3415
+ | ST_POLYGONFROMWKB
3416
+ | ST_SRID
3417
+ | ST_STARTPOINT
3418
+ | ST_SYMDIFFERENCE
3419
+ | ST_TOUCHES
3420
+ | ST_UNION
3421
+ | ST_WITHIN
3422
+ | ST_X
3423
+ | ST_Y
3424
+ | SUBDATE
3425
+ | SUBSTRING_INDEX
3426
+ | SUBTIME
3427
+ | SYSTEM_USER
3428
+ | TAN
3429
+ | TIME
3430
+ | TIMEDIFF
3431
+ | TIMESTAMP
3432
+ | TIMESTAMPADD
3433
+ | TIMESTAMPDIFF
3434
+ | TIME_FORMAT
3435
+ | TIME_TO_SEC
3436
+ | TOUCHES
3437
+ | TO_BASE64
3438
+ | TO_DAYS
3439
+ | TO_SECONDS
3440
+ | UCASE
3441
+ | UNCOMPRESS
3442
+ | UNCOMPRESSED_LENGTH
3443
+ | UNHEX
3444
+ | UNIX_TIMESTAMP
3445
+ | UPDATEXML
3446
+ | UPPER
3447
+ | UUID
3448
+ | UUID_SHORT
3449
+ | VALIDATE_PASSWORD_STRENGTH
3450
+ | VERSION
3451
+ | VISIBLE
3452
+ | WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS
3453
+ | WEEK
3454
+ | WEEKDAY
3455
+ | WEEKOFYEAR
3456
+ | WEIGHT_STRING
3457
+ | WITHIN
3458
+ | YEAR
3459
+ | YEARWEEK
3460
+ | Y_FUNCTION
3461
+ | X_FUNCTION
3462
+ | JSON_ARRAY
3463
+ | JSON_OBJECT
3464
+ | JSON_QUOTE
3465
+ | JSON_CONTAINS
3466
+ | JSON_CONTAINS_PATH
3467
+ | JSON_EXTRACT
3468
+ | JSON_KEYS
3469
+ | JSON_OVERLAPS
3470
+ | JSON_SEARCH
3471
+ | JSON_VALUE
3472
+ | JSON_ARRAY_APPEND
3473
+ | JSON_ARRAY_INSERT
3474
+ | JSON_INSERT
3475
+ | JSON_MERGE
3476
+ | JSON_MERGE_PATCH
3477
+ | JSON_MERGE_PRESERVE
3478
+ | JSON_REMOVE
3479
+ | JSON_REPLACE
3480
+ | JSON_SET
3481
+ | JSON_UNQUOTE
3482
+ | JSON_DEPTH
3483
+ | JSON_LENGTH
3484
+ | JSON_TYPE
3485
+ | JSON_VALID
3486
+ | JSON_TABLE
3487
+ | JSON_SCHEMA_VALID
3488
+ | JSON_SCHEMA_VALIDATION_REPORT
3489
+ | JSON_PRETTY
3490
+ | JSON_STORAGE_FREE
3491
+ | JSON_STORAGE_SIZE
3492
+ | JSON_ARRAYAGG
3493
+ | JSON_OBJECTAGG
3494
+ ;