github.com/unionj-cloud/go-doudou/v2@v2.3.5/toolkit/dbvendor/mysql/parser/grammar/MySqlParser.g4 (about) 1 // For more information please see https://github.com/antlr/grammars-v4/tree/master/sql/mysql/Positive-Technologies 2 3 parser grammar MySqlParser; 4 5 options { tokenVocab=MySqlLexer; } 6 7 8 // Top Level Description 9 10 root 11 : sqlStatements? MINUSMINUS? EOF 12 ; 13 14 sqlStatements 15 : (sqlStatement MINUSMINUS? SEMI? | emptyStatement)* 16 (sqlStatement (MINUSMINUS? SEMI)? | emptyStatement) 17 ; 18 19 sqlStatement 20 : ddlStatement | dmlStatement | transactionStatement 21 | replicationStatement | preparedStatement 22 | administrationStatement | utilityStatement 23 ; 24 25 emptyStatement 26 : SEMI 27 ; 28 29 ddlStatement 30 : createDatabase | createEvent | createIndex 31 | createLogfileGroup | createProcedure | createFunction 32 | createServer | createTable | createTablespaceInnodb 33 | createTablespaceNdb | createTrigger | createView 34 | alterDatabase | alterEvent | alterFunction 35 | alterInstance | alterLogfileGroup | alterProcedure 36 | alterServer | alterTable | alterTablespace | alterView 37 | dropDatabase | dropEvent | dropIndex 38 | dropLogfileGroup | dropProcedure | dropFunction 39 | dropServer | dropTable | dropTablespace 40 | dropTrigger | dropView 41 | renameTable | truncateTable 42 ; 43 44 dmlStatement 45 : selectStatement | insertStatement | updateStatement 46 | deleteStatement | replaceStatement | callStatement 47 | loadDataStatement | loadXmlStatement | doStatement 48 | handlerStatement 49 ; 50 51 transactionStatement 52 : startTransaction 53 | beginWork | commitWork | rollbackWork 54 | savepointStatement | rollbackStatement 55 | releaseStatement | lockTables | unlockTables 56 ; 57 58 replicationStatement 59 : changeMaster | changeReplicationFilter | purgeBinaryLogs 60 | resetMaster | resetSlave | startSlave | stopSlave 61 | startGroupReplication | stopGroupReplication 62 | xaStartTransaction | xaEndTransaction | xaPrepareStatement 63 | xaCommitWork | xaRollbackWork | xaRecoverWork 64 ; 65 66 preparedStatement 67 : prepareStatement | executeStatement | deallocatePrepare 68 ; 69 70 // remark: NOT INCLUDED IN sqlStatement, but include in body 71 // of routine's statements 72 compoundStatement 73 : blockStatement 74 | caseStatement | ifStatement | leaveStatement 75 | loopStatement | repeatStatement | whileStatement 76 | iterateStatement | returnStatement | cursorStatement 77 ; 78 79 administrationStatement 80 : alterUser | createUser | dropUser | grantStatement 81 | grantProxy | renameUser | revokeStatement 82 | revokeProxy | analyzeTable | checkTable 83 | checksumTable | optimizeTable | repairTable 84 | createUdfunction | installPlugin | uninstallPlugin 85 | setStatement | showStatement | binlogStatement 86 | cacheIndexStatement | flushStatement | killStatement 87 | loadIndexIntoCache | resetStatement 88 | shutdownStatement 89 ; 90 91 utilityStatement 92 : simpleDescribeStatement | fullDescribeStatement 93 | helpStatement | useStatement | signalStatement 94 | resignalStatement | diagnosticsStatement 95 ; 96 97 98 // Data Definition Language 99 100 // Create statements 101 102 createDatabase 103 : CREATE dbFormat=(DATABASE | SCHEMA) 104 ifNotExists? uid createDatabaseOption* 105 ; 106 107 createEvent 108 : CREATE ownerStatement? EVENT ifNotExists? fullId 109 ON SCHEDULE scheduleExpression 110 (ON COMPLETION NOT? PRESERVE)? enableType? 111 (COMMENT STRING_LITERAL)? 112 DO routineBody 113 ; 114 115 createIndex 116 : CREATE 117 intimeAction=(ONLINE | OFFLINE)? 118 indexCategory=(UNIQUE | FULLTEXT | SPATIAL)? 119 INDEX uid indexType? 120 ON tableName indexColumnNames 121 indexOption* 122 ( 123 ALGORITHM '='? algType=(DEFAULT | INPLACE | COPY) 124 | LOCK '='? 125 lockType=(DEFAULT | NONE | SHARED | EXCLUSIVE) 126 )* 127 ; 128 129 createLogfileGroup 130 : CREATE LOGFILE GROUP uid 131 ADD UNDOFILE undoFile=STRING_LITERAL 132 (INITIAL_SIZE '='? initSize=fileSizeLiteral)? 133 (UNDO_BUFFER_SIZE '='? undoSize=fileSizeLiteral)? 134 (REDO_BUFFER_SIZE '='? redoSize=fileSizeLiteral)? 135 (NODEGROUP '='? uid)? 136 WAIT? 137 (COMMENT '='? comment=STRING_LITERAL)? 138 ENGINE '='? engineName 139 ; 140 141 createProcedure 142 : CREATE ownerStatement? 143 PROCEDURE fullId 144 '(' procedureParameter? (',' procedureParameter)* ')' 145 routineOption* 146 routineBody 147 ; 148 149 createFunction 150 : CREATE ownerStatement? 151 FUNCTION fullId 152 '(' functionParameter? (',' functionParameter)* ')' 153 RETURNS dataType 154 routineOption* 155 (routineBody | returnStatement) 156 ; 157 158 createServer 159 : CREATE SERVER uid 160 FOREIGN DATA WRAPPER wrapperName=(MYSQL | STRING_LITERAL) 161 OPTIONS '(' serverOption (',' serverOption)* ')' 162 ; 163 164 createTable 165 : CREATE TEMPORARY? TABLE ifNotExists? 166 tableName 167 ( 168 LIKE tableName 169 | '(' LIKE parenthesisTable=tableName ')' 170 ) #copyCreateTable 171 | CREATE TEMPORARY? TABLE ifNotExists? 172 tableName createDefinitions? 173 ( tableOption (','? tableOption)* )? 174 partitionDefinitions? keyViolate=(IGNORE | REPLACE)? 175 AS? selectStatement #queryCreateTable 176 | CREATE TEMPORARY? TABLE ifNotExists? 177 tableName createDefinitions 178 ( tableOption (','? tableOption)* )? 179 partitionDefinitions? #columnCreateTable 180 ; 181 182 createTablespaceInnodb 183 : CREATE TABLESPACE uid 184 ADD DATAFILE datafile=STRING_LITERAL 185 (FILE_BLOCK_SIZE '=' fileBlockSize=fileSizeLiteral)? 186 (ENGINE '='? engineName)? 187 ; 188 189 createTablespaceNdb 190 : CREATE TABLESPACE uid 191 ADD DATAFILE datafile=STRING_LITERAL 192 USE LOGFILE GROUP uid 193 (EXTENT_SIZE '='? extentSize=fileSizeLiteral)? 194 (INITIAL_SIZE '='? initialSize=fileSizeLiteral)? 195 (AUTOEXTEND_SIZE '='? autoextendSize=fileSizeLiteral)? 196 (MAX_SIZE '='? maxSize=fileSizeLiteral)? 197 (NODEGROUP '='? uid)? 198 WAIT? 199 (COMMENT '='? comment=STRING_LITERAL)? 200 ENGINE '='? engineName 201 ; 202 203 createTrigger 204 : CREATE ownerStatement? 205 TRIGGER thisTrigger=fullId 206 triggerTime=(BEFORE | AFTER) 207 triggerEvent=(INSERT | UPDATE | DELETE) 208 ON tableName FOR EACH ROW 209 (triggerPlace=(FOLLOWS | PRECEDES) otherTrigger=fullId)? 210 routineBody 211 ; 212 213 createView 214 : CREATE (OR REPLACE)? 215 ( 216 ALGORITHM '=' algType=(UNDEFINED | MERGE | TEMPTABLE) 217 )? 218 ownerStatement? 219 (SQL SECURITY secContext=(DEFINER | INVOKER))? 220 VIEW fullId ('(' uidList ')')? AS selectStatement 221 (WITH checkOption=(CASCADED | LOCAL)? CHECK OPTION)? 222 ; 223 224 // details 225 226 createDatabaseOption 227 : defaultToken=DEFAULT? (CHARACTER SET | CHARSET) '='? (charsetName | charsetDefault=DEFAULT) 228 | defaultToken=DEFAULT? COLLATE '='? collationName 229 ; 230 231 ownerStatement 232 : DEFINER '=' (userName | CURRENT_USER ( '(' ')')?) 233 ; 234 235 scheduleExpression 236 : AT timestampValue intervalExpr* #preciseSchedule 237 | EVERY (decimalLiteral | expression) intervalType 238 ( 239 STARTS startTimestamp=timestampValue 240 (startIntervals+=intervalExpr)* 241 )? 242 ( 243 ENDS endTimestamp=timestampValue 244 (endIntervals+=intervalExpr)* 245 )? #intervalSchedule 246 ; 247 248 timestampValue 249 : CURRENT_TIMESTAMP 250 | stringLiteral 251 | decimalLiteral 252 | expression 253 ; 254 255 intervalExpr 256 : '+' INTERVAL (decimalLiteral | expression) intervalType 257 ; 258 259 intervalType 260 : intervalTypeBase 261 | YEAR | YEAR_MONTH | DAY_HOUR | DAY_MINUTE 262 | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND 263 | SECOND_MICROSECOND | MINUTE_MICROSECOND 264 | HOUR_MICROSECOND | DAY_MICROSECOND 265 ; 266 267 enableType 268 : ENABLE | DISABLE | DISABLE ON SLAVE 269 ; 270 271 indexType 272 : USING (BTREE | HASH) 273 ; 274 275 indexOption 276 : KEY_BLOCK_SIZE '='? fileSizeLiteral 277 | indexType 278 | WITH PARSER uid 279 | COMMENT STRING_LITERAL 280 | INVISIBLE 281 | VISIBLE 282 ; 283 284 procedureParameter 285 : direction=(IN | OUT | INOUT)? uid dataType 286 ; 287 288 functionParameter 289 : uid dataType 290 ; 291 292 routineOption 293 : COMMENT STRING_LITERAL #routineComment 294 | LANGUAGE SQL #routineLanguage 295 | NOT? DETERMINISTIC #routineBehavior 296 | ( 297 CONTAINS SQL | NO SQL | READS SQL DATA 298 | MODIFIES SQL DATA 299 ) #routineData 300 | SQL SECURITY context=(DEFINER | INVOKER) #routineSecurity 301 ; 302 303 serverOption 304 : HOST STRING_LITERAL 305 | DATABASE STRING_LITERAL 306 | USER STRING_LITERAL 307 | PASSWORD STRING_LITERAL 308 | SOCKET STRING_LITERAL 309 | OWNER STRING_LITERAL 310 | PORT decimalLiteral 311 ; 312 313 createDefinitions 314 : '(' createDefinition (',' createDefinition)* ')' 315 ; 316 317 createDefinition 318 : uid columnDefinition #columnDeclaration 319 | tableConstraint #constraintDeclaration 320 | indexColumnDefinition #indexDeclaration 321 ; 322 323 columnDefinition 324 : dataType columnConstraint* 325 ; 326 327 columnConstraint 328 : nullNotnull #nullColumnConstraint 329 | DEFAULT defaultValue #defaultColumnConstraint 330 | (AUTO_INCREMENT | ON UPDATE currentTimestamp) #autoIncrementColumnConstraint 331 | PRIMARY? KEY #primaryKeyColumnConstraint 332 | UNIQUE KEY? #uniqueKeyColumnConstraint 333 | COMMENT STRING_LITERAL #commentColumnConstraint 334 | COLUMN_FORMAT colformat=(FIXED | DYNAMIC | DEFAULT) #formatColumnConstraint 335 | STORAGE storageval=(DISK | MEMORY | DEFAULT) #storageColumnConstraint 336 | referenceDefinition #referenceColumnConstraint 337 | COLLATE collationName #collateColumnConstraint 338 | (GENERATED ALWAYS)? AS '(' expression ')' (VIRTUAL | STORED)? #generatedColumnConstraint 339 | SERIAL DEFAULT VALUE #serialDefaultColumnConstraint 340 | (CONSTRAINT name=uid?)? 341 CHECK '(' expression ')' #checkColumnConstraint 342 ; 343 344 tableConstraint 345 : (CONSTRAINT name=uid?)? 346 PRIMARY KEY index=uid? indexType? 347 indexColumnNames indexOption* #primaryKeyTableConstraint 348 | (CONSTRAINT name=uid?)? 349 UNIQUE indexFormat=(INDEX | KEY)? index=uid? 350 indexType? indexColumnNames indexOption* #uniqueKeyTableConstraint 351 | (CONSTRAINT name=uid?)? 352 FOREIGN KEY index=uid? indexColumnNames 353 referenceDefinition #foreignKeyTableConstraint 354 | (CONSTRAINT name=uid?)? 355 CHECK '(' expression ')' #checkTableConstraint 356 ; 357 358 referenceDefinition 359 : REFERENCES tableName indexColumnNames? 360 (MATCH matchType=(FULL | PARTIAL | SIMPLE))? 361 referenceAction? 362 ; 363 364 referenceAction 365 : ON DELETE onDelete=referenceControlType 366 ( 367 ON UPDATE onUpdate=referenceControlType 368 )? 369 | ON UPDATE onUpdate=referenceControlType 370 ( 371 ON DELETE onDelete=referenceControlType 372 )? 373 ; 374 375 referenceControlType 376 : RESTRICT | CASCADE | SET NULL_LITERAL | NO ACTION 377 ; 378 379 indexColumnDefinition 380 : indexFormat=(INDEX | KEY) uid? indexType? 381 indexColumnNames indexOption* #simpleIndexDeclaration 382 | (FULLTEXT | SPATIAL) 383 indexFormat=(INDEX | KEY)? uid? 384 indexColumnNames indexOption* #specialIndexDeclaration 385 ; 386 387 tableOption 388 : ENGINE '='? engineName #tableOptionEngine 389 | AUTO_INCREMENT '='? decimalLiteral #tableOptionAutoIncrement 390 | AVG_ROW_LENGTH '='? decimalLiteral #tableOptionAverage 391 | DEFAULT? (CHARACTER SET | CHARSET) '='? (charsetName|DEFAULT) #tableOptionCharset 392 | (CHECKSUM | PAGE_CHECKSUM) '='? boolValue=('0' | '1') #tableOptionChecksum 393 | DEFAULT? COLLATE '='? collationName #tableOptionCollate 394 | COMMENT '='? STRING_LITERAL #tableOptionComment 395 | COMPRESSION '='? (STRING_LITERAL | ID) #tableOptionCompression 396 | CONNECTION '='? STRING_LITERAL #tableOptionConnection 397 | DATA DIRECTORY '='? STRING_LITERAL #tableOptionDataDirectory 398 | DELAY_KEY_WRITE '='? boolValue=('0' | '1') #tableOptionDelay 399 | ENCRYPTION '='? STRING_LITERAL #tableOptionEncryption 400 | INDEX DIRECTORY '='? STRING_LITERAL #tableOptionIndexDirectory 401 | INSERT_METHOD '='? insertMethod=(NO | FIRST | LAST) #tableOptionInsertMethod 402 | KEY_BLOCK_SIZE '='? fileSizeLiteral #tableOptionKeyBlockSize 403 | MAX_ROWS '='? decimalLiteral #tableOptionMaxRows 404 | MIN_ROWS '='? decimalLiteral #tableOptionMinRows 405 | PACK_KEYS '='? extBoolValue=('0' | '1' | DEFAULT) #tableOptionPackKeys 406 | PASSWORD '='? STRING_LITERAL #tableOptionPassword 407 | ROW_FORMAT '='? 408 rowFormat=( 409 DEFAULT | DYNAMIC | FIXED | COMPRESSED 410 | REDUNDANT | COMPACT | ID 411 ) #tableOptionRowFormat 412 | STATS_AUTO_RECALC '='? extBoolValue=(DEFAULT | '0' | '1') #tableOptionRecalculation 413 | STATS_PERSISTENT '='? extBoolValue=(DEFAULT | '0' | '1') #tableOptionPersistent 414 | STATS_SAMPLE_PAGES '='? decimalLiteral #tableOptionSamplePage 415 | TABLESPACE uid tablespaceStorage? #tableOptionTablespace 416 | tablespaceStorage #tableOptionTablespace 417 | UNION '='? '(' tables ')' #tableOptionUnion 418 ; 419 420 tablespaceStorage 421 : STORAGE (DISK | MEMORY | DEFAULT) 422 ; 423 424 partitionDefinitions 425 : PARTITION BY partitionFunctionDefinition 426 (PARTITIONS count=decimalLiteral)? 427 ( 428 SUBPARTITION BY subpartitionFunctionDefinition 429 (SUBPARTITIONS subCount=decimalLiteral)? 430 )? 431 ('(' partitionDefinition (',' partitionDefinition)* ')')? 432 ; 433 434 partitionFunctionDefinition 435 : LINEAR? HASH '(' expression ')' #partitionFunctionHash 436 | LINEAR? KEY (ALGORITHM '=' algType=('1' | '2'))? 437 '(' uidList ')' #partitionFunctionKey 438 | RANGE ( '(' expression ')' | COLUMNS '(' uidList ')' ) #partitionFunctionRange 439 | LIST ( '(' expression ')' | COLUMNS '(' uidList ')' ) #partitionFunctionList 440 ; 441 442 subpartitionFunctionDefinition 443 : LINEAR? HASH '(' expression ')' #subPartitionFunctionHash 444 | LINEAR? KEY (ALGORITHM '=' algType=('1' | '2'))? 445 '(' uidList ')' #subPartitionFunctionKey 446 ; 447 448 partitionDefinition 449 : PARTITION uid VALUES LESS THAN 450 '(' 451 partitionDefinerAtom (',' partitionDefinerAtom)* 452 ')' 453 partitionOption* 454 ( '(' subpartitionDefinition (',' subpartitionDefinition)* ')' )? #partitionComparison 455 | PARTITION uid VALUES LESS THAN 456 partitionDefinerAtom partitionOption* 457 ( '(' subpartitionDefinition (',' subpartitionDefinition)* ')' )? #partitionComparison 458 | PARTITION uid VALUES IN 459 '(' 460 partitionDefinerAtom (',' partitionDefinerAtom)* 461 ')' 462 partitionOption* 463 ( '(' subpartitionDefinition (',' subpartitionDefinition)* ')' )? #partitionListAtom 464 | PARTITION uid VALUES IN 465 '(' 466 partitionDefinerVector (',' partitionDefinerVector)* 467 ')' 468 partitionOption* 469 ( '(' subpartitionDefinition (',' subpartitionDefinition)* ')' )? #partitionListVector 470 | PARTITION uid partitionOption* 471 ( '(' subpartitionDefinition (',' subpartitionDefinition)* ')' )? #partitionSimple 472 ; 473 474 partitionDefinerAtom 475 : constant | expression | MAXVALUE 476 ; 477 478 partitionDefinerVector 479 : '(' partitionDefinerAtom (',' partitionDefinerAtom)+ ')' 480 ; 481 482 subpartitionDefinition 483 : SUBPARTITION uid partitionOption* 484 ; 485 486 partitionOption 487 : STORAGE? ENGINE '='? engineName #partitionOptionEngine 488 | COMMENT '='? comment=STRING_LITERAL #partitionOptionComment 489 | DATA DIRECTORY '='? dataDirectory=STRING_LITERAL #partitionOptionDataDirectory 490 | INDEX DIRECTORY '='? indexDirectory=STRING_LITERAL #partitionOptionIndexDirectory 491 | MAX_ROWS '='? maxRows=decimalLiteral #partitionOptionMaxRows 492 | MIN_ROWS '='? minRows=decimalLiteral #partitionOptionMinRows 493 | TABLESPACE '='? tablespace=uid #partitionOptionTablespace 494 | NODEGROUP '='? nodegroup=uid #partitionOptionNodeGroup 495 ; 496 497 // Alter statements 498 499 alterDatabase 500 : ALTER dbFormat=(DATABASE | SCHEMA) uid? 501 createDatabaseOption+ #alterSimpleDatabase 502 | ALTER dbFormat=(DATABASE | SCHEMA) uid 503 UPGRADE DATA DIRECTORY NAME #alterUpgradeName 504 ; 505 506 alterEvent 507 : ALTER ownerStatement? 508 EVENT fullId 509 (ON SCHEDULE scheduleExpression)? 510 (ON COMPLETION NOT? PRESERVE)? 511 (RENAME TO fullId)? enableType? 512 (COMMENT STRING_LITERAL)? 513 (DO routineBody)? 514 ; 515 516 alterFunction 517 : ALTER FUNCTION fullId routineOption* 518 ; 519 520 alterInstance 521 : ALTER INSTANCE ROTATE INNODB MASTER KEY 522 ; 523 524 alterLogfileGroup 525 : ALTER LOGFILE GROUP uid 526 ADD UNDOFILE STRING_LITERAL 527 (INITIAL_SIZE '='? fileSizeLiteral)? 528 WAIT? ENGINE '='? engineName 529 ; 530 531 alterProcedure 532 : ALTER PROCEDURE fullId routineOption* 533 ; 534 535 alterServer 536 : ALTER SERVER uid OPTIONS 537 '(' serverOption (',' serverOption)* ')' 538 ; 539 540 alterTable 541 : ALTER intimeAction=(ONLINE | OFFLINE)? 542 IGNORE? TABLE tableName 543 (alterSpecification (',' alterSpecification)*)? 544 partitionDefinitions? 545 ; 546 547 alterTablespace 548 : ALTER TABLESPACE uid 549 objectAction=(ADD | DROP) DATAFILE STRING_LITERAL 550 (INITIAL_SIZE '=' fileSizeLiteral)? 551 WAIT? 552 ENGINE '='? engineName 553 ; 554 555 alterView 556 : ALTER 557 ( 558 ALGORITHM '=' algType=(UNDEFINED | MERGE | TEMPTABLE) 559 )? 560 ownerStatement? 561 (SQL SECURITY secContext=(DEFINER | INVOKER))? 562 VIEW fullId ('(' uidList ')')? AS selectStatement 563 (WITH checkOpt=(CASCADED | LOCAL)? CHECK OPTION)? 564 ; 565 566 // details 567 568 alterSpecification 569 : tableOption (','? tableOption)* #alterByTableOption 570 | ADD COLUMN? uid columnDefinition (FIRST | AFTER uid)? #alterByAddColumn 571 | ADD COLUMN? 572 '(' 573 uid columnDefinition ( ',' uid columnDefinition)* 574 ')' #alterByAddColumns 575 | ADD indexFormat=(INDEX | KEY) uid? indexType? 576 indexColumnNames indexOption* #alterByAddIndex 577 | ADD (CONSTRAINT name=uid?)? PRIMARY KEY index=uid? 578 indexType? indexColumnNames indexOption* #alterByAddPrimaryKey 579 | ADD (CONSTRAINT name=uid?)? UNIQUE 580 indexFormat=(INDEX | KEY)? indexName=uid? 581 indexType? indexColumnNames indexOption* #alterByAddUniqueKey 582 | ADD keyType=(FULLTEXT | SPATIAL) 583 indexFormat=(INDEX | KEY)? uid? 584 indexColumnNames indexOption* #alterByAddSpecialIndex 585 | ADD (CONSTRAINT name=uid?)? FOREIGN KEY 586 indexName=uid? indexColumnNames referenceDefinition #alterByAddForeignKey 587 | ADD (CONSTRAINT name=uid?)? CHECK '(' expression ')' #alterByAddCheckTableConstraint 588 | ALGORITHM '='? algType=(DEFAULT | INPLACE | COPY) #alterBySetAlgorithm 589 | ALTER COLUMN? uid 590 (SET DEFAULT defaultValue | DROP DEFAULT) #alterByChangeDefault 591 | CHANGE COLUMN? oldColumn=uid 592 newColumn=uid columnDefinition 593 (FIRST | AFTER afterColumn=uid)? #alterByChangeColumn 594 | RENAME COLUMN oldColumn=uid TO newColumn=uid #alterByRenameColumn 595 | LOCK '='? lockType=(DEFAULT | NONE | SHARED | EXCLUSIVE) #alterByLock 596 | MODIFY COLUMN? 597 uid columnDefinition (FIRST | AFTER uid)? #alterByModifyColumn 598 | DROP COLUMN? uid RESTRICT? #alterByDropColumn 599 | DROP (CONSTRAINT | CHECK) uid #alterByDropConstraintCheck 600 | DROP PRIMARY KEY #alterByDropPrimaryKey 601 | RENAME indexFormat=(INDEX | KEY) uid TO uid #alterByRenameIndex 602 | ALTER INDEX uid (VISIBLE | INVISIBLE) #alterByAlterIndexVisibility 603 | DROP indexFormat=(INDEX | KEY) uid #alterByDropIndex 604 | DROP FOREIGN KEY uid #alterByDropForeignKey 605 | DISABLE KEYS #alterByDisableKeys 606 | ENABLE KEYS #alterByEnableKeys 607 | RENAME renameFormat=(TO | AS)? (uid | fullId) #alterByRename 608 | ORDER BY uidList #alterByOrder 609 | CONVERT TO CHARACTER SET charsetName 610 (COLLATE collationName)? #alterByConvertCharset 611 | DEFAULT? CHARACTER SET '=' charsetName 612 (COLLATE '=' collationName)? #alterByDefaultCharset 613 | DISCARD TABLESPACE #alterByDiscardTablespace 614 | IMPORT TABLESPACE #alterByImportTablespace 615 | FORCE #alterByForce 616 | validationFormat=(WITHOUT | WITH) VALIDATION #alterByValidate 617 | ADD PARTITION 618 '(' 619 partitionDefinition (',' partitionDefinition)* 620 ')' #alterByAddPartition 621 | DROP PARTITION uidList #alterByDropPartition 622 | DISCARD PARTITION (uidList | ALL) TABLESPACE #alterByDiscardPartition 623 | IMPORT PARTITION (uidList | ALL) TABLESPACE #alterByImportPartition 624 | TRUNCATE PARTITION (uidList | ALL) #alterByTruncatePartition 625 | COALESCE PARTITION decimalLiteral #alterByCoalescePartition 626 | REORGANIZE PARTITION uidList 627 INTO '(' 628 partitionDefinition (',' partitionDefinition)* 629 ')' #alterByReorganizePartition 630 | EXCHANGE PARTITION uid WITH TABLE tableName 631 (validationFormat=(WITH | WITHOUT) VALIDATION)? #alterByExchangePartition 632 | ANALYZE PARTITION (uidList | ALL) #alterByAnalyzePartition 633 | CHECK PARTITION (uidList | ALL) #alterByCheckPartition 634 | OPTIMIZE PARTITION (uidList | ALL) #alterByOptimizePartition 635 | REBUILD PARTITION (uidList | ALL) #alterByRebuildPartition 636 | REPAIR PARTITION (uidList | ALL) #alterByRepairPartition 637 | REMOVE PARTITIONING #alterByRemovePartitioning 638 | UPGRADE PARTITIONING #alterByUpgradePartitioning 639 ; 640 641 642 // Drop statements 643 644 dropDatabase 645 : DROP dbFormat=(DATABASE | SCHEMA) ifExists? uid 646 ; 647 648 dropEvent 649 : DROP EVENT ifExists? fullId 650 ; 651 652 dropIndex 653 : DROP INDEX intimeAction=(ONLINE | OFFLINE)? 654 uid ON tableName 655 ( 656 ALGORITHM '='? algType=(DEFAULT | INPLACE | COPY) 657 | LOCK '='? 658 lockType=(DEFAULT | NONE | SHARED | EXCLUSIVE) 659 )* 660 ; 661 662 dropLogfileGroup 663 : DROP LOGFILE GROUP uid ENGINE '=' engineName 664 ; 665 666 dropProcedure 667 : DROP PROCEDURE ifExists? fullId 668 ; 669 670 dropFunction 671 : DROP FUNCTION ifExists? fullId 672 ; 673 674 dropServer 675 : DROP SERVER ifExists? uid 676 ; 677 678 dropTable 679 : DROP TEMPORARY? TABLE ifExists? 680 tables dropType=(RESTRICT | CASCADE)? 681 ; 682 683 dropTablespace 684 : DROP TABLESPACE uid (ENGINE '='? engineName)? 685 ; 686 687 dropTrigger 688 : DROP TRIGGER ifExists? fullId 689 ; 690 691 dropView 692 : DROP VIEW ifExists? 693 fullId (',' fullId)* dropType=(RESTRICT | CASCADE)? 694 ; 695 696 697 // Other DDL statements 698 699 renameTable 700 : RENAME TABLE 701 renameTableClause (',' renameTableClause)* 702 ; 703 704 renameTableClause 705 : tableName TO tableName 706 ; 707 708 truncateTable 709 : TRUNCATE TABLE? tableName 710 ; 711 712 713 // Data Manipulation Language 714 715 // Primary DML Statements 716 717 718 callStatement 719 : CALL fullId 720 ( 721 '(' (constants | expressions)? ')' 722 )? 723 ; 724 725 deleteStatement 726 : singleDeleteStatement | multipleDeleteStatement 727 ; 728 729 doStatement 730 : DO expressions 731 ; 732 733 handlerStatement 734 : handlerOpenStatement 735 | handlerReadIndexStatement 736 | handlerReadStatement 737 | handlerCloseStatement 738 ; 739 740 insertStatement 741 : INSERT 742 priority=(LOW_PRIORITY | DELAYED | HIGH_PRIORITY)? 743 IGNORE? INTO? tableName 744 (PARTITION '(' partitions=uidList? ')' )? 745 ( 746 ('(' columns=uidList ')')? insertStatementValue 747 | SET 748 setFirst=updatedElement 749 (',' setElements+=updatedElement)* 750 ) 751 ( 752 ON DUPLICATE KEY UPDATE 753 duplicatedFirst=updatedElement 754 (',' duplicatedElements+=updatedElement)* 755 )? 756 ; 757 758 loadDataStatement 759 : LOAD DATA 760 priority=(LOW_PRIORITY | CONCURRENT)? 761 LOCAL? INFILE filename=STRING_LITERAL 762 violation=(REPLACE | IGNORE)? 763 INTO TABLE tableName 764 (PARTITION '(' uidList ')' )? 765 (CHARACTER SET charset=charsetName)? 766 ( 767 fieldsFormat=(FIELDS | COLUMNS) 768 selectFieldsInto+ 769 )? 770 ( 771 LINES 772 selectLinesInto+ 773 )? 774 ( 775 IGNORE decimalLiteral linesFormat=(LINES | ROWS) 776 )? 777 ( '(' assignmentField (',' assignmentField)* ')' )? 778 (SET updatedElement (',' updatedElement)*)? 779 ; 780 781 loadXmlStatement 782 : LOAD XML 783 priority=(LOW_PRIORITY | CONCURRENT)? 784 LOCAL? INFILE filename=STRING_LITERAL 785 violation=(REPLACE | IGNORE)? 786 INTO TABLE tableName 787 (CHARACTER SET charset=charsetName)? 788 (ROWS IDENTIFIED BY '<' tag=STRING_LITERAL '>')? 789 ( IGNORE decimalLiteral linesFormat=(LINES | ROWS) )? 790 ( '(' assignmentField (',' assignmentField)* ')' )? 791 (SET updatedElement (',' updatedElement)*)? 792 ; 793 794 replaceStatement 795 : REPLACE priority=(LOW_PRIORITY | DELAYED)? 796 INTO? tableName 797 (PARTITION '(' partitions=uidList ')' )? 798 ( 799 ('(' columns=uidList ')')? insertStatementValue 800 | SET 801 setFirst=updatedElement 802 (',' setElements+=updatedElement)* 803 ) 804 ; 805 806 selectStatement 807 : querySpecification lockClause? #simpleSelect 808 | queryExpression lockClause? #parenthesisSelect 809 | querySpecificationNointo unionStatement+ 810 ( 811 UNION unionType=(ALL | DISTINCT)? 812 (querySpecification | queryExpression) 813 )? 814 orderByClause? limitClause? lockClause? #unionSelect 815 | queryExpressionNointo unionParenthesis+ 816 ( 817 UNION unionType=(ALL | DISTINCT)? 818 queryExpression 819 )? 820 orderByClause? limitClause? lockClause? #unionParenthesisSelect 821 ; 822 823 updateStatement 824 : singleUpdateStatement | multipleUpdateStatement 825 ; 826 827 // details 828 829 insertStatementValue 830 : selectStatement 831 | insertFormat=(VALUES | VALUE) 832 '(' expressionsWithDefaults? ')' 833 (',' '(' expressionsWithDefaults? ')')* 834 ; 835 836 updatedElement 837 : fullColumnName '=' (expression | DEFAULT) 838 ; 839 840 assignmentField 841 : uid | LOCAL_ID 842 ; 843 844 lockClause 845 : FOR UPDATE | LOCK IN SHARE MODE 846 ; 847 848 // Detailed DML Statements 849 850 singleDeleteStatement 851 : DELETE priority=LOW_PRIORITY? QUICK? IGNORE? 852 FROM tableName 853 (PARTITION '(' uidList ')' )? 854 (WHERE expression)? 855 orderByClause? (LIMIT limitClauseAtom)? 856 ; 857 858 multipleDeleteStatement 859 : DELETE priority=LOW_PRIORITY? QUICK? IGNORE? 860 ( 861 tableName ('.' '*')? ( ',' tableName ('.' '*')? )* 862 FROM tableSources 863 | FROM 864 tableName ('.' '*')? ( ',' tableName ('.' '*')? )* 865 USING tableSources 866 ) 867 (WHERE expression)? 868 ; 869 870 handlerOpenStatement 871 : HANDLER tableName OPEN (AS? uid)? 872 ; 873 874 handlerReadIndexStatement 875 : HANDLER tableName READ index=uid 876 ( 877 comparisonOperator '(' constants ')' 878 | moveOrder=(FIRST | NEXT | PREV | LAST) 879 ) 880 (WHERE expression)? (LIMIT limitClauseAtom)? 881 ; 882 883 handlerReadStatement 884 : HANDLER tableName READ moveOrder=(FIRST | NEXT) 885 (WHERE expression)? (LIMIT limitClauseAtom)? 886 ; 887 888 handlerCloseStatement 889 : HANDLER tableName CLOSE 890 ; 891 892 singleUpdateStatement 893 : UPDATE priority=LOW_PRIORITY? IGNORE? tableName (AS? uid)? 894 SET updatedElement (',' updatedElement)* 895 (WHERE expression)? orderByClause? limitClause? 896 ; 897 898 multipleUpdateStatement 899 : UPDATE priority=LOW_PRIORITY? IGNORE? tableSources 900 SET updatedElement (',' updatedElement)* 901 (WHERE expression)? 902 ; 903 904 // details 905 906 orderByClause 907 : ORDER BY orderByExpression (',' orderByExpression)* 908 ; 909 910 orderByExpression 911 : expression order=(ASC | DESC)? 912 ; 913 914 tableSources 915 : tableSource (',' tableSource)* 916 ; 917 918 tableSource 919 : tableSourceItem joinPart* #tableSourceBase 920 | '(' tableSourceItem joinPart* ')' #tableSourceNested 921 ; 922 923 tableSourceItem 924 : tableName 925 (PARTITION '(' uidList ')' )? (AS? alias=uid)? 926 (indexHint (',' indexHint)* )? #atomTableItem 927 | ( 928 selectStatement 929 | '(' parenthesisSubquery=selectStatement ')' 930 ) 931 AS? alias=uid #subqueryTableItem 932 | '(' tableSources ')' #tableSourcesItem 933 ; 934 935 indexHint 936 : indexHintAction=(USE | IGNORE | FORCE) 937 keyFormat=(INDEX|KEY) ( FOR indexHintType)? 938 '(' uidList ')' 939 ; 940 941 indexHintType 942 : JOIN | ORDER BY | GROUP BY 943 ; 944 945 joinPart 946 : (INNER | CROSS)? JOIN tableSourceItem 947 ( 948 ON expression 949 | USING '(' uidList ')' 950 )? #innerJoin 951 | STRAIGHT_JOIN tableSourceItem (ON expression)? #straightJoin 952 | (LEFT | RIGHT) OUTER? JOIN tableSourceItem 953 ( 954 ON expression 955 | USING '(' uidList ')' 956 ) #outerJoin 957 | NATURAL ((LEFT | RIGHT) OUTER?)? JOIN tableSourceItem #naturalJoin 958 ; 959 960 // Select Statement's Details 961 962 queryExpression 963 : '(' querySpecification ')' 964 | '(' queryExpression ')' 965 ; 966 967 queryExpressionNointo 968 : '(' querySpecificationNointo ')' 969 | '(' queryExpressionNointo ')' 970 ; 971 972 querySpecification 973 : SELECT selectSpec* selectElements selectIntoExpression? 974 fromClause? groupByClause? havingClause? orderByClause? limitClause? 975 | SELECT selectSpec* selectElements 976 fromClause? groupByClause? havingClause? orderByClause? limitClause? selectIntoExpression? 977 ; 978 979 querySpecificationNointo 980 : SELECT selectSpec* selectElements 981 fromClause? groupByClause? havingClause? orderByClause? limitClause? 982 ; 983 984 unionParenthesis 985 : UNION unionType=(ALL | DISTINCT)? queryExpressionNointo 986 ; 987 988 unionStatement 989 : UNION unionType=(ALL | DISTINCT)? 990 (querySpecificationNointo | queryExpressionNointo) 991 ; 992 993 // details 994 995 selectSpec 996 : (ALL | DISTINCT | DISTINCTROW) 997 | HIGH_PRIORITY | STRAIGHT_JOIN | SQL_SMALL_RESULT 998 | SQL_BIG_RESULT | SQL_BUFFER_RESULT 999 | (SQL_CACHE | SQL_NO_CACHE) 1000 | SQL_CALC_FOUND_ROWS 1001 ; 1002 1003 selectElements 1004 : (star='*' | selectElement ) (',' selectElement)* 1005 ; 1006 1007 selectElement 1008 : fullId '.' '*' #selectStarElement 1009 | fullColumnName (AS? uid)? #selectColumnElement 1010 | functionCall (AS? uid)? #selectFunctionElement 1011 | (LOCAL_ID VAR_ASSIGN)? expression (AS? uid)? #selectExpressionElement 1012 ; 1013 1014 selectIntoExpression 1015 : INTO assignmentField (',' assignmentField )* #selectIntoVariables 1016 | INTO DUMPFILE STRING_LITERAL #selectIntoDumpFile 1017 | ( 1018 INTO OUTFILE filename=STRING_LITERAL 1019 (CHARACTER SET charset=charsetName)? 1020 ( 1021 fieldsFormat=(FIELDS | COLUMNS) 1022 selectFieldsInto+ 1023 )? 1024 ( 1025 LINES selectLinesInto+ 1026 )? 1027 ) #selectIntoTextFile 1028 ; 1029 1030 selectFieldsInto 1031 : TERMINATED BY terminationField=STRING_LITERAL 1032 | OPTIONALLY? ENCLOSED BY enclosion=STRING_LITERAL 1033 | ESCAPED BY escaping=STRING_LITERAL 1034 ; 1035 1036 selectLinesInto 1037 : STARTING BY starting=STRING_LITERAL 1038 | TERMINATED BY terminationLine=STRING_LITERAL 1039 ; 1040 1041 fromClause 1042 : FROM tableSources 1043 (WHERE whereExpr=expression)? 1044 ; 1045 1046 groupByClause 1047 : GROUP BY 1048 groupByItem (',' groupByItem)* 1049 (WITH ROLLUP)? 1050 ; 1051 1052 havingClause 1053 : HAVING havingExpr=expression 1054 ; 1055 1056 groupByItem 1057 : expression order=(ASC | DESC)? 1058 ; 1059 1060 limitClause 1061 : LIMIT 1062 ( 1063 (offset=limitClauseAtom ',')? limit=limitClauseAtom 1064 | limit=limitClauseAtom OFFSET offset=limitClauseAtom 1065 ) 1066 ; 1067 1068 limitClauseAtom 1069 : decimalLiteral | mysqlVariable | simpleId 1070 ; 1071 1072 1073 // Transaction's Statements 1074 1075 startTransaction 1076 : START TRANSACTION (transactionMode (',' transactionMode)* )? 1077 ; 1078 1079 beginWork 1080 : BEGIN WORK? 1081 ; 1082 1083 commitWork 1084 : COMMIT WORK? 1085 (AND nochain=NO? CHAIN)? 1086 (norelease=NO? RELEASE)? 1087 ; 1088 1089 rollbackWork 1090 : ROLLBACK WORK? 1091 (AND nochain=NO? CHAIN)? 1092 (norelease=NO? RELEASE)? 1093 ; 1094 1095 savepointStatement 1096 : SAVEPOINT uid 1097 ; 1098 1099 rollbackStatement 1100 : ROLLBACK WORK? TO SAVEPOINT? uid 1101 ; 1102 1103 releaseStatement 1104 : RELEASE SAVEPOINT uid 1105 ; 1106 1107 lockTables 1108 : LOCK TABLES lockTableElement (',' lockTableElement)* 1109 ; 1110 1111 unlockTables 1112 : UNLOCK TABLES 1113 ; 1114 1115 1116 // details 1117 1118 setAutocommitStatement 1119 : SET AUTOCOMMIT '=' autocommitValue=('0' | '1') 1120 ; 1121 1122 setTransactionStatement 1123 : SET transactionContext=(GLOBAL | SESSION)? TRANSACTION 1124 transactionOption (',' transactionOption)* 1125 ; 1126 1127 transactionMode 1128 : WITH CONSISTENT SNAPSHOT 1129 | READ WRITE 1130 | READ ONLY 1131 ; 1132 1133 lockTableElement 1134 : tableName (AS? uid)? lockAction 1135 ; 1136 1137 lockAction 1138 : READ LOCAL? | LOW_PRIORITY? WRITE 1139 ; 1140 1141 transactionOption 1142 : ISOLATION LEVEL transactionLevel 1143 | READ WRITE 1144 | READ ONLY 1145 ; 1146 1147 transactionLevel 1148 : REPEATABLE READ 1149 | READ COMMITTED 1150 | READ UNCOMMITTED 1151 | SERIALIZABLE 1152 ; 1153 1154 1155 // Replication's Statements 1156 1157 // Base Replication 1158 1159 changeMaster 1160 : CHANGE MASTER TO 1161 masterOption (',' masterOption)* channelOption? 1162 ; 1163 1164 changeReplicationFilter 1165 : CHANGE REPLICATION FILTER 1166 replicationFilter (',' replicationFilter)* 1167 ; 1168 1169 purgeBinaryLogs 1170 : PURGE purgeFormat=(BINARY | MASTER) LOGS 1171 ( 1172 TO fileName=STRING_LITERAL 1173 | BEFORE timeValue=STRING_LITERAL 1174 ) 1175 ; 1176 1177 resetMaster 1178 : RESET MASTER 1179 ; 1180 1181 resetSlave 1182 : RESET SLAVE ALL? channelOption? 1183 ; 1184 1185 startSlave 1186 : START SLAVE (threadType (',' threadType)*)? 1187 (UNTIL untilOption)? 1188 connectionOption* channelOption? 1189 ; 1190 1191 stopSlave 1192 : STOP SLAVE (threadType (',' threadType)*)? 1193 ; 1194 1195 startGroupReplication 1196 : START GROUP_REPLICATION 1197 ; 1198 1199 stopGroupReplication 1200 : STOP GROUP_REPLICATION 1201 ; 1202 1203 // details 1204 1205 masterOption 1206 : stringMasterOption '=' STRING_LITERAL #masterStringOption 1207 | decimalMasterOption '=' decimalLiteral #masterDecimalOption 1208 | boolMasterOption '=' boolVal=('0' | '1') #masterBoolOption 1209 | MASTER_HEARTBEAT_PERIOD '=' REAL_LITERAL #masterRealOption 1210 | IGNORE_SERVER_IDS '=' '(' (uid (',' uid)*)? ')' #masterUidListOption 1211 ; 1212 1213 stringMasterOption 1214 : MASTER_BIND | MASTER_HOST | MASTER_USER | MASTER_PASSWORD 1215 | MASTER_LOG_FILE | RELAY_LOG_FILE | MASTER_SSL_CA 1216 | MASTER_SSL_CAPATH | MASTER_SSL_CERT | MASTER_SSL_CRL 1217 | MASTER_SSL_CRLPATH | MASTER_SSL_KEY | MASTER_SSL_CIPHER 1218 | MASTER_TLS_VERSION 1219 ; 1220 decimalMasterOption 1221 : MASTER_PORT | MASTER_CONNECT_RETRY | MASTER_RETRY_COUNT 1222 | MASTER_DELAY | MASTER_LOG_POS | RELAY_LOG_POS 1223 ; 1224 1225 boolMasterOption 1226 : MASTER_AUTO_POSITION | MASTER_SSL 1227 | MASTER_SSL_VERIFY_SERVER_CERT 1228 ; 1229 1230 channelOption 1231 : FOR CHANNEL STRING_LITERAL 1232 ; 1233 1234 replicationFilter 1235 : REPLICATE_DO_DB '=' '(' uidList ')' #doDbReplication 1236 | REPLICATE_IGNORE_DB '=' '(' uidList ')' #ignoreDbReplication 1237 | REPLICATE_DO_TABLE '=' '(' tables ')' #doTableReplication 1238 | REPLICATE_IGNORE_TABLE '=' '(' tables ')' #ignoreTableReplication 1239 | REPLICATE_WILD_DO_TABLE '=' '(' simpleStrings ')' #wildDoTableReplication 1240 | REPLICATE_WILD_IGNORE_TABLE 1241 '=' '(' simpleStrings ')' #wildIgnoreTableReplication 1242 | REPLICATE_REWRITE_DB '=' 1243 '(' tablePair (',' tablePair)* ')' #rewriteDbReplication 1244 ; 1245 1246 tablePair 1247 : '(' firstTable=tableName ',' secondTable=tableName ')' 1248 ; 1249 1250 threadType 1251 : IO_THREAD | SQL_THREAD 1252 ; 1253 1254 untilOption 1255 : gtids=(SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS) 1256 '=' gtuidSet #gtidsUntilOption 1257 | MASTER_LOG_FILE '=' STRING_LITERAL 1258 ',' MASTER_LOG_POS '=' decimalLiteral #masterLogUntilOption 1259 | RELAY_LOG_FILE '=' STRING_LITERAL 1260 ',' RELAY_LOG_POS '=' decimalLiteral #relayLogUntilOption 1261 | SQL_AFTER_MTS_GAPS #sqlGapsUntilOption 1262 ; 1263 1264 connectionOption 1265 : USER '=' conOptUser=STRING_LITERAL #userConnectionOption 1266 | PASSWORD '=' conOptPassword=STRING_LITERAL #passwordConnectionOption 1267 | DEFAULT_AUTH '=' conOptDefAuth=STRING_LITERAL #defaultAuthConnectionOption 1268 | PLUGIN_DIR '=' conOptPluginDir=STRING_LITERAL #pluginDirConnectionOption 1269 ; 1270 1271 gtuidSet 1272 : uuidSet (',' uuidSet)* 1273 | STRING_LITERAL 1274 ; 1275 1276 1277 // XA Transactions 1278 1279 xaStartTransaction 1280 : XA xaStart=(START | BEGIN) xid xaAction=(JOIN | RESUME)? 1281 ; 1282 1283 xaEndTransaction 1284 : XA END xid (SUSPEND (FOR MIGRATE)?)? 1285 ; 1286 1287 xaPrepareStatement 1288 : XA PREPARE xid 1289 ; 1290 1291 xaCommitWork 1292 : XA COMMIT xid (ONE PHASE)? 1293 ; 1294 1295 xaRollbackWork 1296 : XA ROLLBACK xid 1297 ; 1298 1299 xaRecoverWork 1300 : XA RECOVER (CONVERT xid)? 1301 ; 1302 1303 1304 // Prepared Statements 1305 1306 prepareStatement 1307 : PREPARE uid FROM 1308 (query=STRING_LITERAL | variable=LOCAL_ID) 1309 ; 1310 1311 executeStatement 1312 : EXECUTE uid (USING userVariables)? 1313 ; 1314 1315 deallocatePrepare 1316 : dropFormat=(DEALLOCATE | DROP) PREPARE uid 1317 ; 1318 1319 1320 // Compound Statements 1321 1322 routineBody 1323 : blockStatement | sqlStatement 1324 ; 1325 1326 // details 1327 1328 blockStatement 1329 : (uid ':')? BEGIN 1330 ( 1331 (declareVariable SEMI)* 1332 (declareCondition SEMI)* 1333 (declareCursor SEMI)* 1334 (declareHandler SEMI)* 1335 procedureSqlStatement* 1336 )? 1337 END uid? 1338 ; 1339 1340 caseStatement 1341 : CASE (uid | expression)? caseAlternative+ 1342 (ELSE procedureSqlStatement+)? 1343 END CASE 1344 ; 1345 1346 ifStatement 1347 : IF expression 1348 THEN thenStatements+=procedureSqlStatement+ 1349 elifAlternative* 1350 (ELSE elseStatements+=procedureSqlStatement+ )? 1351 END IF 1352 ; 1353 1354 iterateStatement 1355 : ITERATE uid 1356 ; 1357 1358 leaveStatement 1359 : LEAVE uid 1360 ; 1361 1362 loopStatement 1363 : (uid ':')? 1364 LOOP procedureSqlStatement+ 1365 END LOOP uid? 1366 ; 1367 1368 repeatStatement 1369 : (uid ':')? 1370 REPEAT procedureSqlStatement+ 1371 UNTIL expression 1372 END REPEAT uid? 1373 ; 1374 1375 returnStatement 1376 : RETURN expression 1377 ; 1378 1379 whileStatement 1380 : (uid ':')? 1381 WHILE expression 1382 DO procedureSqlStatement+ 1383 END WHILE uid? 1384 ; 1385 1386 cursorStatement 1387 : CLOSE uid #CloseCursor 1388 | FETCH (NEXT? FROM)? uid INTO uidList #FetchCursor 1389 | OPEN uid #OpenCursor 1390 ; 1391 1392 // details 1393 1394 declareVariable 1395 : DECLARE uidList dataType (DEFAULT expression)? 1396 ; 1397 1398 declareCondition 1399 : DECLARE uid CONDITION FOR 1400 ( decimalLiteral | SQLSTATE VALUE? STRING_LITERAL) 1401 ; 1402 1403 declareCursor 1404 : DECLARE uid CURSOR FOR selectStatement 1405 ; 1406 1407 declareHandler 1408 : DECLARE handlerAction=(CONTINUE | EXIT | UNDO) 1409 HANDLER FOR 1410 handlerConditionValue (',' handlerConditionValue)* 1411 routineBody 1412 ; 1413 1414 handlerConditionValue 1415 : decimalLiteral #handlerConditionCode 1416 | SQLSTATE VALUE? STRING_LITERAL #handlerConditionState 1417 | uid #handlerConditionName 1418 | SQLWARNING #handlerConditionWarning 1419 | NOT FOUND #handlerConditionNotfound 1420 | SQLEXCEPTION #handlerConditionException 1421 ; 1422 1423 procedureSqlStatement 1424 : (compoundStatement | sqlStatement) SEMI 1425 ; 1426 1427 caseAlternative 1428 : WHEN (constant | expression) 1429 THEN procedureSqlStatement+ 1430 ; 1431 1432 elifAlternative 1433 : ELSEIF expression 1434 THEN procedureSqlStatement+ 1435 ; 1436 1437 // Administration Statements 1438 1439 // Account management statements 1440 1441 alterUser 1442 : ALTER USER 1443 userSpecification (',' userSpecification)* #alterUserMysqlV56 1444 | ALTER USER ifExists? 1445 userAuthOption (',' userAuthOption)* 1446 ( 1447 REQUIRE 1448 (tlsNone=NONE | tlsOption (AND? tlsOption)* ) 1449 )? 1450 (WITH userResourceOption+)? 1451 (userPasswordOption | userLockOption)* #alterUserMysqlV57 1452 ; 1453 1454 createUser 1455 : CREATE USER userAuthOption (',' userAuthOption)* #createUserMysqlV56 1456 | CREATE USER ifNotExists? 1457 userAuthOption (',' userAuthOption)* 1458 ( 1459 REQUIRE 1460 (tlsNone=NONE | tlsOption (AND? tlsOption)* ) 1461 )? 1462 (WITH userResourceOption+)? 1463 (userPasswordOption | userLockOption)* #createUserMysqlV57 1464 ; 1465 1466 dropUser 1467 : DROP USER ifExists? userName (',' userName)* 1468 ; 1469 1470 grantStatement 1471 : GRANT privelegeClause (',' privelegeClause)* 1472 ON 1473 privilegeObject=(TABLE | FUNCTION | PROCEDURE)? 1474 privilegeLevel 1475 TO userAuthOption (',' userAuthOption)* 1476 ( 1477 REQUIRE 1478 (tlsNone=NONE | tlsOption (AND? tlsOption)* ) 1479 )? 1480 (WITH (GRANT OPTION | userResourceOption)* )? 1481 ; 1482 1483 grantProxy 1484 : GRANT PROXY ON fromFirst=userName 1485 TO toFirst=userName (',' toOther+=userName)* 1486 (WITH GRANT OPTION)? 1487 ; 1488 1489 renameUser 1490 : RENAME USER 1491 renameUserClause (',' renameUserClause)* 1492 ; 1493 1494 revokeStatement 1495 : REVOKE privelegeClause (',' privelegeClause)* 1496 ON 1497 privilegeObject=(TABLE | FUNCTION | PROCEDURE)? 1498 privilegeLevel 1499 FROM userName (',' userName)* #detailRevoke 1500 | REVOKE ALL PRIVILEGES? ',' GRANT OPTION 1501 FROM userName (',' userName)* #shortRevoke 1502 ; 1503 1504 revokeProxy 1505 : REVOKE PROXY ON onUser=userName 1506 FROM fromFirst=userName (',' fromOther+=userName)* 1507 ; 1508 1509 setPasswordStatement 1510 : SET PASSWORD (FOR userName)? 1511 '=' ( passwordFunctionClause | STRING_LITERAL) 1512 ; 1513 1514 // details 1515 1516 userSpecification 1517 : userName userPasswordOption 1518 ; 1519 1520 userAuthOption 1521 : userName IDENTIFIED BY PASSWORD hashed=STRING_LITERAL #passwordAuthOption 1522 | userName 1523 IDENTIFIED (WITH authPlugin)? BY STRING_LITERAL #stringAuthOption 1524 | userName 1525 IDENTIFIED WITH authPlugin 1526 (AS STRING_LITERAL)? #hashAuthOption 1527 | userName #simpleAuthOption 1528 ; 1529 1530 tlsOption 1531 : SSL 1532 | X509 1533 | CIPHER STRING_LITERAL 1534 | ISSUER STRING_LITERAL 1535 | SUBJECT STRING_LITERAL 1536 ; 1537 1538 userResourceOption 1539 : MAX_QUERIES_PER_HOUR decimalLiteral 1540 | MAX_UPDATES_PER_HOUR decimalLiteral 1541 | MAX_CONNECTIONS_PER_HOUR decimalLiteral 1542 | MAX_USER_CONNECTIONS decimalLiteral 1543 ; 1544 1545 userPasswordOption 1546 : PASSWORD EXPIRE 1547 (expireType=DEFAULT 1548 | expireType=NEVER 1549 | expireType=INTERVAL decimalLiteral DAY 1550 )? 1551 ; 1552 1553 userLockOption 1554 : ACCOUNT lockType=(LOCK | UNLOCK) 1555 ; 1556 1557 privelegeClause 1558 : privilege ( '(' uidList ')' )? 1559 ; 1560 1561 privilege 1562 : ALL PRIVILEGES? 1563 | ALTER ROUTINE? 1564 | CREATE 1565 (TEMPORARY TABLES | ROUTINE | VIEW | USER | TABLESPACE | ROLE)? 1566 | DELETE | DROP (ROLE)? | EVENT | EXECUTE | FILE | GRANT OPTION 1567 | INDEX | INSERT | LOCK TABLES | PROCESS | PROXY 1568 | REFERENCES | RELOAD 1569 | REPLICATION (CLIENT | SLAVE) 1570 | SELECT 1571 | SHOW (VIEW | DATABASES) 1572 | SHUTDOWN | SUPER | TRIGGER | UPDATE | USAGE 1573 | APPLICATION_PASSWORD_ADMIN | AUDIT_ADMIN | BACKUP_ADMIN | BINLOG_ADMIN | BINLOG_ENCRYPTION_ADMIN | CLONE_ADMIN 1574 | CONNECTION_ADMIN | ENCRYPTION_KEY_ADMIN | FIREWALL_ADMIN | FIREWALL_USER | FLUSH_OPTIMIZER_COSTS 1575 | FLUSH_STATUS | FLUSH_TABLES | FLUSH_USER_RESOURCES | GROUP_REPLICATION_ADMIN 1576 | INNODB_REDO_LOG_ARCHIVE | INNODB_REDO_LOG_ENABLE | NDB_STORED_USER | PERSIST_RO_VARIABLES_ADMIN | REPLICATION_APPLIER 1577 | REPLICATION_SLAVE_ADMIN | RESOURCE_GROUP_ADMIN | RESOURCE_GROUP_USER | ROLE_ADMIN 1578 | SERVICE_CONNECTION_ADMIN 1579 | SESSION_VARIABLES_ADMIN | SET_USER_ID | SHOW_ROUTINE | SYSTEM_USER | SYSTEM_VARIABLES_ADMIN 1580 | TABLE_ENCRYPTION_ADMIN | VERSION_TOKEN_ADMIN | XA_RECOVER_ADMIN 1581 ; 1582 1583 privilegeLevel 1584 : '*' #currentSchemaPriviLevel 1585 | '*' '.' '*' #globalPrivLevel 1586 | uid '.' '*' #definiteSchemaPrivLevel 1587 | uid '.' uid #definiteFullTablePrivLevel 1588 | uid dottedId #definiteFullTablePrivLevel2 1589 | uid #definiteTablePrivLevel 1590 ; 1591 1592 renameUserClause 1593 : fromFirst=userName TO toFirst=userName 1594 ; 1595 1596 // Table maintenance statements 1597 1598 analyzeTable 1599 : ANALYZE actionOption=(NO_WRITE_TO_BINLOG | LOCAL)? 1600 TABLE tables 1601 ; 1602 1603 checkTable 1604 : CHECK TABLE tables checkTableOption* 1605 ; 1606 1607 checksumTable 1608 : CHECKSUM TABLE tables actionOption=(QUICK | EXTENDED)? 1609 ; 1610 1611 optimizeTable 1612 : OPTIMIZE actionOption=(NO_WRITE_TO_BINLOG | LOCAL)? 1613 (TABLE | TABLES) tables 1614 ; 1615 1616 repairTable 1617 : REPAIR actionOption=(NO_WRITE_TO_BINLOG | LOCAL)? 1618 TABLE tables 1619 QUICK? EXTENDED? USE_FRM? 1620 ; 1621 1622 // details 1623 1624 checkTableOption 1625 : FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED 1626 ; 1627 1628 1629 // Plugin and udf statements 1630 1631 createUdfunction 1632 : CREATE AGGREGATE? FUNCTION uid 1633 RETURNS returnType=(STRING | INTEGER | REAL | DECIMAL) 1634 SONAME STRING_LITERAL 1635 ; 1636 1637 installPlugin 1638 : INSTALL PLUGIN uid SONAME STRING_LITERAL 1639 ; 1640 1641 uninstallPlugin 1642 : UNINSTALL PLUGIN uid 1643 ; 1644 1645 1646 // Set and show statements 1647 1648 setStatement 1649 : SET variableClause ('=' | ':=') expression 1650 (',' variableClause ('=' | ':=') expression)* #setVariable 1651 | SET (CHARACTER SET | CHARSET) (charsetName | DEFAULT) #setCharset 1652 | SET NAMES 1653 (charsetName (COLLATE collationName)? | DEFAULT) #setNames 1654 | setPasswordStatement #setPassword 1655 | setTransactionStatement #setTransaction 1656 | setAutocommitStatement #setAutocommit 1657 | SET fullId ('=' | ':=') expression 1658 (',' fullId ('=' | ':=') expression)* #setNewValueInsideTrigger 1659 ; 1660 1661 showStatement 1662 : SHOW logFormat=(BINARY | MASTER) LOGS #showMasterLogs 1663 | SHOW logFormat=(BINLOG | RELAYLOG) 1664 EVENTS (IN filename=STRING_LITERAL)? 1665 (FROM fromPosition=decimalLiteral)? 1666 (LIMIT 1667 (offset=decimalLiteral ',')? 1668 rowCount=decimalLiteral 1669 )? #showLogEvents 1670 | SHOW showCommonEntity showFilter? #showObjectFilter 1671 | SHOW FULL? columnsFormat=(COLUMNS | FIELDS) 1672 tableFormat=(FROM | IN) tableName 1673 (schemaFormat=(FROM | IN) uid)? showFilter? #showColumns 1674 | SHOW CREATE schemaFormat=(DATABASE | SCHEMA) 1675 ifNotExists? uid #showCreateDb 1676 | SHOW CREATE 1677 namedEntity=( 1678 EVENT | FUNCTION | PROCEDURE 1679 | TABLE | TRIGGER | VIEW 1680 ) 1681 fullId #showCreateFullIdObject 1682 | SHOW CREATE USER userName #showCreateUser 1683 | SHOW ENGINE engineName engineOption=(STATUS | MUTEX) #showEngine 1684 | SHOW showGlobalInfoClause #showGlobalInfo 1685 | SHOW errorFormat=(ERRORS | WARNINGS) 1686 (LIMIT 1687 (offset=decimalLiteral ',')? 1688 rowCount=decimalLiteral 1689 ) #showErrors 1690 | SHOW COUNT '(' '*' ')' errorFormat=(ERRORS | WARNINGS) #showCountErrors 1691 | SHOW showSchemaEntity 1692 (schemaFormat=(FROM | IN) uid)? showFilter? #showSchemaFilter 1693 | SHOW routine=(FUNCTION | PROCEDURE) CODE fullId #showRoutine 1694 | SHOW GRANTS (FOR userName)? #showGrants 1695 | SHOW indexFormat=(INDEX | INDEXES | KEYS) 1696 tableFormat=(FROM | IN) tableName 1697 (schemaFormat=(FROM | IN) uid)? (WHERE expression)? #showIndexes 1698 | SHOW OPEN TABLES ( schemaFormat=(FROM | IN) uid)? 1699 showFilter? #showOpenTables 1700 | SHOW PROFILE showProfileType (',' showProfileType)* 1701 (FOR QUERY queryCount=decimalLiteral)? 1702 (LIMIT 1703 (offset=decimalLiteral ',')? 1704 rowCount=decimalLiteral 1705 ) #showProfile 1706 | SHOW SLAVE STATUS (FOR CHANNEL STRING_LITERAL)? #showSlaveStatus 1707 ; 1708 1709 // details 1710 1711 variableClause 1712 : LOCAL_ID | GLOBAL_ID | ( ('@' '@')? (GLOBAL | SESSION | LOCAL) )? uid 1713 ; 1714 1715 showCommonEntity 1716 : CHARACTER SET | COLLATION | DATABASES | SCHEMAS 1717 | FUNCTION STATUS | PROCEDURE STATUS 1718 | (GLOBAL | SESSION)? (STATUS | VARIABLES) 1719 ; 1720 1721 showFilter 1722 : LIKE STRING_LITERAL 1723 | WHERE expression 1724 ; 1725 1726 showGlobalInfoClause 1727 : STORAGE? ENGINES | MASTER STATUS | PLUGINS 1728 | PRIVILEGES | FULL? PROCESSLIST | PROFILES 1729 | SLAVE HOSTS | AUTHORS | CONTRIBUTORS 1730 ; 1731 1732 showSchemaEntity 1733 : EVENTS | TABLE STATUS | FULL? TABLES | TRIGGERS 1734 ; 1735 1736 showProfileType 1737 : ALL | BLOCK IO | CONTEXT SWITCHES | CPU | IPC | MEMORY 1738 | PAGE FAULTS | SOURCE | SWAPS 1739 ; 1740 1741 1742 // Other administrative statements 1743 1744 binlogStatement 1745 : BINLOG STRING_LITERAL 1746 ; 1747 1748 cacheIndexStatement 1749 : CACHE INDEX tableIndexes (',' tableIndexes)* 1750 ( PARTITION '(' (uidList | ALL) ')' )? 1751 IN schema=uid 1752 ; 1753 1754 flushStatement 1755 : FLUSH flushFormat=(NO_WRITE_TO_BINLOG | LOCAL)? 1756 flushOption (',' flushOption)* 1757 ; 1758 1759 killStatement 1760 : KILL connectionFormat=(CONNECTION | QUERY)? 1761 decimalLiteral+ 1762 ; 1763 1764 loadIndexIntoCache 1765 : LOAD INDEX INTO CACHE 1766 loadedTableIndexes (',' loadedTableIndexes)* 1767 ; 1768 1769 // remark reset (maser | slave) describe in replication's 1770 // statements section 1771 resetStatement 1772 : RESET QUERY CACHE 1773 ; 1774 1775 shutdownStatement 1776 : SHUTDOWN 1777 ; 1778 1779 // details 1780 1781 tableIndexes 1782 : tableName ( indexFormat=(INDEX | KEY)? '(' uidList ')' )? 1783 ; 1784 1785 flushOption 1786 : ( 1787 DES_KEY_FILE | HOSTS 1788 | ( 1789 BINARY | ENGINE | ERROR | GENERAL | RELAY | SLOW 1790 )? LOGS 1791 | OPTIMIZER_COSTS | PRIVILEGES | QUERY CACHE | STATUS 1792 | USER_RESOURCES | TABLES (WITH READ LOCK)? 1793 ) #simpleFlushOption 1794 | RELAY LOGS channelOption? #channelFlushOption 1795 | TABLES tables flushTableOption? #tableFlushOption 1796 ; 1797 1798 flushTableOption 1799 : WITH READ LOCK 1800 | FOR EXPORT 1801 ; 1802 1803 loadedTableIndexes 1804 : tableName 1805 ( PARTITION '(' (partitionList=uidList | ALL) ')' )? 1806 ( indexFormat=(INDEX | KEY)? '(' indexList=uidList ')' )? 1807 (IGNORE LEAVES)? 1808 ; 1809 1810 1811 // Utility Statements 1812 1813 1814 simpleDescribeStatement 1815 : command=(EXPLAIN | DESCRIBE | DESC) tableName 1816 (column=uid | pattern=STRING_LITERAL)? 1817 ; 1818 1819 fullDescribeStatement 1820 : command=(EXPLAIN | DESCRIBE | DESC) 1821 ( 1822 formatType=(EXTENDED | PARTITIONS | FORMAT ) 1823 '=' 1824 formatValue=(TRADITIONAL | JSON) 1825 )? 1826 describeObjectClause 1827 ; 1828 1829 helpStatement 1830 : HELP STRING_LITERAL 1831 ; 1832 1833 useStatement 1834 : USE uid 1835 ; 1836 1837 signalStatement 1838 : SIGNAL ( ( SQLSTATE VALUE? stringLiteral ) | ID | REVERSE_QUOTE_ID ) 1839 ( SET signalConditionInformation ( ',' signalConditionInformation)* )? 1840 ; 1841 1842 resignalStatement 1843 : RESIGNAL ( ( SQLSTATE VALUE? stringLiteral ) | ID | REVERSE_QUOTE_ID )? 1844 ( SET signalConditionInformation ( ',' signalConditionInformation)* )? 1845 ; 1846 1847 signalConditionInformation 1848 : ( CLASS_ORIGIN 1849 | SUBCLASS_ORIGIN 1850 | MESSAGE_TEXT 1851 | MYSQL_ERRNO 1852 | CONSTRAINT_CATALOG 1853 | CONSTRAINT_SCHEMA 1854 | CONSTRAINT_NAME 1855 | CATALOG_NAME 1856 | SCHEMA_NAME 1857 | TABLE_NAME 1858 | COLUMN_NAME 1859 | CURSOR_NAME 1860 ) '=' ( stringLiteral | DECIMAL_LITERAL | mysqlVariable | simpleId ) 1861 ; 1862 1863 diagnosticsStatement 1864 : GET ( CURRENT | STACKED )? DIAGNOSTICS ( 1865 ( variableClause '=' ( NUMBER | ROW_COUNT ) ( ',' variableClause '=' ( NUMBER | ROW_COUNT ) )* ) 1866 | ( CONDITION ( decimalLiteral | variableClause ) variableClause '=' diagnosticsConditionInformationName ( ',' variableClause '=' diagnosticsConditionInformationName )* ) 1867 ) 1868 ; 1869 1870 diagnosticsConditionInformationName 1871 : CLASS_ORIGIN 1872 | SUBCLASS_ORIGIN 1873 | RETURNED_SQLSTATE 1874 | MESSAGE_TEXT 1875 | MYSQL_ERRNO 1876 | CONSTRAINT_CATALOG 1877 | CONSTRAINT_SCHEMA 1878 | CONSTRAINT_NAME 1879 | CATALOG_NAME 1880 | SCHEMA_NAME 1881 | TABLE_NAME 1882 | COLUMN_NAME 1883 | CURSOR_NAME 1884 ; 1885 1886 // details 1887 1888 describeObjectClause 1889 : ( 1890 selectStatement | deleteStatement | insertStatement 1891 | replaceStatement | updateStatement 1892 ) #describeStatements 1893 | FOR CONNECTION uid #describeConnection 1894 ; 1895 1896 1897 // Common Clauses 1898 1899 // DB Objects 1900 1901 fullId 1902 : uid (DOT_ID | '.' uid)? 1903 ; 1904 1905 tableName 1906 : fullId 1907 ; 1908 1909 fullColumnName 1910 : uid (dottedId dottedId? )? 1911 | . dottedId dottedId? 1912 ; 1913 1914 indexColumnName 1915 : (uid | STRING_LITERAL) ('(' decimalLiteral ')')? sortType=(ASC | DESC)? 1916 ; 1917 1918 userName 1919 : STRING_USER_NAME | ID | STRING_LITERAL; 1920 1921 mysqlVariable 1922 : LOCAL_ID 1923 | GLOBAL_ID 1924 ; 1925 1926 charsetName 1927 : BINARY 1928 | charsetNameBase 1929 | STRING_LITERAL 1930 | CHARSET_REVERSE_QOUTE_STRING 1931 ; 1932 1933 collationName 1934 : uid | STRING_LITERAL; 1935 1936 engineName 1937 : ARCHIVE | BLACKHOLE | CSV | FEDERATED | INNODB | MEMORY 1938 | MRG_MYISAM | MYISAM | NDB | NDBCLUSTER | PERFORMANCE_SCHEMA 1939 | TOKUDB 1940 | ID 1941 | STRING_LITERAL | REVERSE_QUOTE_ID 1942 ; 1943 1944 uuidSet 1945 : decimalLiteral '-' decimalLiteral '-' decimalLiteral 1946 '-' decimalLiteral '-' decimalLiteral 1947 (':' decimalLiteral '-' decimalLiteral)+ 1948 ; 1949 1950 xid 1951 : globalTableUid=xuidStringId 1952 ( 1953 ',' qualifier=xuidStringId 1954 (',' idFormat=decimalLiteral)? 1955 )? 1956 ; 1957 1958 xuidStringId 1959 : STRING_LITERAL 1960 | BIT_STRING 1961 | HEXADECIMAL_LITERAL+ 1962 ; 1963 1964 authPlugin 1965 : uid | STRING_LITERAL 1966 ; 1967 1968 uid 1969 : simpleId 1970 //| DOUBLE_QUOTE_ID 1971 | REVERSE_QUOTE_ID 1972 | CHARSET_REVERSE_QOUTE_STRING 1973 ; 1974 1975 simpleId 1976 : ID 1977 | charsetNameBase 1978 | transactionLevelBase 1979 | engineName 1980 | privilegesBase 1981 | intervalTypeBase 1982 | dataTypeBase 1983 | keywordsCanBeId 1984 | functionNameBase 1985 ; 1986 1987 dottedId 1988 : DOT_ID 1989 | '.' uid 1990 ; 1991 1992 1993 // Literals 1994 1995 decimalLiteral 1996 : DECIMAL_LITERAL | ZERO_DECIMAL | ONE_DECIMAL | TWO_DECIMAL 1997 ; 1998 1999 fileSizeLiteral 2000 : FILESIZE_LITERAL | decimalLiteral; 2001 2002 stringLiteral 2003 : ( 2004 STRING_CHARSET_NAME? STRING_LITERAL 2005 | START_NATIONAL_STRING_LITERAL 2006 ) STRING_LITERAL+ 2007 | ( 2008 STRING_CHARSET_NAME? STRING_LITERAL 2009 | START_NATIONAL_STRING_LITERAL 2010 ) (COLLATE collationName)? 2011 ; 2012 2013 booleanLiteral 2014 : TRUE | FALSE; 2015 2016 hexadecimalLiteral 2017 : STRING_CHARSET_NAME? HEXADECIMAL_LITERAL; 2018 2019 nullNotnull 2020 : NOT? (NULL_LITERAL | NULL_SPEC_LITERAL) 2021 ; 2022 2023 constant 2024 : stringLiteral | decimalLiteral 2025 | '-' decimalLiteral 2026 | hexadecimalLiteral | booleanLiteral 2027 | REAL_LITERAL | BIT_STRING 2028 | NOT? nullLiteral=(NULL_LITERAL | NULL_SPEC_LITERAL) 2029 ; 2030 2031 2032 // Data Types 2033 2034 dataType 2035 : typeName=( 2036 CHAR | CHARACTER | VARCHAR | TINYTEXT | TEXT | MEDIUMTEXT | LONGTEXT 2037 | NCHAR | NVARCHAR | LONG 2038 ) 2039 VARYING? 2040 lengthOneDimension? binaryType=BINARY? 2041 ((CHARACTER SET | CHARSET) charsetName)? 2042 (COLLATE collationName | collateBinary=BINARY)? #stringDataType 2043 | NATIONAL typeName=(VARCHAR | CHARACTER) 2044 lengthOneDimension? BINARY? #nationalStringDataType 2045 | NCHAR typeName=VARCHAR 2046 lengthOneDimension? BINARY? #nationalStringDataType 2047 | NATIONAL typeName=(CHAR | CHARACTER) VARYING 2048 lengthOneDimension? BINARY? #nationalVaryingStringDataType 2049 | typeName=( 2050 TINYINT | SMALLINT | MEDIUMINT | INT | INTEGER | BIGINT 2051 | MIDDLEINT | INT1 | INT2 | INT3 | INT4 | INT8 2052 ) 2053 lengthOneDimension? (SIGNED | UNSIGNED)? ZEROFILL? #dimensionDataType 2054 | typeName=REAL 2055 lengthTwoDimension? (SIGNED | UNSIGNED)? ZEROFILL? #dimensionDataType 2056 | typeName=DOUBLE PRECISION? 2057 lengthTwoDimension? (SIGNED | UNSIGNED)? ZEROFILL? #dimensionDataType 2058 | typeName=(DECIMAL | DEC | FIXED | NUMERIC | FLOAT | FLOAT4 | FLOAT8) 2059 lengthTwoOptionalDimension? (SIGNED | UNSIGNED)? ZEROFILL? #dimensionDataType 2060 | typeName=( 2061 DATE | TINYBLOB | MEDIUMBLOB | LONGBLOB 2062 | BOOL | BOOLEAN | SERIAL 2063 ) #simpleDataType 2064 | typeName=( 2065 BIT | TIME | TIMESTAMP | DATETIME | BINARY 2066 | VARBINARY | BLOB | YEAR 2067 ) 2068 lengthOneDimension? #dimensionDataType 2069 | typeName=(ENUM | SET) 2070 collectionOptions BINARY? 2071 ((CHARACTER cs=SET | CHARSET) charsetName)? #collectionDataType 2072 | typeName=( 2073 GEOMETRYCOLLECTION | GEOMCOLLECTION | LINESTRING | MULTILINESTRING 2074 | MULTIPOINT | MULTIPOLYGON | POINT | POLYGON | JSON | GEOMETRY 2075 ) #spatialDataType 2076 | typeName=LONG VARCHAR? 2077 BINARY? 2078 ((CHARACTER SET | CHARSET) charsetName)? 2079 (COLLATE collationName)? #longVarcharDataType // LONG VARCHAR is the same as LONG 2080 | LONG VARBINARY #longVarbinaryDataType 2081 ; 2082 2083 collectionOptions 2084 : '(' STRING_LITERAL (',' STRING_LITERAL)* ')' 2085 ; 2086 2087 convertedDataType 2088 : typeName=(BINARY| NCHAR) lengthOneDimension? 2089 | typeName=CHAR lengthOneDimension? ((CHARACTER SET | CHARSET) charsetName)? 2090 | typeName=(DATE | DATETIME | TIME | JSON) 2091 | typeName=DECIMAL lengthTwoDimension? 2092 | (SIGNED | UNSIGNED) INTEGER? 2093 ; 2094 2095 lengthOneDimension 2096 : '(' decimalLiteral ')' 2097 ; 2098 2099 lengthTwoDimension 2100 : '(' decimalLiteral ',' decimalLiteral ')' 2101 ; 2102 2103 lengthTwoOptionalDimension 2104 : '(' decimalLiteral (',' decimalLiteral)? ')' 2105 ; 2106 2107 2108 // Common Lists 2109 2110 uidList 2111 : uid (',' uid)* 2112 ; 2113 2114 tables 2115 : tableName (',' tableName)* 2116 ; 2117 2118 indexColumnNames 2119 : '(' indexColumnName (',' indexColumnName)* ')' 2120 ; 2121 2122 expressions 2123 : expression (',' expression)* 2124 ; 2125 2126 expressionsWithDefaults 2127 : expressionOrDefault (',' expressionOrDefault)* 2128 ; 2129 2130 constants 2131 : constant (',' constant)* 2132 ; 2133 2134 simpleStrings 2135 : STRING_LITERAL (',' STRING_LITERAL)* 2136 ; 2137 2138 userVariables 2139 : LOCAL_ID (',' LOCAL_ID)* 2140 ; 2141 2142 2143 // Common Expressons 2144 2145 defaultValue 2146 : (NULL_LITERAL | unaryOperator? constant | currentTimestamp | '(' expression ')') (ON UPDATE currentTimestamp)? 2147 ; 2148 2149 currentTimestamp 2150 : 2151 ( 2152 (CURRENT_TIMESTAMP | LOCALTIME | LOCALTIMESTAMP) ('(' decimalLiteral? ')')? 2153 | NOW '(' decimalLiteral? ')' 2154 ) 2155 ; 2156 2157 expressionOrDefault 2158 : expression | DEFAULT 2159 ; 2160 2161 ifExists 2162 : IF EXISTS; 2163 2164 ifNotExists 2165 : IF NOT EXISTS; 2166 2167 2168 // Functions 2169 2170 functionCall 2171 : specificFunction #specificFunctionCall 2172 | aggregateWindowedFunction #aggregateFunctionCall 2173 | scalarFunctionName '(' functionArgs? ')' #scalarFunctionCall 2174 | fullId '(' functionArgs? ')' #udfFunctionCall 2175 | passwordFunctionClause #passwordFunctionCall 2176 ; 2177 2178 specificFunction 2179 : ( 2180 CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP 2181 | CURRENT_USER | LOCALTIME 2182 ) ('(' ')')? #simpleFunctionCall 2183 | CONVERT '(' expression separator=',' convertedDataType ')' #dataTypeFunctionCall 2184 | CONVERT '(' expression USING charsetName ')' #dataTypeFunctionCall 2185 | CAST '(' expression AS convertedDataType ')' #dataTypeFunctionCall 2186 | VALUES '(' fullColumnName ')' #valuesFunctionCall 2187 | CASE expression caseFuncAlternative+ 2188 (ELSE elseArg=functionArg)? END #caseExpressionFunctionCall 2189 | CASE caseFuncAlternative+ 2190 (ELSE elseArg=functionArg)? END #caseFunctionCall 2191 | CHAR '(' functionArgs (USING charsetName)? ')' #charFunctionCall 2192 | POSITION 2193 '(' 2194 ( 2195 positionString=stringLiteral 2196 | positionExpression=expression 2197 ) 2198 IN 2199 ( 2200 inString=stringLiteral 2201 | inExpression=expression 2202 ) 2203 ')' #positionFunctionCall 2204 | (SUBSTR | SUBSTRING) 2205 '(' 2206 ( 2207 sourceString=stringLiteral 2208 | sourceExpression=expression 2209 ) FROM 2210 ( 2211 fromDecimal=decimalLiteral 2212 | fromExpression=expression 2213 ) 2214 ( 2215 FOR 2216 ( 2217 forDecimal=decimalLiteral 2218 | forExpression=expression 2219 ) 2220 )? 2221 ')' #substrFunctionCall 2222 | TRIM 2223 '(' 2224 positioinForm=(BOTH | LEADING | TRAILING) 2225 ( 2226 sourceString=stringLiteral 2227 | sourceExpression=expression 2228 )? 2229 FROM 2230 ( 2231 fromString=stringLiteral 2232 | fromExpression=expression 2233 ) 2234 ')' #trimFunctionCall 2235 | TRIM 2236 '(' 2237 ( 2238 sourceString=stringLiteral 2239 | sourceExpression=expression 2240 ) 2241 FROM 2242 ( 2243 fromString=stringLiteral 2244 | fromExpression=expression 2245 ) 2246 ')' #trimFunctionCall 2247 | WEIGHT_STRING 2248 '(' 2249 (stringLiteral | expression) 2250 (AS stringFormat=(CHAR | BINARY) 2251 '(' decimalLiteral ')' )? levelsInWeightString? 2252 ')' #weightFunctionCall 2253 | EXTRACT 2254 '(' 2255 intervalType 2256 FROM 2257 ( 2258 sourceString=stringLiteral 2259 | sourceExpression=expression 2260 ) 2261 ')' #extractFunctionCall 2262 | GET_FORMAT 2263 '(' 2264 datetimeFormat=(DATE | TIME | DATETIME) 2265 ',' stringLiteral 2266 ')' #getFormatFunctionCall 2267 | JSON_VALUE 2268 '(' expression 2269 ',' expression 2270 (RETURNING convertedDataType)? 2271 ((NULL | ERROR | (DEFAULT defaultValue)) ON EMPTY)? 2272 ((NULL | ERROR | (DEFAULT defaultValue)) ON ERROR)? 2273 ')' #jsonValueFunctionCall 2274 ; 2275 2276 caseFuncAlternative 2277 : WHEN condition=functionArg 2278 THEN consequent=functionArg 2279 ; 2280 2281 levelsInWeightString 2282 : LEVEL levelInWeightListElement 2283 (',' levelInWeightListElement)* #levelWeightList 2284 | LEVEL 2285 firstLevel=decimalLiteral '-' lastLevel=decimalLiteral #levelWeightRange 2286 ; 2287 2288 levelInWeightListElement 2289 : decimalLiteral orderType=(ASC | DESC | REVERSE)? 2290 ; 2291 2292 aggregateWindowedFunction 2293 : (AVG | MAX | MIN | SUM) 2294 '(' aggregator=(ALL | DISTINCT)? functionArg ')' 2295 | COUNT '(' (starArg='*' | aggregator=ALL? functionArg) ')' 2296 | COUNT '(' aggregator=DISTINCT functionArgs ')' 2297 | ( 2298 BIT_AND | BIT_OR | BIT_XOR | STD | STDDEV | STDDEV_POP 2299 | STDDEV_SAMP | VAR_POP | VAR_SAMP | VARIANCE 2300 ) '(' aggregator=ALL? functionArg ')' 2301 | GROUP_CONCAT '(' 2302 aggregator=DISTINCT? functionArgs 2303 (ORDER BY 2304 orderByExpression (',' orderByExpression)* 2305 )? (SEPARATOR separator=STRING_LITERAL)? 2306 ')' 2307 ; 2308 2309 scalarFunctionName 2310 : functionNameBase 2311 | ASCII | CURDATE | CURRENT_DATE | CURRENT_TIME 2312 | CURRENT_TIMESTAMP | CURTIME | DATE_ADD | DATE_SUB 2313 | IF | INSERT | LOCALTIME | LOCALTIMESTAMP | MID | NOW 2314 | REPLACE | SUBSTR | SUBSTRING | SYSDATE | TRIM 2315 | UTC_DATE | UTC_TIME | UTC_TIMESTAMP 2316 ; 2317 2318 passwordFunctionClause 2319 : functionName=(PASSWORD | OLD_PASSWORD) '(' functionArg ')' 2320 ; 2321 2322 functionArgs 2323 : (constant | fullColumnName | functionCall | expression) 2324 ( 2325 ',' 2326 (constant | fullColumnName | functionCall | expression) 2327 )* 2328 ; 2329 2330 functionArg 2331 : constant | fullColumnName | functionCall | expression 2332 ; 2333 2334 2335 // Expressions, predicates 2336 2337 // Simplified approach for expression 2338 expression 2339 : notOperator=(NOT | '!') expression #notExpression 2340 | expression logicalOperator expression #logicalExpression 2341 | predicate IS NOT? testValue=(TRUE | FALSE | UNKNOWN) #isExpression 2342 | predicate #predicateExpression 2343 ; 2344 2345 predicate 2346 : predicate NOT? IN '(' (selectStatement | expressions) ')' #inPredicate 2347 | predicate IS nullNotnull #isNullPredicate 2348 | left=predicate comparisonOperator right=predicate #binaryComparisonPredicate 2349 | predicate comparisonOperator 2350 quantifier=(ALL | ANY | SOME) '(' selectStatement ')' #subqueryComparisonPredicate 2351 | predicate NOT? BETWEEN predicate AND predicate #betweenPredicate 2352 | predicate SOUNDS LIKE predicate #soundsLikePredicate 2353 | predicate NOT? LIKE predicate (ESCAPE STRING_LITERAL)? #likePredicate 2354 | predicate NOT? regex=(REGEXP | RLIKE) predicate #regexpPredicate 2355 | (LOCAL_ID VAR_ASSIGN)? expressionAtom #expressionAtomPredicate 2356 | predicate MEMBER OF '(' predicate ')' #jsonMemberOfPredicate 2357 ; 2358 2359 2360 // Add in ASTVisitor nullNotnull in constant 2361 expressionAtom 2362 : constant #constantExpressionAtom 2363 | fullColumnName #fullColumnNameExpressionAtom 2364 | functionCall #functionCallExpressionAtom 2365 | expressionAtom COLLATE collationName #collateExpressionAtom 2366 | mysqlVariable #mysqlVariableExpressionAtom 2367 | unaryOperator expressionAtom #unaryExpressionAtom 2368 | BINARY expressionAtom #binaryExpressionAtom 2369 | '(' expression (',' expression)* ')' #nestedExpressionAtom 2370 | ROW '(' expression (',' expression)+ ')' #nestedRowExpressionAtom 2371 | EXISTS '(' selectStatement ')' #existsExpressionAtom 2372 | '(' selectStatement ')' #subqueryExpressionAtom 2373 | INTERVAL expression intervalType #intervalExpressionAtom 2374 | left=expressionAtom bitOperator right=expressionAtom #bitExpressionAtom 2375 | left=expressionAtom mathOperator right=expressionAtom #mathExpressionAtom 2376 | left=expressionAtom jsonOperator right=expressionAtom #jsonExpressionAtom 2377 ; 2378 2379 unaryOperator 2380 : '!' | '~' | '+' | '-' | NOT 2381 ; 2382 2383 comparisonOperator 2384 : '=' | '>' | '<' | '<' '=' | '>' '=' 2385 | '<' '>' | '!' '=' | '<' '=' '>' 2386 ; 2387 2388 logicalOperator 2389 : AND | '&' '&' | XOR | OR | '|' '|' 2390 ; 2391 2392 bitOperator 2393 : '<' '<' | '>' '>' | '&' | '^' | '|' 2394 ; 2395 2396 mathOperator 2397 : '*' | '/' | '%' | DIV | MOD | '+' | '-' | '--' 2398 ; 2399 2400 jsonOperator 2401 : '-' '>' | '-' '>' '>' 2402 ; 2403 2404 // Simple id sets 2405 // (that keyword, which can be id) 2406 2407 charsetNameBase 2408 : ARMSCII8 | ASCII | BIG5 | CP1250 | CP1251 | CP1256 | CP1257 2409 | CP850 | CP852 | CP866 | CP932 | DEC8 | EUCJPMS | EUCKR 2410 | GB2312 | GBK | GEOSTD8 | GREEK | HEBREW | HP8 | KEYBCS2 2411 | KOI8R | KOI8U | LATIN1 | LATIN2 | LATIN5 | LATIN7 | MACCE 2412 | MACROMAN | SJIS | SWE7 | TIS620 | UCS2 | UJIS | UTF16 2413 | UTF16LE | UTF32 | UTF8 | UTF8MB3 | UTF8MB4 2414 ; 2415 2416 transactionLevelBase 2417 : REPEATABLE | COMMITTED | UNCOMMITTED | SERIALIZABLE 2418 ; 2419 2420 privilegesBase 2421 : TABLES | ROUTINE | EXECUTE | FILE | PROCESS 2422 | RELOAD | SHUTDOWN | SUPER | PRIVILEGES 2423 ; 2424 2425 intervalTypeBase 2426 : QUARTER | MONTH | DAY | HOUR 2427 | MINUTE | WEEK | SECOND | MICROSECOND 2428 ; 2429 2430 dataTypeBase 2431 : DATE | TIME | TIMESTAMP | DATETIME | YEAR | ENUM | TEXT 2432 ; 2433 2434 keywordsCanBeId 2435 : ACCOUNT | ACTION | AFTER | AGGREGATE | ALGORITHM | ANY 2436 | AT | AUDIT_ADMIN | AUTHORS | AUTOCOMMIT | AUTOEXTEND_SIZE 2437 | AUTO_INCREMENT | AVG | AVG_ROW_LENGTH | BACKUP_ADMIN | BEGIN | BINLOG | BINLOG_ADMIN | BINLOG_ENCRYPTION_ADMIN | BIT | BIT_AND | BIT_OR | BIT_XOR 2438 | BLOCK | BOOL | BOOLEAN | BTREE | CACHE | CASCADED | CHAIN | CHANGED 2439 | CHANNEL | CHECKSUM | PAGE_CHECKSUM | CATALOG_NAME | CIPHER 2440 | CLASS_ORIGIN | CLIENT | CLONE_ADMIN | CLOSE | COALESCE | CODE 2441 | COLUMNS | COLUMN_FORMAT | COLUMN_NAME | COMMENT | COMMIT | COMPACT 2442 | COMPLETION | COMPRESSED | COMPRESSION | CONCURRENT 2443 | CONNECTION | CONNECTION_ADMIN | CONSISTENT | CONSTRAINT_CATALOG | CONSTRAINT_NAME 2444 | CONSTRAINT_SCHEMA | CONTAINS | CONTEXT 2445 | CONTRIBUTORS | COPY | COUNT | CPU | CURRENT | CURSOR_NAME 2446 | DATA | DATAFILE | DEALLOCATE 2447 | DEFAULT_AUTH | DEFINER | DELAY_KEY_WRITE | DES_KEY_FILE | DIAGNOSTICS | DIRECTORY 2448 | DISABLE | DISCARD | DISK | DO | DUMPFILE | DUPLICATE 2449 | DYNAMIC | ENABLE | ENCRYPTION | ENCRYPTION_KEY_ADMIN | END | ENDS | ENGINE | ENGINES 2450 | ERROR | ERRORS | ESCAPE | EVEN | EVENT | EVENTS | EVERY 2451 | EXCHANGE | EXCLUSIVE | EXPIRE | EXPORT | EXTENDED | EXTENT_SIZE | FAST | FAULTS 2452 | FIELDS | FILE_BLOCK_SIZE | FILTER | FIREWALL_ADMIN | FIREWALL_USER | FIRST | FIXED | FLUSH 2453 | FOLLOWS | FOUND | FULL | FUNCTION | GENERAL | GLOBAL | GRANTS | GROUP | GROUP_CONCAT 2454 | GROUP_REPLICATION | GROUP_REPLICATION_ADMIN | HANDLER | HASH | HELP | HOST | HOSTS | IDENTIFIED 2455 | IGNORE_SERVER_IDS | IMPORT | INDEXES | INITIAL_SIZE | INNODB_REDO_LOG_ARCHIVE 2456 | INPLACE | INSERT_METHOD | INSTALL | INSTANCE | INTERNAL | INVOKER | IO 2457 | IO_THREAD | IPC | ISOLATION | ISSUER | JSON | KEY_BLOCK_SIZE 2458 | LANGUAGE | LAST | LEAVES | LESS | LEVEL | LIST | LOCAL 2459 | LOGFILE | LOGS | MASTER | MASTER_AUTO_POSITION 2460 | MASTER_CONNECT_RETRY | MASTER_DELAY 2461 | MASTER_HEARTBEAT_PERIOD | MASTER_HOST | MASTER_LOG_FILE 2462 | MASTER_LOG_POS | MASTER_PASSWORD | MASTER_PORT 2463 | MASTER_RETRY_COUNT | MASTER_SSL | MASTER_SSL_CA 2464 | MASTER_SSL_CAPATH | MASTER_SSL_CERT | MASTER_SSL_CIPHER 2465 | MASTER_SSL_CRL | MASTER_SSL_CRLPATH | MASTER_SSL_KEY 2466 | MASTER_TLS_VERSION | MASTER_USER 2467 | MAX_CONNECTIONS_PER_HOUR | MAX_QUERIES_PER_HOUR 2468 | MAX | MAX_ROWS | MAX_SIZE | MAX_UPDATES_PER_HOUR 2469 | MAX_USER_CONNECTIONS | MEDIUM | MEMBER | MEMORY | MERGE | MESSAGE_TEXT 2470 | MID | MIGRATE 2471 | MIN | MIN_ROWS | MODE | MODIFY | MUTEX | MYSQL | MYSQL_ERRNO | NAME | NAMES 2472 | NCHAR | NDB_STORED_USER | NEVER | NEXT | NO | NODEGROUP | NONE | NUMBER | OFFLINE | OFFSET 2473 | OF | OJ | OLD_PASSWORD | ONE | ONLINE | ONLY | OPEN | OPTIMIZER_COSTS 2474 | OPTIONS | ORDER | OWNER | PACK_KEYS | PAGE | PARSER | PARTIAL 2475 | PARTITIONING | PARTITIONS | PASSWORD | PERSIST_RO_VARIABLES_ADMIN | PHASE | PLUGINS 2476 | PLUGIN_DIR | PLUGIN | PORT | PRECEDES | PREPARE | PRESERVE | PREV 2477 | PROCESSLIST | PROFILE | PROFILES | PROXY | QUERY | QUICK 2478 | REBUILD | RECOVER | REDO_BUFFER_SIZE | REDUNDANT 2479 | RELAY | RELAYLOG | RELAY_LOG_FILE | RELAY_LOG_POS | REMOVE 2480 | REORGANIZE | REPAIR | REPLICATE_DO_DB | REPLICATE_DO_TABLE 2481 | REPLICATE_IGNORE_DB | REPLICATE_IGNORE_TABLE 2482 | REPLICATE_REWRITE_DB | REPLICATE_WILD_DO_TABLE 2483 | REPLICATE_WILD_IGNORE_TABLE | REPLICATION | REPLICATION_APPLIER | REPLICATION_SLAVE_ADMIN | RESET 2484 | RESOURCE_GROUP_ADMIN | RESOURCE_GROUP_USER | RESUME 2485 | RETURNED_SQLSTATE | RETURNS | ROLE | ROLE_ADMIN | ROLLBACK | ROLLUP | ROTATE | ROW | ROWS 2486 | ROW_FORMAT | SAVEPOINT | SCHEDULE | SCHEMA_NAME | SECURITY | SERIAL | SERVER 2487 | SESSION | SESSION_VARIABLES_ADMIN | SET_USER_ID | SHARE | SHARED | SHOW_ROUTINE | SIGNED | SIMPLE | SLAVE 2488 | SLOW | SNAPSHOT | SOCKET | SOME | SONAME | SOUNDS | SOURCE 2489 | SQL_AFTER_GTIDS | SQL_AFTER_MTS_GAPS | SQL_BEFORE_GTIDS 2490 | SQL_BUFFER_RESULT | SQL_CACHE | SQL_NO_CACHE | SQL_THREAD 2491 | STACKED | START | STARTS | STATS_AUTO_RECALC | STATS_PERSISTENT 2492 | STATS_SAMPLE_PAGES | STATUS | STD | STDDEV | STDDEV_POP | STDDEV_SAMP | STOP | STORAGE | STRING 2493 | SUBCLASS_ORIGIN | SUBJECT | SUBPARTITION | SUBPARTITIONS | SUM | SUSPEND | SWAPS 2494 | SWITCHES | SYSTEM_VARIABLES_ADMIN | TABLE_NAME | TABLESPACE | TABLE_ENCRYPTION_ADMIN 2495 | TEMPORARY | TEMPTABLE | THAN | TRADITIONAL 2496 | TRANSACTION | TRANSACTIONAL | TRIGGERS | TRUNCATE | UNDEFINED | UNDOFILE 2497 | UNDO_BUFFER_SIZE | UNINSTALL | UNKNOWN | UNTIL | UPGRADE | USER | USE_FRM | USER_RESOURCES 2498 | VALIDATION | VALUE | VAR_POP | VAR_SAMP | VARIABLES | VARIANCE | VERSION_TOKEN_ADMIN | VIEW | WAIT | WARNINGS | WITHOUT 2499 | WORK | WRAPPER | X509 | XA | XA_RECOVER_ADMIN | XML 2500 ; 2501 2502 functionNameBase 2503 : ABS | ACOS | ADDDATE | ADDTIME | AES_DECRYPT | AES_ENCRYPT 2504 | AREA | ASBINARY | ASIN | ASTEXT | ASWKB | ASWKT 2505 | ASYMMETRIC_DECRYPT | ASYMMETRIC_DERIVE 2506 | ASYMMETRIC_ENCRYPT | ASYMMETRIC_SIGN | ASYMMETRIC_VERIFY 2507 | ATAN | ATAN2 | BENCHMARK | BIN | BIT_COUNT | BIT_LENGTH 2508 | BUFFER | CEIL | CEILING | CENTROID | CHARACTER_LENGTH 2509 | CHARSET | CHAR_LENGTH | COERCIBILITY | COLLATION 2510 | COMPRESS | CONCAT | CONCAT_WS | CONNECTION_ID | CONV 2511 | CONVERT_TZ | COS | COT | COUNT | CRC32 2512 | CREATE_ASYMMETRIC_PRIV_KEY | CREATE_ASYMMETRIC_PUB_KEY 2513 | CREATE_DH_PARAMETERS | CREATE_DIGEST | CROSSES | DATABASE | DATE 2514 | DATEDIFF | DATE_FORMAT | DAY | DAYNAME | DAYOFMONTH 2515 | DAYOFWEEK | DAYOFYEAR | DECODE | DEGREES | DES_DECRYPT 2516 | DES_ENCRYPT | DIMENSION | DISJOINT | ELT | ENCODE 2517 | ENCRYPT | ENDPOINT | ENVELOPE | EQUALS | EXP | EXPORT_SET 2518 | EXTERIORRING | EXTRACTVALUE | FIELD | FIND_IN_SET | FLOOR 2519 | FORMAT | FOUND_ROWS | FROM_BASE64 | FROM_DAYS 2520 | FROM_UNIXTIME | GEOMCOLLFROMTEXT | GEOMCOLLFROMWKB 2521 | GEOMETRYCOLLECTION | GEOMETRYCOLLECTIONFROMTEXT 2522 | GEOMETRYCOLLECTIONFROMWKB | GEOMETRYFROMTEXT 2523 | GEOMETRYFROMWKB | GEOMETRYN | GEOMETRYTYPE | GEOMFROMTEXT 2524 | GEOMFROMWKB | GET_FORMAT | GET_LOCK | GLENGTH | GREATEST 2525 | GTID_SUBSET | GTID_SUBTRACT | HEX | HOUR | IFNULL 2526 | INET6_ATON | INET6_NTOA | INET_ATON | INET_NTOA | INSTR 2527 | INTERIORRINGN | INTERSECTS | INVISIBLE 2528 | ISCLOSED | ISEMPTY | ISNULL 2529 | ISSIMPLE | IS_FREE_LOCK | IS_IPV4 | IS_IPV4_COMPAT 2530 | IS_IPV4_MAPPED | IS_IPV6 | IS_USED_LOCK | LAST_INSERT_ID 2531 | LCASE | LEAST | LEFT | LENGTH | LINEFROMTEXT | LINEFROMWKB 2532 | LINESTRING | LINESTRINGFROMTEXT | LINESTRINGFROMWKB | LN 2533 | LOAD_FILE | LOCATE | LOG | LOG10 | LOG2 | LOWER | LPAD 2534 | LTRIM | MAKEDATE | MAKETIME | MAKE_SET | MASTER_POS_WAIT 2535 | MBRCONTAINS | MBRDISJOINT | MBREQUAL | MBRINTERSECTS 2536 | MBROVERLAPS | MBRTOUCHES | MBRWITHIN | MD5 | MICROSECOND 2537 | MINUTE | MLINEFROMTEXT | MLINEFROMWKB | MOD| MONTH | MONTHNAME 2538 | MPOINTFROMTEXT | MPOINTFROMWKB | MPOLYFROMTEXT 2539 | MPOLYFROMWKB | MULTILINESTRING | MULTILINESTRINGFROMTEXT 2540 | MULTILINESTRINGFROMWKB | MULTIPOINT | MULTIPOINTFROMTEXT 2541 | MULTIPOINTFROMWKB | MULTIPOLYGON | MULTIPOLYGONFROMTEXT 2542 | MULTIPOLYGONFROMWKB | NAME_CONST | NULLIF | NUMGEOMETRIES 2543 | NUMINTERIORRINGS | NUMPOINTS | OCT | OCTET_LENGTH | ORD 2544 | OVERLAPS | PERIOD_ADD | PERIOD_DIFF | PI | POINT 2545 | POINTFROMTEXT | POINTFROMWKB | POINTN | POLYFROMTEXT 2546 | POLYFROMWKB | POLYGON | POLYGONFROMTEXT | POLYGONFROMWKB 2547 | POSITION| POW | POWER | QUARTER | QUOTE | RADIANS | RAND 2548 | RANDOM_BYTES | RELEASE_LOCK | REVERSE | RIGHT | ROUND 2549 | ROW_COUNT | RPAD | RTRIM | SECOND | SEC_TO_TIME 2550 | SCHEMA | SESSION_USER | SESSION_VARIABLES_ADMIN 2551 | SHA | SHA1 | SHA2 | SIGN | SIN | SLEEP 2552 | SOUNDEX | SQL_THREAD_WAIT_AFTER_GTIDS | SQRT | SRID 2553 | STARTPOINT | STRCMP | STR_TO_DATE | ST_AREA | ST_ASBINARY 2554 | ST_ASTEXT | ST_ASWKB | ST_ASWKT | ST_BUFFER | ST_CENTROID 2555 | ST_CONTAINS | ST_CROSSES | ST_DIFFERENCE | ST_DIMENSION 2556 | ST_DISJOINT | ST_DISTANCE | ST_ENDPOINT | ST_ENVELOPE 2557 | ST_EQUALS | ST_EXTERIORRING | ST_GEOMCOLLFROMTEXT 2558 | ST_GEOMCOLLFROMTXT | ST_GEOMCOLLFROMWKB 2559 | ST_GEOMETRYCOLLECTIONFROMTEXT 2560 | ST_GEOMETRYCOLLECTIONFROMWKB | ST_GEOMETRYFROMTEXT 2561 | ST_GEOMETRYFROMWKB | ST_GEOMETRYN | ST_GEOMETRYTYPE 2562 | ST_GEOMFROMTEXT | ST_GEOMFROMWKB | ST_INTERIORRINGN 2563 | ST_INTERSECTION | ST_INTERSECTS | ST_ISCLOSED | ST_ISEMPTY 2564 | ST_ISSIMPLE | ST_LINEFROMTEXT | ST_LINEFROMWKB 2565 | ST_LINESTRINGFROMTEXT | ST_LINESTRINGFROMWKB 2566 | ST_NUMGEOMETRIES | ST_NUMINTERIORRING 2567 | ST_NUMINTERIORRINGS | ST_NUMPOINTS | ST_OVERLAPS 2568 | ST_POINTFROMTEXT | ST_POINTFROMWKB | ST_POINTN 2569 | ST_POLYFROMTEXT | ST_POLYFROMWKB | ST_POLYGONFROMTEXT 2570 | ST_POLYGONFROMWKB | ST_SRID | ST_STARTPOINT 2571 | ST_SYMDIFFERENCE | ST_TOUCHES | ST_UNION | ST_WITHIN 2572 | ST_X | ST_Y | SUBDATE | SUBSTRING_INDEX | SUBTIME 2573 | SYSTEM_USER | TAN | TIME | TIMEDIFF | TIMESTAMP 2574 | TIMESTAMPADD | TIMESTAMPDIFF | TIME_FORMAT | TIME_TO_SEC 2575 | TOUCHES | TO_BASE64 | TO_DAYS | TO_SECONDS | UCASE 2576 | UNCOMPRESS | UNCOMPRESSED_LENGTH | UNHEX | UNIX_TIMESTAMP 2577 | UPDATEXML | UPPER | UUID | UUID_SHORT 2578 | VALIDATE_PASSWORD_STRENGTH | VERSION | VISIBLE 2579 | WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS | WEEK | WEEKDAY 2580 | WEEKOFYEAR | WEIGHT_STRING | WITHIN | YEAR | YEARWEEK 2581 | Y_FUNCTION | X_FUNCTION 2582 | JSON_ARRAY | JSON_OBJECT | JSON_QUOTE | JSON_CONTAINS | JSON_CONTAINS_PATH 2583 | JSON_EXTRACT | JSON_KEYS | JSON_OVERLAPS | JSON_SEARCH | JSON_VALUE 2584 | JSON_ARRAY_APPEND | JSON_ARRAY_INSERT | JSON_INSERT | JSON_MERGE 2585 | JSON_MERGE_PATCH | JSON_MERGE_PRESERVE | JSON_REMOVE | JSON_REPLACE 2586 | JSON_SET | JSON_UNQUOTE | JSON_DEPTH | JSON_LENGTH | JSON_TYPE 2587 | JSON_VALID | JSON_TABLE | JSON_SCHEMA_VALID | JSON_SCHEMA_VALIDATION_REPORT 2588 | JSON_PRETTY | JSON_STORAGE_FREE | JSON_STORAGE_SIZE | JSON_ARRAYAGG 2589 | JSON_OBJECTAGG 2590 ;