├── .eslintrc ├── .github ├── code.png └── workflows │ └── ci.yml ├── .gitignore ├── .vscode └── launch.json ├── examples ├── basic.ts ├── custom-parser-listener.ts ├── error-handling.ts ├── get-node-at-offset.ts ├── get-query-type.ts ├── is-ddl.ts ├── is-reserved-keyword.ts ├── mode.ts ├── parse-context.ts ├── split-statements.ts └── version.ts ├── package.json ├── readme.md ├── scripts └── generate-rule-names.ts ├── src ├── __tests__ │ ├── __snapshots__ │ │ └── parser.ts.snap │ ├── parser.ts │ └── statements.txt ├── grammar │ ├── .antlr │ │ ├── MySQLLexer.interp │ │ ├── MySQLLexer.java │ │ ├── MySQLLexer.tokens │ │ ├── MySQLParser.interp │ │ ├── MySQLParser.java │ │ └── MySQLParser.tokens │ ├── MySQLBaseLexer.ts │ ├── MySQLBaseParser.ts │ ├── MySQLLexer.g4 │ ├── MySQLLexer.interp │ ├── MySQLLexer.tokens │ ├── MySQLLexer.ts │ ├── MySQLParser.g4 │ ├── MySQLParser.interp │ ├── MySQLParser.tokens │ ├── MySQLParser.ts │ ├── MySQLParserListener.ts │ ├── common.ts │ ├── keywords │ │ ├── index.ts │ │ ├── keyword_list_56.ts │ │ ├── keyword_list_57.ts │ │ └── keyword_list_80.ts │ └── predefined.tokens ├── index.ts ├── lib │ ├── interval-to-array.ts │ ├── parsers-common.ts │ ├── resolve-references.ts │ ├── rule-name.ts │ ├── skip-leading-whitespace.ts │ ├── unquote.ts │ └── version.ts ├── listeners │ ├── errors.ts │ ├── lexer-error-listener.ts │ ├── parser-error-listener.ts │ └── parser-listener.ts └── parser.ts ├── tsconfig.json └── yarn.lock /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "ignorePatterns": ["/node_modules/", "/dist/", "/examples/"], 3 | "parserOptions": { 4 | "ecmaVersion": 2019 5 | }, 6 | "env": { 7 | "node": true 8 | }, 9 | "extends": ["eslint:recommended", "prettier"], 10 | "overrides": [ 11 | { 12 | "files": ["*.{ts,tsx}"], 13 | "parser": "@typescript-eslint/parser", 14 | "parserOptions": { 15 | "project": "./tsconfig.json" 16 | }, 17 | "extends": [ 18 | "plugin:@typescript-eslint/eslint-recommended", 19 | "plugin:@typescript-eslint/recommended", 20 | "plugin:@typescript-eslint/recommended-requiring-type-checking", 21 | "prettier/@typescript-eslint" 22 | ] 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /.github/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevenmiller888/ts-mysql-parser/481abe71c8b039266864ec7ca88d2aee8e2b7890/.github/code.png -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push] 4 | 5 | env: 6 | CI: true 7 | 8 | jobs: 9 | test: 10 | runs-on: ubuntu-latest 11 | 12 | strategy: 13 | matrix: 14 | node-version: [12] 15 | 16 | steps: 17 | - uses: actions/checkout@v1 18 | 19 | - name: Install Node.js 20 | uses: actions/setup-node@v1 21 | with: 22 | node-version: ${{ matrix.node-version }} 23 | 24 | - name: Cache Node.js dependencies 25 | uses: actions/cache@v1 26 | with: 27 | path: node_modules 28 | key: node${{ matrix.node-version }}-${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} 29 | 30 | - name: Install Node.js dependencies 31 | run: yarn --frozen-lockfile 32 | 33 | - name: Build TypeScript 34 | run: yarn build 35 | 36 | - name: Lint files 37 | run: yarn lint 38 | 39 | - name: Run tests 40 | run: yarn test 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | *.log 4 | *.DS_STORE 5 | *.tsbuildinfo -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "type": "node", 6 | "request": "launch", 7 | "name": "Jest Current File", 8 | "program": "${workspaceFolder}/node_modules/.bin/jest", 9 | "args": ["${relativeFile}"], 10 | "console": "integratedTerminal", 11 | "internalConsoleOptions": "neverOpen", 12 | "skipFiles": ["/**"] 13 | }, 14 | { 15 | "type": "node", 16 | "name": "Jest All", 17 | "request": "launch", 18 | "args": ["--runInBand", "--forceExit"], 19 | "cwd": "${workspaceFolder}", 20 | "console": "integratedTerminal", 21 | "internalConsoleOptions": "neverOpen", 22 | "program": "${workspaceFolder}/node_modules/jest/bin/jest", 23 | "skipFiles": ["/**"] 24 | } 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /examples/basic.ts: -------------------------------------------------------------------------------- 1 | import MySQLParser from '../src' 2 | 3 | const parser = new MySQLParser() 4 | const result = parser.parse(`SELECT id FROM users`) 5 | console.log(result) 6 | -------------------------------------------------------------------------------- /examples/custom-parser-listener.ts: -------------------------------------------------------------------------------- 1 | import MySQLParser, { MySQLParserListener } from '../src' 2 | import { RuleContext } from 'antlr4ts' 3 | 4 | class ParserListener implements MySQLParserListener { 5 | exitEveryRule(ctx: RuleContext): void { 6 | console.log(ctx) 7 | } 8 | } 9 | 10 | const parserListener = new ParserListener() 11 | 12 | const parser = new MySQLParser({ 13 | parserListener 14 | }) 15 | 16 | parser.parse(`SELECT id FROM users`) 17 | -------------------------------------------------------------------------------- /examples/error-handling.ts: -------------------------------------------------------------------------------- 1 | import MySQLParser from '../src' 2 | 3 | const parser = new MySQLParser() 4 | 5 | // Lexer error 6 | const result1 = parser.parse(`"`) 7 | console.log(result1.lexerError) 8 | 9 | // Parser error 10 | const result2 = parser.parse(`SELCT id FROM users`) 11 | console.log(result2.parserError) 12 | -------------------------------------------------------------------------------- /examples/get-node-at-offset.ts: -------------------------------------------------------------------------------- 1 | import MySQLParser from '../src' 2 | 3 | const parser = new MySQLParser() 4 | 5 | const result = parser.parse(`SELECT id FROM users`) 6 | 7 | const tableRef = parser.getNodeAtOffset(result, 18) 8 | console.log(tableRef) // table "users" 9 | 10 | const columnRef = parser.getNodeAtOffset(result, 7) 11 | console.log(columnRef) // column "id" 12 | -------------------------------------------------------------------------------- /examples/get-query-type.ts: -------------------------------------------------------------------------------- 1 | import MySQLParser, { MySQLQueryType } from '../src' 2 | 3 | const parser = new MySQLParser() 4 | 5 | const result = parser.parse(`SELECT id FROM users`) 6 | 7 | const queryType = parser.getQueryType(result) 8 | console.log(queryType === MySQLQueryType.QtSelect) // true 9 | -------------------------------------------------------------------------------- /examples/is-ddl.ts: -------------------------------------------------------------------------------- 1 | import MySQLParser from '../src' 2 | 3 | const parser = new MySQLParser() 4 | 5 | const result = parser.parse(`SELECT id FROM users`) 6 | 7 | const isDDL = parser.isDDL(result) 8 | console.log(isDDL) // false 9 | -------------------------------------------------------------------------------- /examples/is-reserved-keyword.ts: -------------------------------------------------------------------------------- 1 | import MySQLParser from '../src' 2 | 3 | const parser = new MySQLParser() 4 | 5 | const isFromReserved = parser.isReservedKeyword('FROM') 6 | console.log(isFromReserved) // true 7 | 8 | const isFooReserved = parser.isReservedKeyword('FOO') 9 | console.log(isFooReserved) // false 10 | -------------------------------------------------------------------------------- /examples/mode.ts: -------------------------------------------------------------------------------- 1 | import MySQLParser, { SqlMode } from '../src' 2 | 3 | new MySQLParser({ 4 | mode: SqlMode.AnsiQuotes 5 | }) 6 | -------------------------------------------------------------------------------- /examples/parse-context.ts: -------------------------------------------------------------------------------- 1 | import MySQLParser, { RuleName } from '../src' 2 | 3 | const parser = new MySQLParser() 4 | const result = parser.parse(`FROM users`, RuleName.fromClause) 5 | console.log(result) 6 | -------------------------------------------------------------------------------- /examples/split-statements.ts: -------------------------------------------------------------------------------- 1 | import MySQLParser from '../src' 2 | 3 | const parser = new MySQLParser() 4 | 5 | const statements = parser.splitStatements(`SELECT * FROM users; SELECT * FROM posts;`) 6 | 7 | for (const statement of statements) { 8 | const result = parser.parse(statement.text) 9 | console.log(result) 10 | } 11 | 12 | const statement = parser.getStatementAtOffset(statements, 30) 13 | console.log(statement) 14 | -------------------------------------------------------------------------------- /examples/version.ts: -------------------------------------------------------------------------------- 1 | import MySQLParser from '../src' 2 | 3 | // "CREATE ROLE" was added in MySQL 8.0.0 4 | const query = 'CREATE ROLE app_developer' 5 | 6 | const parser1 = new MySQLParser({ 7 | version: '5.7.0' 8 | }) 9 | 10 | const result1 = parser1.parse(query) 11 | console.log(result1.parserError) // parser error for 5.7.0 12 | 13 | const parser2 = new MySQLParser({ 14 | version: '8.0.0' 15 | }) 16 | 17 | const result2 = parser2.parse(query) 18 | console.log(result2.parserError) // no error for 8.0.0 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ts-mysql-parser", 3 | "version": "0.2.0", 4 | "description": "A standalone, grammar-complete MySQL parser.", 5 | "license": "MIT", 6 | "repository": "stevenmiller888/ts-mysql-parser", 7 | "author": "Steven Miller (https://github.com/stevenmiller888)", 8 | "engines": { 9 | "node": ">=12.13" 10 | }, 11 | "keywords": [ 12 | "typescript", 13 | "mysql-parser", 14 | "sql-parser", 15 | "parser", 16 | "mysql", 17 | "sql" 18 | ], 19 | "files": [ 20 | "dist" 21 | ], 22 | "main": "dist/index.js", 23 | "types": "dist/index.d.ts", 24 | "scripts": { 25 | "pub": "np", 26 | "test": "jest", 27 | "lint": "eslint src/**/*.ts", 28 | "build-parser": "antlr4ts -Dlanguage=JavaScript -listener ./src/grammar/MySQLLexer.g4 ./src/grammar/MySQLParser.g4", 29 | "build": "tsc", 30 | "watch": "tsc -b -w", 31 | "clean": "rm -rf dist" 32 | }, 33 | "prettier": { 34 | "semi": false, 35 | "singleQuote": true, 36 | "printWidth": 120 37 | }, 38 | "jest": { 39 | "preset": "ts-jest", 40 | "testPathIgnorePatterns": [ 41 | "/node_modules/", 42 | "/dist/" 43 | ], 44 | "testEnvironment": "node" 45 | }, 46 | "lint-staged": { 47 | "*.{js,jsx,ts,tsx}": [ 48 | "eslint --fix", 49 | "prettier --write" 50 | ], 51 | "*.{yml,md,json}": [ 52 | "prettier --write" 53 | ] 54 | }, 55 | "husky": { 56 | "hooks": { 57 | "pre-commit": "lint-staged" 58 | } 59 | }, 60 | "dependencies": { 61 | "antlr4ts": "^0.5.0-alpha.3", 62 | "typescript": "^3.8.3" 63 | }, 64 | "devDependencies": { 65 | "@types/jest": "^25.1.3", 66 | "@types/node": "^13.7.7", 67 | "@types/prettier": "^1.19.0", 68 | "@typescript-eslint/eslint-plugin": "^2.22.0", 69 | "@typescript-eslint/parser": "^2.22.0", 70 | "antlr4ts-cli": "^0.5.0-alpha.3", 71 | "eslint": "^6.8.0", 72 | "eslint-config-prettier": "^6.10.0", 73 | "husky": "^4.2.3", 74 | "jest": "^25.1.0", 75 | "lint-staged": "^10.0.8", 76 | "np": "^6.2.0", 77 | "prettier": "^1.19.1", 78 | "ts-jest": "^25.2.1", 79 | "ts-node": "^8.6.2" 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # ts-mysql-parser 2 | 3 | ![Alt Text](https://github.com/stevenmiller888/ts-mysql-parser/workflows/CI/badge.svg) 4 | 5 | > A standalone, grammar-complete MySQL parser. 6 | 7 | ![Alt Text](https://github.com/stevenmiller888/ts-mysql-parser/raw/master/.github/code.png) 8 | 9 | ## Features 10 | 11 | - Covers 100% of the MySQL grammar 12 | - Supports all versions of MySQL 13 | - Supports multiple statements 14 | - Supports MySQL mode and character sets 15 | - Custom lexer and parser listeners 16 | 17 | ## Installation 18 | 19 | ```shell 20 | yarn add ts-mysql-parser 21 | # or 22 | npm install ts-mysql-parser 23 | ``` 24 | 25 | ## Usage 26 | 27 | ```typescript 28 | import MySQLParser, { SqlMode, MySQLQueryType } from 'ts-mysql-parser' 29 | 30 | const parser = new MySQLParser({ 31 | version: '5.7.7', 32 | mode: SqlMode.AnsiQuotes 33 | }) 34 | 35 | const result = parser.parse('SELECT id FROM users') 36 | 37 | const queryType = parser.getQueryType(result) 38 | console.log(queryType === MySQLQueryType.QtSelect) // true 39 | 40 | const tableRef = parser.getNodeAtOffset(result, 18) 41 | console.log(tableRef) // table 'users' 42 | 43 | const columnRef = parser.getNodeAtOffset(result, 7) 44 | console.log(columnRef) // column 'id' 45 | ``` 46 | 47 | ## API 48 | 49 | ### new MySQLParser(options) 50 | 51 | Create a new instance of MySQLParser. 52 | 53 | The available options are: 54 | 55 | - `version`: the MySQL server version (e.g. `'5.7.7'`) 56 | - `mode`: the MySQL server [mode](https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html) to run in (e.g. `SqlMode.AnsiQuotes`) 57 | - `charsets`: the MySQL server [character sets](https://dev.mysql.com/doc/refman/8.0/en/charset-configuration.html) to support (e.g. `[ '_utf8' ]`) 58 | 59 | #### .parse() 60 | 61 | Parse a query. 62 | 63 | ```typescript 64 | parser.parse('SELECT id FROM users') 65 | ``` 66 | 67 | #### .getQueryType() 68 | 69 | Get the query type of the statement. 70 | 71 | ```typescript 72 | const result = parser.parse('SELECT id FROM users') 73 | const queryType = parser.getQueryType(parseResult) 74 | console.log(queryType === MySQLQueryType.QtSelect) // true 75 | ``` 76 | 77 | #### .getNodeAtOffset() 78 | 79 | Get a node in the parse tree at the given offset. 80 | 81 | ```typescript 82 | const result = parser.parse('SELECT id FROM users') 83 | const node = parser.getNodeAtOffset(parseResult, 18) 84 | console.log(node) // "users" table 85 | ``` 86 | 87 | #### .splitStatements() 88 | 89 | Split the text into multiple statements, optionally specifying the line break and delimiter. 90 | 91 | ```typescript 92 | parser.splitStatements(`SELECT * from users; SELECT * FROM posts`, '\n', ';') 93 | ``` 94 | 95 | #### .getStatementAtOffset() 96 | 97 | Get the MySQL statement at the given offset. 98 | 99 | ```typescript 100 | const statements = parser.splitStatements(`SELECT * from users; SELECT * FROM posts`, '\n', ';') 101 | const statement = parser.getStatementAtOffset(statements, 30) 102 | console.log(statement) // SELECT * FROM posts 103 | ``` 104 | 105 | #### .isKeyword() 106 | 107 | Check if the given text is a MySQL keyword. 108 | 109 | ```typescript 110 | parser.isKeyword('TIME') // true 111 | ``` 112 | 113 | #### .isReservedKeyword() 114 | 115 | Check if the given text is a MySQL reserved keyword. 116 | 117 | ```typescript 118 | parser.isReservedKeyword('TIME') // false 119 | ``` 120 | 121 | ## Using Custom Listeners 122 | 123 | You can use your own custom listeners to hook into the parse tree. See `examples/custom-parser-listener.ts` for an example of how to do this. 124 | 125 | ## Development 126 | 127 | When the MySQL grammar changes, we merge in updates to the grammar files, and re-build the lexer and parser by running: 128 | 129 | ```shell 130 | $ yarn build-parser 131 | ``` 132 | 133 | Afterwards, we need to add the following to the top of `src/grammar/MySQLLexer.ts`, `src/grammar/MySQLParser.ts`, and `src/grammar/MySQLParserListener.ts`: 134 | 135 | ```typescript 136 | /* eslint-disable */ 137 | // @ts-nocheck 138 | ``` 139 | 140 | ## Architecture 141 | 142 | This project is built on [Antlr4](https://github.com/antlr/antlr4) with the MySQL grammar extracted from MySQL workbench. The grammar itself was kept mostly unchanged, aside from Typescript-specific rule predicates. This allows for easy updating as new versions of MySQL are released. 143 | 144 | The `MySQLBaseLexer` class represents a superclass to the lexer class and customizes lexer functionality, such as emitting multiple tokens per rule. Similarly, the `MySQLBaseParser` class represents a superclass to the parser class and customizes parser functionality. These superclasses allow us to change the MySQL version, mode, and character sets at runtime. 145 | 146 | ## Related 147 | 148 | - [ts-antlr4-scanner](https://github.com/stevenmiller888/ts-antlr4-scanner) - A scanner for antlr4-based lexers 149 | - [ts-mysql-analyzer](https://github.com/stevenmiller888/ts-mysql-analyzer) - A MySQL query analyzer 150 | - [ts-mysql-schema](https://github.com/stevenmiller888/ts-mysql-schema) - A schema extractor for MySQL 151 | - [ts-mysql-uri](https://github.com/stevenmiller888/ts-mysql-uri) - Parse a MySQL connection URI 152 | 153 | ## License 154 | 155 | [MIT](https://tldrlegal.com/license/mit-license) 156 | 157 | --- 158 | 159 | > [stevenmiller888.github.io](https://stevenmiller888.github.io)  ·  160 | > GitHub [@stevenmiller888](https://github.com/stevenmiller888)  ·  161 | > Twitter [@stevenmiller888](https://twitter.com/stevenmiller888) 162 | -------------------------------------------------------------------------------- /scripts/generate-rule-names.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This script generates the rule name enum from the parser's list of rule names. 3 | */ 4 | import { MySQLParser } from '../src' 5 | import path from 'path' 6 | import fs from 'fs' 7 | 8 | const file = path.join(__dirname, '../src/lib/rule-name.ts') 9 | const text = `/* eslint-disable @typescript-eslint/camelcase */ 10 | 11 | export enum RuleName { 12 | ${MySQLParser.ruleNames.map(r => ` ${r} = '${r}',`).join('\n')} 13 | } 14 | ` 15 | 16 | fs.writeFileSync(file, text) 17 | -------------------------------------------------------------------------------- /src/grammar/.antlr/MySQLLexer.tokens: -------------------------------------------------------------------------------- 1 | ACCOUNT_SYMBOL=1 2 | ASCII_SYMBOL=2 3 | ALWAYS_SYMBOL=3 4 | BACKUP_SYMBOL=4 5 | BEGIN_SYMBOL=5 6 | BYTE_SYMBOL=6 7 | CACHE_SYMBOL=7 8 | CHARSET_SYMBOL=8 9 | CHECKSUM_SYMBOL=9 10 | CLOSE_SYMBOL=10 11 | COMMENT_SYMBOL=11 12 | COMMIT_SYMBOL=12 13 | CONTAINS_SYMBOL=13 14 | DEALLOCATE_SYMBOL=14 15 | DO_SYMBOL=15 16 | END_SYMBOL=16 17 | EXECUTE_SYMBOL=17 18 | FLUSH_SYMBOL=18 19 | FOLLOWS_SYMBOL=19 20 | FORMAT_SYMBOL=20 21 | GROUP_REPLICATION_SYMBOL=21 22 | HANDLER_SYMBOL=22 23 | HELP_SYMBOL=23 24 | HOST_SYMBOL=24 25 | INSTALL_SYMBOL=25 26 | LANGUAGE_SYMBOL=26 27 | NO_SYMBOL=27 28 | OPEN_SYMBOL=28 29 | OPTIONS_SYMBOL=29 30 | OWNER_SYMBOL=30 31 | PARSER_SYMBOL=31 32 | PARTITION_SYMBOL=32 33 | PORT_SYMBOL=33 34 | PRECEDES_SYMBOL=34 35 | PREPARE_SYMBOL=35 36 | REMOVE_SYMBOL=36 37 | REPAIR_SYMBOL=37 38 | RESET_SYMBOL=38 39 | RESTORE_SYMBOL=39 40 | ROLLBACK_SYMBOL=40 41 | SAVEPOINT_SYMBOL=41 42 | SECURITY_SYMBOL=42 43 | SERVER_SYMBOL=43 44 | SIGNED_SYMBOL=44 45 | SLAVE_SYMBOL=45 46 | SOCKET_SYMBOL=46 47 | SONAME_SYMBOL=47 48 | START_SYMBOL=48 49 | STOP_SYMBOL=49 50 | TRUNCATE_SYMBOL=50 51 | UNICODE_SYMBOL=51 52 | UNINSTALL_SYMBOL=52 53 | UPGRADE_SYMBOL=53 54 | WRAPPER_SYMBOL=54 55 | XA_SYMBOL=55 56 | SHUTDOWN_SYMBOL=56 57 | ACTION_SYMBOL=57 58 | ADDDATE_SYMBOL=58 59 | AFTER_SYMBOL=59 60 | AGAINST_SYMBOL=60 61 | AGGREGATE_SYMBOL=61 62 | ALGORITHM_SYMBOL=62 63 | ANALYZE_SYMBOL=63 64 | ANY_SYMBOL=64 65 | AT_SYMBOL=65 66 | AUTHORS_SYMBOL=66 67 | AUTO_INCREMENT_SYMBOL=67 68 | AUTOEXTEND_SIZE_SYMBOL=68 69 | AVG_ROW_LENGTH_SYMBOL=69 70 | AVG_SYMBOL=70 71 | BINLOG_SYMBOL=71 72 | BIT_SYMBOL=72 73 | BLOCK_SYMBOL=73 74 | BOOL_SYMBOL=74 75 | BOOLEAN_SYMBOL=75 76 | BTREE_SYMBOL=76 77 | CASCADED_SYMBOL=77 78 | CATALOG_NAME_SYMBOL=78 79 | CHAIN_SYMBOL=79 80 | CHANGED_SYMBOL=80 81 | CHANNEL_SYMBOL=81 82 | CIPHER_SYMBOL=82 83 | CLIENT_SYMBOL=83 84 | CLASS_ORIGIN_SYMBOL=84 85 | COALESCE_SYMBOL=85 86 | CODE_SYMBOL=86 87 | COLLATION_SYMBOL=87 88 | COLUMN_NAME_SYMBOL=88 89 | COLUMN_FORMAT_SYMBOL=89 90 | COLUMNS_SYMBOL=90 91 | COMMITTED_SYMBOL=91 92 | COMPACT_SYMBOL=92 93 | COMPLETION_SYMBOL=93 94 | COMPRESSED_SYMBOL=94 95 | COMPRESSION_SYMBOL=95 96 | ENCRYPTION_SYMBOL=96 97 | CONCURRENT_SYMBOL=97 98 | CONNECTION_SYMBOL=98 99 | CONSISTENT_SYMBOL=99 100 | CONSTRAINT_CATALOG_SYMBOL=100 101 | CONSTRAINT_SCHEMA_SYMBOL=101 102 | CONSTRAINT_NAME_SYMBOL=102 103 | CONTEXT_SYMBOL=103 104 | CONTRIBUTORS_SYMBOL=104 105 | CPU_SYMBOL=105 106 | CUBE_SYMBOL=106 107 | CURRENT_SYMBOL=107 108 | CURSOR_NAME_SYMBOL=108 109 | DATA_SYMBOL=109 110 | DATAFILE_SYMBOL=110 111 | DATETIME_SYMBOL=111 112 | DATE_SYMBOL=112 113 | DAY_SYMBOL=113 114 | DEFAULT_AUTH_SYMBOL=114 115 | DEFINER_SYMBOL=115 116 | DELAY_KEY_WRITE_SYMBOL=116 117 | DES_KEY_FILE_SYMBOL=117 118 | DIAGNOSTICS_SYMBOL=118 119 | DIRECTORY_SYMBOL=119 120 | DISABLE_SYMBOL=120 121 | DISCARD_SYMBOL=121 122 | DISK_SYMBOL=122 123 | DUMPFILE_SYMBOL=123 124 | DUPLICATE_SYMBOL=124 125 | DYNAMIC_SYMBOL=125 126 | ENDS_SYMBOL=126 127 | ENUM_SYMBOL=127 128 | ENGINE_SYMBOL=128 129 | ENGINES_SYMBOL=129 130 | ERROR_SYMBOL=130 131 | ERRORS_SYMBOL=131 132 | ESCAPE_SYMBOL=132 133 | EVENT_SYMBOL=133 134 | EVENTS_SYMBOL=134 135 | EVERY_SYMBOL=135 136 | EXPANSION_SYMBOL=136 137 | EXPORT_SYMBOL=137 138 | EXTENDED_SYMBOL=138 139 | EXTENT_SIZE_SYMBOL=139 140 | FAULTS_SYMBOL=140 141 | FAST_SYMBOL=141 142 | FOUND_SYMBOL=142 143 | ENABLE_SYMBOL=143 144 | FULL_SYMBOL=144 145 | FILE_SYMBOL=145 146 | FILE_BLOCK_SIZE_SYMBOL=146 147 | FILTER_SYMBOL=147 148 | FIRST_SYMBOL=148 149 | FIXED_SYMBOL=149 150 | GENERAL_SYMBOL=150 151 | GEOMETRY_SYMBOL=151 152 | GEOMETRYCOLLECTION_SYMBOL=152 153 | GET_FORMAT_SYMBOL=153 154 | GRANTS_SYMBOL=154 155 | GLOBAL_SYMBOL=155 156 | HASH_SYMBOL=156 157 | HOSTS_SYMBOL=157 158 | HOUR_SYMBOL=158 159 | IDENTIFIED_SYMBOL=159 160 | IGNORE_SERVER_IDS_SYMBOL=160 161 | INVOKER_SYMBOL=161 162 | IMPORT_SYMBOL=162 163 | INDEXES_SYMBOL=163 164 | INITIAL_SIZE_SYMBOL=164 165 | INSTANCE_SYMBOL=165 166 | INNODB_SYMBOL=166 167 | IO_SYMBOL=167 168 | IPC_SYMBOL=168 169 | ISOLATION_SYMBOL=169 170 | ISSUER_SYMBOL=170 171 | INSERT_METHOD_SYMBOL=171 172 | JSON_SYMBOL=172 173 | KEY_BLOCK_SIZE_SYMBOL=173 174 | LAST_SYMBOL=174 175 | LEAVES_SYMBOL=175 176 | LESS_SYMBOL=176 177 | LEVEL_SYMBOL=177 178 | LINESTRING_SYMBOL=178 179 | LIST_SYMBOL=179 180 | LOCAL_SYMBOL=180 181 | LOCKS_SYMBOL=181 182 | LOGFILE_SYMBOL=182 183 | LOGS_SYMBOL=183 184 | MAX_ROWS_SYMBOL=184 185 | MASTER_SYMBOL=185 186 | MASTER_HEARTBEAT_PERIOD_SYMBOL=186 187 | MASTER_HOST_SYMBOL=187 188 | MASTER_PORT_SYMBOL=188 189 | MASTER_LOG_FILE_SYMBOL=189 190 | MASTER_LOG_POS_SYMBOL=190 191 | MASTER_USER_SYMBOL=191 192 | MASTER_PASSWORD_SYMBOL=192 193 | MASTER_SERVER_ID_SYMBOL=193 194 | MASTER_CONNECT_RETRY_SYMBOL=194 195 | MASTER_RETRY_COUNT_SYMBOL=195 196 | MASTER_DELAY_SYMBOL=196 197 | MASTER_SSL_SYMBOL=197 198 | MASTER_SSL_CA_SYMBOL=198 199 | MASTER_SSL_CAPATH_SYMBOL=199 200 | MASTER_TLS_VERSION_SYMBOL=200 201 | MASTER_SSL_CERT_SYMBOL=201 202 | MASTER_SSL_CIPHER_SYMBOL=202 203 | MASTER_SSL_CRL_SYMBOL=203 204 | MASTER_SSL_CRLPATH_SYMBOL=204 205 | MASTER_SSL_KEY_SYMBOL=205 206 | MASTER_AUTO_POSITION_SYMBOL=206 207 | MAX_CONNECTIONS_PER_HOUR_SYMBOL=207 208 | MAX_QUERIES_PER_HOUR_SYMBOL=208 209 | MAX_STATEMENT_TIME_SYMBOL=209 210 | MAX_SIZE_SYMBOL=210 211 | MAX_UPDATES_PER_HOUR_SYMBOL=211 212 | MAX_USER_CONNECTIONS_SYMBOL=212 213 | MEDIUM_SYMBOL=213 214 | MEMORY_SYMBOL=214 215 | MERGE_SYMBOL=215 216 | MESSAGE_TEXT_SYMBOL=216 217 | MICROSECOND_SYMBOL=217 218 | MIGRATE_SYMBOL=218 219 | MINUTE_SYMBOL=219 220 | MIN_ROWS_SYMBOL=220 221 | MODIFY_SYMBOL=221 222 | MODE_SYMBOL=222 223 | MONTH_SYMBOL=223 224 | MULTILINESTRING_SYMBOL=224 225 | MULTIPOINT_SYMBOL=225 226 | MULTIPOLYGON_SYMBOL=226 227 | MUTEX_SYMBOL=227 228 | MYSQL_ERRNO_SYMBOL=228 229 | NAME_SYMBOL=229 230 | NAMES_SYMBOL=230 231 | NATIONAL_SYMBOL=231 232 | NCHAR_SYMBOL=232 233 | NDBCLUSTER_SYMBOL=233 234 | NEVER_SYMBOL=234 235 | NEXT_SYMBOL=235 236 | NEW_SYMBOL=236 237 | NO_WAIT_SYMBOL=237 238 | NODEGROUP_SYMBOL=238 239 | NONE_SYMBOL=239 240 | NUMBER_SYMBOL=240 241 | NVARCHAR_SYMBOL=241 242 | OFFSET_SYMBOL=242 243 | OLD_PASSWORD_SYMBOL=243 244 | ONE_SHOT_SYMBOL=244 245 | ONE_SYMBOL=245 246 | PACK_KEYS_SYMBOL=246 247 | PAGE_SYMBOL=247 248 | PARTIAL_SYMBOL=248 249 | PARTITIONING_SYMBOL=249 250 | PARTITIONS_SYMBOL=250 251 | PASSWORD_SYMBOL=251 252 | PHASE_SYMBOL=252 253 | PLUGIN_DIR_SYMBOL=253 254 | PLUGIN_SYMBOL=254 255 | PLUGINS_SYMBOL=255 256 | POINT_SYMBOL=256 257 | POLYGON_SYMBOL=257 258 | PRESERVE_SYMBOL=258 259 | PREV_SYMBOL=259 260 | PRIVILEGES_SYMBOL=260 261 | PROCESS_SYMBOL=261 262 | PROCESSLIST_SYMBOL=262 263 | PROFILE_SYMBOL=263 264 | PROFILES_SYMBOL=264 265 | PROXY_SYMBOL=265 266 | QUARTER_SYMBOL=266 267 | QUERY_SYMBOL=267 268 | QUICK_SYMBOL=268 269 | READ_ONLY_SYMBOL=269 270 | REBUILD_SYMBOL=270 271 | RECOVER_SYMBOL=271 272 | REDO_BUFFER_SIZE_SYMBOL=272 273 | REDOFILE_SYMBOL=273 274 | REDUNDANT_SYMBOL=274 275 | RELAY_SYMBOL=275 276 | RELAYLOG_SYMBOL=276 277 | RELAY_LOG_FILE_SYMBOL=277 278 | RELAY_LOG_POS_SYMBOL=278 279 | RELAY_THREAD_SYMBOL=279 280 | RELOAD_SYMBOL=280 281 | REORGANIZE_SYMBOL=281 282 | REPEATABLE_SYMBOL=282 283 | REPLICATION_SYMBOL=283 284 | REPLICATE_DO_DB_SYMBOL=284 285 | REPLICATE_IGNORE_DB_SYMBOL=285 286 | REPLICATE_DO_TABLE_SYMBOL=286 287 | REPLICATE_IGNORE_TABLE_SYMBOL=287 288 | REPLICATE_WILD_DO_TABLE_SYMBOL=288 289 | REPLICATE_WILD_IGNORE_TABLE_SYMBOL=289 290 | REPLICATE_REWRITE_DB_SYMBOL=290 291 | RESUME_SYMBOL=291 292 | RETURNED_SQLSTATE_SYMBOL=292 293 | RETURNS_SYMBOL=293 294 | REVERSE_SYMBOL=294 295 | ROLLUP_SYMBOL=295 296 | ROTATE_SYMBOL=296 297 | ROUTINE_SYMBOL=297 298 | ROWS_SYMBOL=298 299 | ROW_COUNT_SYMBOL=299 300 | ROW_FORMAT_SYMBOL=300 301 | ROW_SYMBOL=301 302 | RTREE_SYMBOL=302 303 | SCHEDULE_SYMBOL=303 304 | SCHEMA_NAME_SYMBOL=304 305 | SECOND_SYMBOL=305 306 | SERIAL_SYMBOL=306 307 | SERIALIZABLE_SYMBOL=307 308 | SESSION_SYMBOL=308 309 | SIMPLE_SYMBOL=309 310 | SHARE_SYMBOL=310 311 | SLOW_SYMBOL=311 312 | SNAPSHOT_SYMBOL=312 313 | SOUNDS_SYMBOL=313 314 | SOURCE_SYMBOL=314 315 | SQL_AFTER_GTIDS_SYMBOL=315 316 | SQL_AFTER_MTS_GAPS_SYMBOL=316 317 | SQL_BEFORE_GTIDS_SYMBOL=317 318 | SQL_CACHE_SYMBOL=318 319 | SQL_BUFFER_RESULT_SYMBOL=319 320 | SQL_NO_CACHE_SYMBOL=320 321 | SQL_THREAD_SYMBOL=321 322 | STACKED_SYMBOL=322 323 | STARTS_SYMBOL=323 324 | STATS_AUTO_RECALC_SYMBOL=324 325 | STATS_PERSISTENT_SYMBOL=325 326 | STATS_SAMPLE_PAGES_SYMBOL=326 327 | STATUS_SYMBOL=327 328 | STORAGE_SYMBOL=328 329 | STRING_SYMBOL=329 330 | SUBCLASS_ORIGIN_SYMBOL=330 331 | SUBDATE_SYMBOL=331 332 | SUBJECT_SYMBOL=332 333 | SUBPARTITION_SYMBOL=333 334 | SUBPARTITIONS_SYMBOL=334 335 | SUPER_SYMBOL=335 336 | SUSPEND_SYMBOL=336 337 | SWAPS_SYMBOL=337 338 | SWITCHES_SYMBOL=338 339 | TABLE_NAME_SYMBOL=339 340 | TABLES_SYMBOL=340 341 | TABLE_CHECKSUM_SYMBOL=341 342 | TABLESPACE_SYMBOL=342 343 | TEMPORARY_SYMBOL=343 344 | TEMPTABLE_SYMBOL=344 345 | TEXT_SYMBOL=345 346 | THAN_SYMBOL=346 347 | TRANSACTION_SYMBOL=347 348 | TRIGGERS_SYMBOL=348 349 | TIMESTAMP_SYMBOL=349 350 | TIMESTAMP_ADD_SYMBOL=350 351 | TIMESTAMP_DIFF_SYMBOL=351 352 | TIME_SYMBOL=352 353 | TYPES_SYMBOL=353 354 | TYPE_SYMBOL=354 355 | UDF_RETURNS_SYMBOL=355 356 | FUNCTION_SYMBOL=356 357 | UNCOMMITTED_SYMBOL=357 358 | UNDEFINED_SYMBOL=358 359 | UNDO_BUFFER_SIZE_SYMBOL=359 360 | UNDOFILE_SYMBOL=360 361 | UNKNOWN_SYMBOL=361 362 | UNTIL_SYMBOL=362 363 | USER_RESOURCES_SYMBOL=363 364 | USER_SYMBOL=364 365 | USE_FRM_SYMBOL=365 366 | VARIABLES_SYMBOL=366 367 | VIEW_SYMBOL=367 368 | VALUE_SYMBOL=368 369 | WARNINGS_SYMBOL=369 370 | WAIT_SYMBOL=370 371 | WEEK_SYMBOL=371 372 | WORK_SYMBOL=372 373 | WEIGHT_STRING_SYMBOL=373 374 | X509_SYMBOL=374 375 | XID_SYMBOL=375 376 | XML_SYMBOL=376 377 | YEAR_SYMBOL=377 378 | NOT2_SYMBOL=378 379 | CONCAT_PIPES_SYMBOL=379 380 | INT_NUMBER=380 381 | LONG_NUMBER=381 382 | ULONGLONG_NUMBER=382 383 | EQUAL_OPERATOR=383 384 | ASSIGN_OPERATOR=384 385 | NULL_SAFE_EQUAL_OPERATOR=385 386 | GREATER_OR_EQUAL_OPERATOR=386 387 | GREATER_THAN_OPERATOR=387 388 | LESS_OR_EQUAL_OPERATOR=388 389 | LESS_THAN_OPERATOR=389 390 | NOT_EQUAL_OPERATOR=390 391 | PLUS_OPERATOR=391 392 | MINUS_OPERATOR=392 393 | MULT_OPERATOR=393 394 | DIV_OPERATOR=394 395 | MOD_OPERATOR=395 396 | LOGICAL_NOT_OPERATOR=396 397 | BITWISE_NOT_OPERATOR=397 398 | SHIFT_LEFT_OPERATOR=398 399 | SHIFT_RIGHT_OPERATOR=399 400 | LOGICAL_AND_OPERATOR=400 401 | BITWISE_AND_OPERATOR=401 402 | BITWISE_XOR_OPERATOR=402 403 | LOGICAL_OR_OPERATOR=403 404 | BITWISE_OR_OPERATOR=404 405 | DOT_SYMBOL=405 406 | COMMA_SYMBOL=406 407 | SEMICOLON_SYMBOL=407 408 | COLON_SYMBOL=408 409 | OPEN_PAR_SYMBOL=409 410 | CLOSE_PAR_SYMBOL=410 411 | OPEN_CURLY_SYMBOL=411 412 | CLOSE_CURLY_SYMBOL=412 413 | UNDERLINE_SYMBOL=413 414 | JSON_SEPARATOR_SYMBOL=414 415 | JSON_UNQUOTED_SEPARATOR_SYMBOL=415 416 | AT_SIGN_SYMBOL=416 417 | AT_TEXT_SUFFIX=417 418 | AT_AT_SIGN_SYMBOL=418 419 | NULL2_SYMBOL=419 420 | PARAM_MARKER=420 421 | HEX_NUMBER=421 422 | BIN_NUMBER=422 423 | DECIMAL_NUMBER=423 424 | FLOAT_NUMBER=424 425 | ACCESSIBLE_SYMBOL=425 426 | ADD_SYMBOL=426 427 | ALL_SYMBOL=427 428 | ALTER_SYMBOL=428 429 | ANALYSE_SYMBOL=429 430 | AND_SYMBOL=430 431 | AS_SYMBOL=431 432 | ASC_SYMBOL=432 433 | ASENSITIVE_SYMBOL=433 434 | BEFORE_SYMBOL=434 435 | BETWEEN_SYMBOL=435 436 | BIGINT_SYMBOL=436 437 | BINARY_SYMBOL=437 438 | BIN_NUM_SYMBOL=438 439 | BIT_AND_SYMBOL=439 440 | BIT_OR_SYMBOL=440 441 | BIT_XOR_SYMBOL=441 442 | BLOB_SYMBOL=442 443 | BOTH_SYMBOL=443 444 | BY_SYMBOL=444 445 | CALL_SYMBOL=445 446 | CASCADE_SYMBOL=446 447 | CASE_SYMBOL=447 448 | CAST_SYMBOL=448 449 | CHANGE_SYMBOL=449 450 | CHAR_SYMBOL=450 451 | CHECK_SYMBOL=451 452 | COLLATE_SYMBOL=452 453 | COLUMN_SYMBOL=453 454 | CONDITION_SYMBOL=454 455 | CONSTRAINT_SYMBOL=455 456 | CONTINUE_SYMBOL=456 457 | CONVERT_SYMBOL=457 458 | COUNT_SYMBOL=458 459 | CREATE_SYMBOL=459 460 | CROSS_SYMBOL=460 461 | CURDATE_SYMBOL=461 462 | CURRENT_DATE_SYMBOL=462 463 | CURRENT_TIME_SYMBOL=463 464 | CURRENT_USER_SYMBOL=464 465 | CURSOR_SYMBOL=465 466 | CURTIME_SYMBOL=466 467 | DATABASE_SYMBOL=467 468 | DATABASES_SYMBOL=468 469 | DATE_ADD_SYMBOL=469 470 | DATE_SUB_SYMBOL=470 471 | DAY_HOUR_SYMBOL=471 472 | DAY_MICROSECOND_SYMBOL=472 473 | DAY_MINUTE_SYMBOL=473 474 | DAY_SECOND_SYMBOL=474 475 | DECIMAL_NUM_SYMBOL=475 476 | DECIMAL_SYMBOL=476 477 | DECLARE_SYMBOL=477 478 | DEFAULT_SYMBOL=478 479 | DELAYED_SYMBOL=479 480 | DELETE_SYMBOL=480 481 | DESC_SYMBOL=481 482 | DESCRIBE_SYMBOL=482 483 | DETERMINISTIC_SYMBOL=483 484 | DISTINCT_SYMBOL=484 485 | DIV_SYMBOL=485 486 | DOUBLE_SYMBOL=486 487 | DROP_SYMBOL=487 488 | DUAL_SYMBOL=488 489 | EACH_SYMBOL=489 490 | ELSE_SYMBOL=490 491 | ELSEIF_SYMBOL=491 492 | ENCLOSED_SYMBOL=492 493 | END_OF_INPUT_SYMBOL=493 494 | ESCAPED_SYMBOL=494 495 | EXCHANGE_SYMBOL=495 496 | EXISTS_SYMBOL=496 497 | EXIT_SYMBOL=497 498 | EXPIRE_SYMBOL=498 499 | EXPLAIN_SYMBOL=499 500 | EXTRACT_SYMBOL=500 501 | FALSE_SYMBOL=501 502 | FETCH_SYMBOL=502 503 | FLOAT_SYMBOL=503 504 | FORCE_SYMBOL=504 505 | FOREIGN_SYMBOL=505 506 | FOR_SYMBOL=506 507 | FROM_SYMBOL=507 508 | FULLTEXT_SYMBOL=508 509 | GET_SYMBOL=509 510 | GENERATED_SYMBOL=510 511 | GRANT_SYMBOL=511 512 | GROUP_SYMBOL=512 513 | GROUP_CONCAT_SYMBOL=513 514 | HAVING_SYMBOL=514 515 | HIGH_PRIORITY_SYMBOL=515 516 | HOUR_MICROSECOND_SYMBOL=516 517 | HOUR_MINUTE_SYMBOL=517 518 | HOUR_SECOND_SYMBOL=518 519 | IF_SYMBOL=519 520 | IGNORE_SYMBOL=520 521 | INDEX_SYMBOL=521 522 | INFILE_SYMBOL=522 523 | INNER_SYMBOL=523 524 | INOUT_SYMBOL=524 525 | INSENSITIVE_SYMBOL=525 526 | INSERT_SYMBOL=526 527 | INTERVAL_SYMBOL=527 528 | INTO_SYMBOL=528 529 | INT_SYMBOL=529 530 | IN_SYMBOL=530 531 | IO_AFTER_GTIDS_SYMBOL=531 532 | IO_BEFORE_GTIDS_SYMBOL=532 533 | IS_SYMBOL=533 534 | ITERATE_SYMBOL=534 535 | JOIN_SYMBOL=535 536 | KEYS_SYMBOL=536 537 | KEY_SYMBOL=537 538 | KILL_SYMBOL=538 539 | LEADING_SYMBOL=539 540 | LEAVE_SYMBOL=540 541 | LEFT_SYMBOL=541 542 | LIKE_SYMBOL=542 543 | LIMIT_SYMBOL=543 544 | LINEAR_SYMBOL=544 545 | LINES_SYMBOL=545 546 | LOAD_SYMBOL=546 547 | LOCATOR_SYMBOL=547 548 | LOCK_SYMBOL=548 549 | LONGBLOB_SYMBOL=549 550 | LONGTEXT_SYMBOL=550 551 | LONG_NUM_SYMBOL=551 552 | LONG_SYMBOL=552 553 | LOOP_SYMBOL=553 554 | LOW_PRIORITY_SYMBOL=554 555 | MASTER_BIND_SYMBOL=555 556 | MASTER_SSL_VERIFY_SERVER_CERT_SYMBOL=556 557 | MATCH_SYMBOL=557 558 | MAX_SYMBOL=558 559 | MAXVALUE_SYMBOL=559 560 | MEDIUMBLOB_SYMBOL=560 561 | MEDIUMINT_SYMBOL=561 562 | MEDIUMTEXT_SYMBOL=562 563 | MID_SYMBOL=563 564 | MINUTE_MICROSECOND_SYMBOL=564 565 | MINUTE_SECOND_SYMBOL=565 566 | MIN_SYMBOL=566 567 | MODIFIES_SYMBOL=567 568 | MOD_SYMBOL=568 569 | NATURAL_SYMBOL=569 570 | NCHAR_STRING_SYMBOL=570 571 | NEG_SYMBOL=571 572 | NONBLOCKING_SYMBOL=572 573 | NOT_SYMBOL=573 574 | NOW_SYMBOL=574 575 | NO_WRITE_TO_BINLOG_SYMBOL=575 576 | NULL_SYMBOL=576 577 | NUMERIC_SYMBOL=577 578 | OFFLINE_SYMBOL=578 579 | ON_SYMBOL=579 580 | ONLINE_SYMBOL=580 581 | ONLY_SYMBOL=581 582 | OPTIMIZE_SYMBOL=582 583 | OPTIMIZER_COSTS_SYMBOL=583 584 | OPTION_SYMBOL=584 585 | OPTIONALLY_SYMBOL=585 586 | ORDER_SYMBOL=586 587 | OR_SYMBOL=587 588 | OUTER_SYMBOL=588 589 | OUTFILE_SYMBOL=589 590 | OUT_SYMBOL=590 591 | POSITION_SYMBOL=591 592 | PRECISION_SYMBOL=592 593 | PRIMARY_SYMBOL=593 594 | PROCEDURE_SYMBOL=594 595 | PURGE_SYMBOL=595 596 | RANGE_SYMBOL=596 597 | READS_SYMBOL=597 598 | READ_SYMBOL=598 599 | READ_WRITE_SYMBOL=599 600 | REAL_SYMBOL=600 601 | REFERENCES_SYMBOL=601 602 | REGEXP_SYMBOL=602 603 | RELEASE_SYMBOL=603 604 | RENAME_SYMBOL=604 605 | REPEAT_SYMBOL=605 606 | REPLACE_SYMBOL=606 607 | REQUIRE_SYMBOL=607 608 | RESIGNAL_SYMBOL=608 609 | RESTRICT_SYMBOL=609 610 | RETURN_SYMBOL=610 611 | REVOKE_SYMBOL=611 612 | RIGHT_SYMBOL=612 613 | SECOND_MICROSECOND_SYMBOL=613 614 | SELECT_SYMBOL=614 615 | SENSITIVE_SYMBOL=615 616 | SEPARATOR_SYMBOL=616 617 | SERVER_OPTIONS_SYMBOL=617 618 | SESSION_USER_SYMBOL=618 619 | SET_SYMBOL=619 620 | SET_VAR_SYMBOL=620 621 | SHOW_SYMBOL=621 622 | SIGNAL_SYMBOL=622 623 | SMALLINT_SYMBOL=623 624 | SPATIAL_SYMBOL=624 625 | SPECIFIC_SYMBOL=625 626 | SQLEXCEPTION_SYMBOL=626 627 | SQLSTATE_SYMBOL=627 628 | SQLWARNING_SYMBOL=628 629 | SQL_BIG_RESULT_SYMBOL=629 630 | SQL_CALC_FOUND_ROWS_SYMBOL=630 631 | SQL_SMALL_RESULT_SYMBOL=631 632 | SQL_SYMBOL=632 633 | SSL_SYMBOL=633 634 | STARTING_SYMBOL=634 635 | STDDEV_SAMP_SYMBOL=635 636 | STDDEV_SYMBOL=636 637 | STDDEV_POP_SYMBOL=637 638 | STD_SYMBOL=638 639 | STORED_SYMBOL=639 640 | STRAIGHT_JOIN_SYMBOL=640 641 | SUBSTR_SYMBOL=641 642 | SUBSTRING_SYMBOL=642 643 | SUM_SYMBOL=643 644 | SYSDATE_SYMBOL=644 645 | SYSTEM_USER_SYMBOL=645 646 | TABLE_REF_PRIORITY_SYMBOL=646 647 | TABLE_SYMBOL=647 648 | TERMINATED_SYMBOL=648 649 | THEN_SYMBOL=649 650 | TINYBLOB_SYMBOL=650 651 | TINYINT_SYMBOL=651 652 | TINYTEXT_SYMBOL=652 653 | TO_SYMBOL=653 654 | TRAILING_SYMBOL=654 655 | TRIGGER_SYMBOL=655 656 | TRIM_SYMBOL=656 657 | TRUE_SYMBOL=657 658 | UNDO_SYMBOL=658 659 | UNION_SYMBOL=659 660 | UNIQUE_SYMBOL=660 661 | UNLOCK_SYMBOL=661 662 | UNSIGNED_SYMBOL=662 663 | UPDATE_SYMBOL=663 664 | USAGE_SYMBOL=664 665 | USE_SYMBOL=665 666 | USING_SYMBOL=666 667 | UTC_DATE_SYMBOL=667 668 | UTC_TIMESTAMP_SYMBOL=668 669 | UTC_TIME_SYMBOL=669 670 | VALIDATION_SYMBOL=670 671 | VALUES_SYMBOL=671 672 | VARBINARY_SYMBOL=672 673 | VARCHAR_SYMBOL=673 674 | VARIANCE_SYMBOL=674 675 | VARYING_SYMBOL=675 676 | VAR_POP_SYMBOL=676 677 | VAR_SAMP_SYMBOL=677 678 | VIRTUAL_SYMBOL=678 679 | WHEN_SYMBOL=679 680 | WHERE_SYMBOL=680 681 | WHILE_SYMBOL=681 682 | WITH_SYMBOL=682 683 | WITHOUT_SYMBOL=683 684 | WRITE_SYMBOL=684 685 | XOR_SYMBOL=685 686 | YEAR_MONTH_SYMBOL=686 687 | ZEROFILL_SYMBOL=687 688 | PERSIST_SYMBOL=688 689 | ROLE_SYMBOL=689 690 | ADMIN_SYMBOL=690 691 | INVISIBLE_SYMBOL=691 692 | VISIBLE_SYMBOL=692 693 | EXCEPT_SYMBOL=693 694 | COMPONENT_SYMBOL=694 695 | RECURSIVE_SYMBOL=695 696 | JSON_OBJECTAGG_SYMBOL=696 697 | JSON_ARRAYAGG_SYMBOL=697 698 | OF_SYMBOL=698 699 | SKIP_SYMBOL=699 700 | LOCKED_SYMBOL=700 701 | NOWAIT_SYMBOL=701 702 | GROUPING_SYMBOL=702 703 | PERSIST_ONLY_SYMBOL=703 704 | HISTOGRAM_SYMBOL=704 705 | BUCKETS_SYMBOL=705 706 | REMOTE_SYMBOL=706 707 | CLONE_SYMBOL=707 708 | CUME_DIST_SYMBOL=708 709 | DENSE_RANK_SYMBOL=709 710 | EXCLUDE_SYMBOL=710 711 | FIRST_VALUE_SYMBOL=711 712 | FOLLOWING_SYMBOL=712 713 | GROUPS_SYMBOL=713 714 | LAG_SYMBOL=714 715 | LAST_VALUE_SYMBOL=715 716 | LEAD_SYMBOL=716 717 | NTH_VALUE_SYMBOL=717 718 | NTILE_SYMBOL=718 719 | NULLS_SYMBOL=719 720 | OTHERS_SYMBOL=720 721 | OVER_SYMBOL=721 722 | PERCENT_RANK_SYMBOL=722 723 | PRECEDING_SYMBOL=723 724 | RANK_SYMBOL=724 725 | RESPECT_SYMBOL=725 726 | ROW_NUMBER_SYMBOL=726 727 | TIES_SYMBOL=727 728 | UNBOUNDED_SYMBOL=728 729 | WINDOW_SYMBOL=729 730 | EMPTY_SYMBOL=730 731 | JSON_TABLE_SYMBOL=731 732 | NESTED_SYMBOL=732 733 | ORDINALITY_SYMBOL=733 734 | PATH_SYMBOL=734 735 | HISTORY_SYMBOL=735 736 | REUSE_SYMBOL=736 737 | SRID_SYMBOL=737 738 | THREAD_PRIORITY_SYMBOL=738 739 | RESOURCE_SYMBOL=739 740 | SYSTEM_SYMBOL=740 741 | VCPU_SYMBOL=741 742 | MASTER_PUBLIC_KEY_PATH_SYMBOL=742 743 | GET_MASTER_PUBLIC_KEY_SYMBOL=743 744 | RESTART_SYMBOL=744 745 | DEFINITION_SYMBOL=745 746 | DESCRIPTION_SYMBOL=746 747 | ORGANIZATION_SYMBOL=747 748 | REFERENCE_SYMBOL=748 749 | OPTIONAL_SYMBOL=749 750 | SECONDARY_SYMBOL=750 751 | SECONDARY_ENGINE_SYMBOL=751 752 | SECONDARY_LOAD_SYMBOL=752 753 | SECONDARY_UNLOAD_SYMBOL=753 754 | ACTIVE_SYMBOL=754 755 | INACTIVE_SYMBOL=755 756 | LATERAL_SYMBOL=756 757 | RETAIN_SYMBOL=757 758 | OLD_SYMBOL=758 759 | NETWORK_NAMESPACE_SYMBOL=759 760 | ENFORCED_SYMBOL=760 761 | ARRAY_SYMBOL=761 762 | OJ_SYMBOL=762 763 | MEMBER_SYMBOL=763 764 | RANDOM_SYMBOL=764 765 | MASTER_COMPRESSION_ALGORITHM_SYMBOL=765 766 | MASTER_ZSTD_COMPRESSION_LEVEL_SYMBOL=766 767 | PRIVILEGE_CHECKS_USER_SYMBOL=767 768 | MASTER_TLS_CIPHERSUITES_SYMBOL=768 769 | WHITESPACE=769 770 | INVALID_INPUT=770 771 | UNDERSCORE_CHARSET=771 772 | IDENTIFIER=772 773 | NCHAR_TEXT=773 774 | BACK_TICK_QUOTED_ID=774 775 | DOUBLE_QUOTED_TEXT=775 776 | SINGLE_QUOTED_TEXT=776 777 | VERSION_COMMENT_START=777 778 | MYSQL_COMMENT_START=778 779 | VERSION_COMMENT_END=779 780 | BLOCK_COMMENT=780 781 | POUND_COMMENT=781 782 | DASHDASH_COMMENT=782 783 | NOT_EQUAL2_OPERATOR=783 784 | '='=383 785 | ':='=384 786 | '<=>'=385 787 | '>='=386 788 | '>'=387 789 | '<='=388 790 | '<'=389 791 | '!='=390 792 | '<>'=783 793 | '+'=391 794 | '-'=392 795 | '*'=393 796 | '/'=394 797 | '%'=395 798 | '!'=396 799 | '~'=397 800 | '<<'=398 801 | '>>'=399 802 | '&&'=400 803 | '&'=401 804 | '^'=402 805 | '||'=403 806 | '|'=404 807 | '.'=405 808 | ','=406 809 | ';'=407 810 | ':'=408 811 | '('=409 812 | ')'=410 813 | '{'=411 814 | '}'=412 815 | '_'=413 816 | '->'=414 817 | '->>'=415 818 | '@'=416 819 | '@@'=418 820 | '\\N'=419 821 | '?'=420 822 | -------------------------------------------------------------------------------- /src/grammar/.antlr/MySQLParser.tokens: -------------------------------------------------------------------------------- 1 | ACCOUNT_SYMBOL=1 2 | ASCII_SYMBOL=2 3 | ALWAYS_SYMBOL=3 4 | BACKUP_SYMBOL=4 5 | BEGIN_SYMBOL=5 6 | BYTE_SYMBOL=6 7 | CACHE_SYMBOL=7 8 | CHARSET_SYMBOL=8 9 | CHECKSUM_SYMBOL=9 10 | CLOSE_SYMBOL=10 11 | COMMENT_SYMBOL=11 12 | COMMIT_SYMBOL=12 13 | CONTAINS_SYMBOL=13 14 | DEALLOCATE_SYMBOL=14 15 | DO_SYMBOL=15 16 | END_SYMBOL=16 17 | EXECUTE_SYMBOL=17 18 | FLUSH_SYMBOL=18 19 | FOLLOWS_SYMBOL=19 20 | FORMAT_SYMBOL=20 21 | GROUP_REPLICATION_SYMBOL=21 22 | HANDLER_SYMBOL=22 23 | HELP_SYMBOL=23 24 | HOST_SYMBOL=24 25 | INSTALL_SYMBOL=25 26 | LANGUAGE_SYMBOL=26 27 | NO_SYMBOL=27 28 | OPEN_SYMBOL=28 29 | OPTIONS_SYMBOL=29 30 | OWNER_SYMBOL=30 31 | PARSER_SYMBOL=31 32 | PARTITION_SYMBOL=32 33 | PORT_SYMBOL=33 34 | PRECEDES_SYMBOL=34 35 | PREPARE_SYMBOL=35 36 | REMOVE_SYMBOL=36 37 | REPAIR_SYMBOL=37 38 | RESET_SYMBOL=38 39 | RESTORE_SYMBOL=39 40 | ROLLBACK_SYMBOL=40 41 | SAVEPOINT_SYMBOL=41 42 | SECURITY_SYMBOL=42 43 | SERVER_SYMBOL=43 44 | SIGNED_SYMBOL=44 45 | SLAVE_SYMBOL=45 46 | SOCKET_SYMBOL=46 47 | SONAME_SYMBOL=47 48 | START_SYMBOL=48 49 | STOP_SYMBOL=49 50 | TRUNCATE_SYMBOL=50 51 | UNICODE_SYMBOL=51 52 | UNINSTALL_SYMBOL=52 53 | UPGRADE_SYMBOL=53 54 | WRAPPER_SYMBOL=54 55 | XA_SYMBOL=55 56 | SHUTDOWN_SYMBOL=56 57 | ACTION_SYMBOL=57 58 | ADDDATE_SYMBOL=58 59 | AFTER_SYMBOL=59 60 | AGAINST_SYMBOL=60 61 | AGGREGATE_SYMBOL=61 62 | ALGORITHM_SYMBOL=62 63 | ANALYZE_SYMBOL=63 64 | ANY_SYMBOL=64 65 | AT_SYMBOL=65 66 | AUTHORS_SYMBOL=66 67 | AUTO_INCREMENT_SYMBOL=67 68 | AUTOEXTEND_SIZE_SYMBOL=68 69 | AVG_ROW_LENGTH_SYMBOL=69 70 | AVG_SYMBOL=70 71 | BINLOG_SYMBOL=71 72 | BIT_SYMBOL=72 73 | BLOCK_SYMBOL=73 74 | BOOL_SYMBOL=74 75 | BOOLEAN_SYMBOL=75 76 | BTREE_SYMBOL=76 77 | CASCADED_SYMBOL=77 78 | CATALOG_NAME_SYMBOL=78 79 | CHAIN_SYMBOL=79 80 | CHANGED_SYMBOL=80 81 | CHANNEL_SYMBOL=81 82 | CIPHER_SYMBOL=82 83 | CLIENT_SYMBOL=83 84 | CLASS_ORIGIN_SYMBOL=84 85 | COALESCE_SYMBOL=85 86 | CODE_SYMBOL=86 87 | COLLATION_SYMBOL=87 88 | COLUMN_NAME_SYMBOL=88 89 | COLUMN_FORMAT_SYMBOL=89 90 | COLUMNS_SYMBOL=90 91 | COMMITTED_SYMBOL=91 92 | COMPACT_SYMBOL=92 93 | COMPLETION_SYMBOL=93 94 | COMPRESSED_SYMBOL=94 95 | COMPRESSION_SYMBOL=95 96 | ENCRYPTION_SYMBOL=96 97 | CONCURRENT_SYMBOL=97 98 | CONNECTION_SYMBOL=98 99 | CONSISTENT_SYMBOL=99 100 | CONSTRAINT_CATALOG_SYMBOL=100 101 | CONSTRAINT_SCHEMA_SYMBOL=101 102 | CONSTRAINT_NAME_SYMBOL=102 103 | CONTEXT_SYMBOL=103 104 | CONTRIBUTORS_SYMBOL=104 105 | CPU_SYMBOL=105 106 | CUBE_SYMBOL=106 107 | CURRENT_SYMBOL=107 108 | CURSOR_NAME_SYMBOL=108 109 | DATA_SYMBOL=109 110 | DATAFILE_SYMBOL=110 111 | DATETIME_SYMBOL=111 112 | DATE_SYMBOL=112 113 | DAY_SYMBOL=113 114 | DEFAULT_AUTH_SYMBOL=114 115 | DEFINER_SYMBOL=115 116 | DELAY_KEY_WRITE_SYMBOL=116 117 | DES_KEY_FILE_SYMBOL=117 118 | DIAGNOSTICS_SYMBOL=118 119 | DIRECTORY_SYMBOL=119 120 | DISABLE_SYMBOL=120 121 | DISCARD_SYMBOL=121 122 | DISK_SYMBOL=122 123 | DUMPFILE_SYMBOL=123 124 | DUPLICATE_SYMBOL=124 125 | DYNAMIC_SYMBOL=125 126 | ENDS_SYMBOL=126 127 | ENUM_SYMBOL=127 128 | ENGINE_SYMBOL=128 129 | ENGINES_SYMBOL=129 130 | ERROR_SYMBOL=130 131 | ERRORS_SYMBOL=131 132 | ESCAPE_SYMBOL=132 133 | EVENT_SYMBOL=133 134 | EVENTS_SYMBOL=134 135 | EVERY_SYMBOL=135 136 | EXPANSION_SYMBOL=136 137 | EXPORT_SYMBOL=137 138 | EXTENDED_SYMBOL=138 139 | EXTENT_SIZE_SYMBOL=139 140 | FAULTS_SYMBOL=140 141 | FAST_SYMBOL=141 142 | FOUND_SYMBOL=142 143 | ENABLE_SYMBOL=143 144 | FULL_SYMBOL=144 145 | FILE_SYMBOL=145 146 | FILE_BLOCK_SIZE_SYMBOL=146 147 | FILTER_SYMBOL=147 148 | FIRST_SYMBOL=148 149 | FIXED_SYMBOL=149 150 | GENERAL_SYMBOL=150 151 | GEOMETRY_SYMBOL=151 152 | GEOMETRYCOLLECTION_SYMBOL=152 153 | GET_FORMAT_SYMBOL=153 154 | GRANTS_SYMBOL=154 155 | GLOBAL_SYMBOL=155 156 | HASH_SYMBOL=156 157 | HOSTS_SYMBOL=157 158 | HOUR_SYMBOL=158 159 | IDENTIFIED_SYMBOL=159 160 | IGNORE_SERVER_IDS_SYMBOL=160 161 | INVOKER_SYMBOL=161 162 | IMPORT_SYMBOL=162 163 | INDEXES_SYMBOL=163 164 | INITIAL_SIZE_SYMBOL=164 165 | INSTANCE_SYMBOL=165 166 | INNODB_SYMBOL=166 167 | IO_SYMBOL=167 168 | IPC_SYMBOL=168 169 | ISOLATION_SYMBOL=169 170 | ISSUER_SYMBOL=170 171 | INSERT_METHOD_SYMBOL=171 172 | JSON_SYMBOL=172 173 | KEY_BLOCK_SIZE_SYMBOL=173 174 | LAST_SYMBOL=174 175 | LEAVES_SYMBOL=175 176 | LESS_SYMBOL=176 177 | LEVEL_SYMBOL=177 178 | LINESTRING_SYMBOL=178 179 | LIST_SYMBOL=179 180 | LOCAL_SYMBOL=180 181 | LOCKS_SYMBOL=181 182 | LOGFILE_SYMBOL=182 183 | LOGS_SYMBOL=183 184 | MAX_ROWS_SYMBOL=184 185 | MASTER_SYMBOL=185 186 | MASTER_HEARTBEAT_PERIOD_SYMBOL=186 187 | MASTER_HOST_SYMBOL=187 188 | MASTER_PORT_SYMBOL=188 189 | MASTER_LOG_FILE_SYMBOL=189 190 | MASTER_LOG_POS_SYMBOL=190 191 | MASTER_USER_SYMBOL=191 192 | MASTER_PASSWORD_SYMBOL=192 193 | MASTER_SERVER_ID_SYMBOL=193 194 | MASTER_CONNECT_RETRY_SYMBOL=194 195 | MASTER_RETRY_COUNT_SYMBOL=195 196 | MASTER_DELAY_SYMBOL=196 197 | MASTER_SSL_SYMBOL=197 198 | MASTER_SSL_CA_SYMBOL=198 199 | MASTER_SSL_CAPATH_SYMBOL=199 200 | MASTER_TLS_VERSION_SYMBOL=200 201 | MASTER_SSL_CERT_SYMBOL=201 202 | MASTER_SSL_CIPHER_SYMBOL=202 203 | MASTER_SSL_CRL_SYMBOL=203 204 | MASTER_SSL_CRLPATH_SYMBOL=204 205 | MASTER_SSL_KEY_SYMBOL=205 206 | MASTER_AUTO_POSITION_SYMBOL=206 207 | MAX_CONNECTIONS_PER_HOUR_SYMBOL=207 208 | MAX_QUERIES_PER_HOUR_SYMBOL=208 209 | MAX_STATEMENT_TIME_SYMBOL=209 210 | MAX_SIZE_SYMBOL=210 211 | MAX_UPDATES_PER_HOUR_SYMBOL=211 212 | MAX_USER_CONNECTIONS_SYMBOL=212 213 | MEDIUM_SYMBOL=213 214 | MEMORY_SYMBOL=214 215 | MERGE_SYMBOL=215 216 | MESSAGE_TEXT_SYMBOL=216 217 | MICROSECOND_SYMBOL=217 218 | MIGRATE_SYMBOL=218 219 | MINUTE_SYMBOL=219 220 | MIN_ROWS_SYMBOL=220 221 | MODIFY_SYMBOL=221 222 | MODE_SYMBOL=222 223 | MONTH_SYMBOL=223 224 | MULTILINESTRING_SYMBOL=224 225 | MULTIPOINT_SYMBOL=225 226 | MULTIPOLYGON_SYMBOL=226 227 | MUTEX_SYMBOL=227 228 | MYSQL_ERRNO_SYMBOL=228 229 | NAME_SYMBOL=229 230 | NAMES_SYMBOL=230 231 | NATIONAL_SYMBOL=231 232 | NCHAR_SYMBOL=232 233 | NDBCLUSTER_SYMBOL=233 234 | NEVER_SYMBOL=234 235 | NEXT_SYMBOL=235 236 | NEW_SYMBOL=236 237 | NO_WAIT_SYMBOL=237 238 | NODEGROUP_SYMBOL=238 239 | NONE_SYMBOL=239 240 | NUMBER_SYMBOL=240 241 | NVARCHAR_SYMBOL=241 242 | OFFSET_SYMBOL=242 243 | OLD_PASSWORD_SYMBOL=243 244 | ONE_SHOT_SYMBOL=244 245 | ONE_SYMBOL=245 246 | PACK_KEYS_SYMBOL=246 247 | PAGE_SYMBOL=247 248 | PARTIAL_SYMBOL=248 249 | PARTITIONING_SYMBOL=249 250 | PARTITIONS_SYMBOL=250 251 | PASSWORD_SYMBOL=251 252 | PHASE_SYMBOL=252 253 | PLUGIN_DIR_SYMBOL=253 254 | PLUGIN_SYMBOL=254 255 | PLUGINS_SYMBOL=255 256 | POINT_SYMBOL=256 257 | POLYGON_SYMBOL=257 258 | PRESERVE_SYMBOL=258 259 | PREV_SYMBOL=259 260 | PRIVILEGES_SYMBOL=260 261 | PROCESS_SYMBOL=261 262 | PROCESSLIST_SYMBOL=262 263 | PROFILE_SYMBOL=263 264 | PROFILES_SYMBOL=264 265 | PROXY_SYMBOL=265 266 | QUARTER_SYMBOL=266 267 | QUERY_SYMBOL=267 268 | QUICK_SYMBOL=268 269 | READ_ONLY_SYMBOL=269 270 | REBUILD_SYMBOL=270 271 | RECOVER_SYMBOL=271 272 | REDO_BUFFER_SIZE_SYMBOL=272 273 | REDOFILE_SYMBOL=273 274 | REDUNDANT_SYMBOL=274 275 | RELAY_SYMBOL=275 276 | RELAYLOG_SYMBOL=276 277 | RELAY_LOG_FILE_SYMBOL=277 278 | RELAY_LOG_POS_SYMBOL=278 279 | RELAY_THREAD_SYMBOL=279 280 | RELOAD_SYMBOL=280 281 | REORGANIZE_SYMBOL=281 282 | REPEATABLE_SYMBOL=282 283 | REPLICATION_SYMBOL=283 284 | REPLICATE_DO_DB_SYMBOL=284 285 | REPLICATE_IGNORE_DB_SYMBOL=285 286 | REPLICATE_DO_TABLE_SYMBOL=286 287 | REPLICATE_IGNORE_TABLE_SYMBOL=287 288 | REPLICATE_WILD_DO_TABLE_SYMBOL=288 289 | REPLICATE_WILD_IGNORE_TABLE_SYMBOL=289 290 | REPLICATE_REWRITE_DB_SYMBOL=290 291 | RESUME_SYMBOL=291 292 | RETURNED_SQLSTATE_SYMBOL=292 293 | RETURNS_SYMBOL=293 294 | REVERSE_SYMBOL=294 295 | ROLLUP_SYMBOL=295 296 | ROTATE_SYMBOL=296 297 | ROUTINE_SYMBOL=297 298 | ROWS_SYMBOL=298 299 | ROW_COUNT_SYMBOL=299 300 | ROW_FORMAT_SYMBOL=300 301 | ROW_SYMBOL=301 302 | RTREE_SYMBOL=302 303 | SCHEDULE_SYMBOL=303 304 | SCHEMA_NAME_SYMBOL=304 305 | SECOND_SYMBOL=305 306 | SERIAL_SYMBOL=306 307 | SERIALIZABLE_SYMBOL=307 308 | SESSION_SYMBOL=308 309 | SIMPLE_SYMBOL=309 310 | SHARE_SYMBOL=310 311 | SLOW_SYMBOL=311 312 | SNAPSHOT_SYMBOL=312 313 | SOUNDS_SYMBOL=313 314 | SOURCE_SYMBOL=314 315 | SQL_AFTER_GTIDS_SYMBOL=315 316 | SQL_AFTER_MTS_GAPS_SYMBOL=316 317 | SQL_BEFORE_GTIDS_SYMBOL=317 318 | SQL_CACHE_SYMBOL=318 319 | SQL_BUFFER_RESULT_SYMBOL=319 320 | SQL_NO_CACHE_SYMBOL=320 321 | SQL_THREAD_SYMBOL=321 322 | STACKED_SYMBOL=322 323 | STARTS_SYMBOL=323 324 | STATS_AUTO_RECALC_SYMBOL=324 325 | STATS_PERSISTENT_SYMBOL=325 326 | STATS_SAMPLE_PAGES_SYMBOL=326 327 | STATUS_SYMBOL=327 328 | STORAGE_SYMBOL=328 329 | STRING_SYMBOL=329 330 | SUBCLASS_ORIGIN_SYMBOL=330 331 | SUBDATE_SYMBOL=331 332 | SUBJECT_SYMBOL=332 333 | SUBPARTITION_SYMBOL=333 334 | SUBPARTITIONS_SYMBOL=334 335 | SUPER_SYMBOL=335 336 | SUSPEND_SYMBOL=336 337 | SWAPS_SYMBOL=337 338 | SWITCHES_SYMBOL=338 339 | TABLE_NAME_SYMBOL=339 340 | TABLES_SYMBOL=340 341 | TABLE_CHECKSUM_SYMBOL=341 342 | TABLESPACE_SYMBOL=342 343 | TEMPORARY_SYMBOL=343 344 | TEMPTABLE_SYMBOL=344 345 | TEXT_SYMBOL=345 346 | THAN_SYMBOL=346 347 | TRANSACTION_SYMBOL=347 348 | TRIGGERS_SYMBOL=348 349 | TIMESTAMP_SYMBOL=349 350 | TIMESTAMP_ADD_SYMBOL=350 351 | TIMESTAMP_DIFF_SYMBOL=351 352 | TIME_SYMBOL=352 353 | TYPES_SYMBOL=353 354 | TYPE_SYMBOL=354 355 | UDF_RETURNS_SYMBOL=355 356 | FUNCTION_SYMBOL=356 357 | UNCOMMITTED_SYMBOL=357 358 | UNDEFINED_SYMBOL=358 359 | UNDO_BUFFER_SIZE_SYMBOL=359 360 | UNDOFILE_SYMBOL=360 361 | UNKNOWN_SYMBOL=361 362 | UNTIL_SYMBOL=362 363 | USER_RESOURCES_SYMBOL=363 364 | USER_SYMBOL=364 365 | USE_FRM_SYMBOL=365 366 | VARIABLES_SYMBOL=366 367 | VIEW_SYMBOL=367 368 | VALUE_SYMBOL=368 369 | WARNINGS_SYMBOL=369 370 | WAIT_SYMBOL=370 371 | WEEK_SYMBOL=371 372 | WORK_SYMBOL=372 373 | WEIGHT_STRING_SYMBOL=373 374 | X509_SYMBOL=374 375 | XID_SYMBOL=375 376 | XML_SYMBOL=376 377 | YEAR_SYMBOL=377 378 | NOT2_SYMBOL=378 379 | CONCAT_PIPES_SYMBOL=379 380 | INT_NUMBER=380 381 | LONG_NUMBER=381 382 | ULONGLONG_NUMBER=382 383 | EQUAL_OPERATOR=383 384 | ASSIGN_OPERATOR=384 385 | NULL_SAFE_EQUAL_OPERATOR=385 386 | GREATER_OR_EQUAL_OPERATOR=386 387 | GREATER_THAN_OPERATOR=387 388 | LESS_OR_EQUAL_OPERATOR=388 389 | LESS_THAN_OPERATOR=389 390 | NOT_EQUAL_OPERATOR=390 391 | PLUS_OPERATOR=391 392 | MINUS_OPERATOR=392 393 | MULT_OPERATOR=393 394 | DIV_OPERATOR=394 395 | MOD_OPERATOR=395 396 | LOGICAL_NOT_OPERATOR=396 397 | BITWISE_NOT_OPERATOR=397 398 | SHIFT_LEFT_OPERATOR=398 399 | SHIFT_RIGHT_OPERATOR=399 400 | LOGICAL_AND_OPERATOR=400 401 | BITWISE_AND_OPERATOR=401 402 | BITWISE_XOR_OPERATOR=402 403 | LOGICAL_OR_OPERATOR=403 404 | BITWISE_OR_OPERATOR=404 405 | DOT_SYMBOL=405 406 | COMMA_SYMBOL=406 407 | SEMICOLON_SYMBOL=407 408 | COLON_SYMBOL=408 409 | OPEN_PAR_SYMBOL=409 410 | CLOSE_PAR_SYMBOL=410 411 | OPEN_CURLY_SYMBOL=411 412 | CLOSE_CURLY_SYMBOL=412 413 | UNDERLINE_SYMBOL=413 414 | JSON_SEPARATOR_SYMBOL=414 415 | JSON_UNQUOTED_SEPARATOR_SYMBOL=415 416 | AT_SIGN_SYMBOL=416 417 | AT_TEXT_SUFFIX=417 418 | AT_AT_SIGN_SYMBOL=418 419 | NULL2_SYMBOL=419 420 | PARAM_MARKER=420 421 | HEX_NUMBER=421 422 | BIN_NUMBER=422 423 | DECIMAL_NUMBER=423 424 | FLOAT_NUMBER=424 425 | ACCESSIBLE_SYMBOL=425 426 | ADD_SYMBOL=426 427 | ALL_SYMBOL=427 428 | ALTER_SYMBOL=428 429 | ANALYSE_SYMBOL=429 430 | AND_SYMBOL=430 431 | AS_SYMBOL=431 432 | ASC_SYMBOL=432 433 | ASENSITIVE_SYMBOL=433 434 | BEFORE_SYMBOL=434 435 | BETWEEN_SYMBOL=435 436 | BIGINT_SYMBOL=436 437 | BINARY_SYMBOL=437 438 | BIN_NUM_SYMBOL=438 439 | BIT_AND_SYMBOL=439 440 | BIT_OR_SYMBOL=440 441 | BIT_XOR_SYMBOL=441 442 | BLOB_SYMBOL=442 443 | BOTH_SYMBOL=443 444 | BY_SYMBOL=444 445 | CALL_SYMBOL=445 446 | CASCADE_SYMBOL=446 447 | CASE_SYMBOL=447 448 | CAST_SYMBOL=448 449 | CHANGE_SYMBOL=449 450 | CHAR_SYMBOL=450 451 | CHECK_SYMBOL=451 452 | COLLATE_SYMBOL=452 453 | COLUMN_SYMBOL=453 454 | CONDITION_SYMBOL=454 455 | CONSTRAINT_SYMBOL=455 456 | CONTINUE_SYMBOL=456 457 | CONVERT_SYMBOL=457 458 | COUNT_SYMBOL=458 459 | CREATE_SYMBOL=459 460 | CROSS_SYMBOL=460 461 | CURDATE_SYMBOL=461 462 | CURRENT_DATE_SYMBOL=462 463 | CURRENT_TIME_SYMBOL=463 464 | CURRENT_USER_SYMBOL=464 465 | CURSOR_SYMBOL=465 466 | CURTIME_SYMBOL=466 467 | DATABASE_SYMBOL=467 468 | DATABASES_SYMBOL=468 469 | DATE_ADD_SYMBOL=469 470 | DATE_SUB_SYMBOL=470 471 | DAY_HOUR_SYMBOL=471 472 | DAY_MICROSECOND_SYMBOL=472 473 | DAY_MINUTE_SYMBOL=473 474 | DAY_SECOND_SYMBOL=474 475 | DECIMAL_NUM_SYMBOL=475 476 | DECIMAL_SYMBOL=476 477 | DECLARE_SYMBOL=477 478 | DEFAULT_SYMBOL=478 479 | DELAYED_SYMBOL=479 480 | DELETE_SYMBOL=480 481 | DESC_SYMBOL=481 482 | DESCRIBE_SYMBOL=482 483 | DETERMINISTIC_SYMBOL=483 484 | DISTINCT_SYMBOL=484 485 | DIV_SYMBOL=485 486 | DOUBLE_SYMBOL=486 487 | DROP_SYMBOL=487 488 | DUAL_SYMBOL=488 489 | EACH_SYMBOL=489 490 | ELSE_SYMBOL=490 491 | ELSEIF_SYMBOL=491 492 | ENCLOSED_SYMBOL=492 493 | END_OF_INPUT_SYMBOL=493 494 | ESCAPED_SYMBOL=494 495 | EXCHANGE_SYMBOL=495 496 | EXISTS_SYMBOL=496 497 | EXIT_SYMBOL=497 498 | EXPIRE_SYMBOL=498 499 | EXPLAIN_SYMBOL=499 500 | EXTRACT_SYMBOL=500 501 | FALSE_SYMBOL=501 502 | FETCH_SYMBOL=502 503 | FLOAT_SYMBOL=503 504 | FORCE_SYMBOL=504 505 | FOREIGN_SYMBOL=505 506 | FOR_SYMBOL=506 507 | FROM_SYMBOL=507 508 | FULLTEXT_SYMBOL=508 509 | GET_SYMBOL=509 510 | GENERATED_SYMBOL=510 511 | GRANT_SYMBOL=511 512 | GROUP_SYMBOL=512 513 | GROUP_CONCAT_SYMBOL=513 514 | HAVING_SYMBOL=514 515 | HIGH_PRIORITY_SYMBOL=515 516 | HOUR_MICROSECOND_SYMBOL=516 517 | HOUR_MINUTE_SYMBOL=517 518 | HOUR_SECOND_SYMBOL=518 519 | IF_SYMBOL=519 520 | IGNORE_SYMBOL=520 521 | INDEX_SYMBOL=521 522 | INFILE_SYMBOL=522 523 | INNER_SYMBOL=523 524 | INOUT_SYMBOL=524 525 | INSENSITIVE_SYMBOL=525 526 | INSERT_SYMBOL=526 527 | INTERVAL_SYMBOL=527 528 | INTO_SYMBOL=528 529 | INT_SYMBOL=529 530 | IN_SYMBOL=530 531 | IO_AFTER_GTIDS_SYMBOL=531 532 | IO_BEFORE_GTIDS_SYMBOL=532 533 | IS_SYMBOL=533 534 | ITERATE_SYMBOL=534 535 | JOIN_SYMBOL=535 536 | KEYS_SYMBOL=536 537 | KEY_SYMBOL=537 538 | KILL_SYMBOL=538 539 | LEADING_SYMBOL=539 540 | LEAVE_SYMBOL=540 541 | LEFT_SYMBOL=541 542 | LIKE_SYMBOL=542 543 | LIMIT_SYMBOL=543 544 | LINEAR_SYMBOL=544 545 | LINES_SYMBOL=545 546 | LOAD_SYMBOL=546 547 | LOCATOR_SYMBOL=547 548 | LOCK_SYMBOL=548 549 | LONGBLOB_SYMBOL=549 550 | LONGTEXT_SYMBOL=550 551 | LONG_NUM_SYMBOL=551 552 | LONG_SYMBOL=552 553 | LOOP_SYMBOL=553 554 | LOW_PRIORITY_SYMBOL=554 555 | MASTER_BIND_SYMBOL=555 556 | MASTER_SSL_VERIFY_SERVER_CERT_SYMBOL=556 557 | MATCH_SYMBOL=557 558 | MAX_SYMBOL=558 559 | MAXVALUE_SYMBOL=559 560 | MEDIUMBLOB_SYMBOL=560 561 | MEDIUMINT_SYMBOL=561 562 | MEDIUMTEXT_SYMBOL=562 563 | MID_SYMBOL=563 564 | MINUTE_MICROSECOND_SYMBOL=564 565 | MINUTE_SECOND_SYMBOL=565 566 | MIN_SYMBOL=566 567 | MODIFIES_SYMBOL=567 568 | MOD_SYMBOL=568 569 | NATURAL_SYMBOL=569 570 | NCHAR_STRING_SYMBOL=570 571 | NEG_SYMBOL=571 572 | NONBLOCKING_SYMBOL=572 573 | NOT_SYMBOL=573 574 | NOW_SYMBOL=574 575 | NO_WRITE_TO_BINLOG_SYMBOL=575 576 | NULL_SYMBOL=576 577 | NUMERIC_SYMBOL=577 578 | OFFLINE_SYMBOL=578 579 | ON_SYMBOL=579 580 | ONLINE_SYMBOL=580 581 | ONLY_SYMBOL=581 582 | OPTIMIZE_SYMBOL=582 583 | OPTIMIZER_COSTS_SYMBOL=583 584 | OPTION_SYMBOL=584 585 | OPTIONALLY_SYMBOL=585 586 | ORDER_SYMBOL=586 587 | OR_SYMBOL=587 588 | OUTER_SYMBOL=588 589 | OUTFILE_SYMBOL=589 590 | OUT_SYMBOL=590 591 | POSITION_SYMBOL=591 592 | PRECISION_SYMBOL=592 593 | PRIMARY_SYMBOL=593 594 | PROCEDURE_SYMBOL=594 595 | PURGE_SYMBOL=595 596 | RANGE_SYMBOL=596 597 | READS_SYMBOL=597 598 | READ_SYMBOL=598 599 | READ_WRITE_SYMBOL=599 600 | REAL_SYMBOL=600 601 | REFERENCES_SYMBOL=601 602 | REGEXP_SYMBOL=602 603 | RELEASE_SYMBOL=603 604 | RENAME_SYMBOL=604 605 | REPEAT_SYMBOL=605 606 | REPLACE_SYMBOL=606 607 | REQUIRE_SYMBOL=607 608 | RESIGNAL_SYMBOL=608 609 | RESTRICT_SYMBOL=609 610 | RETURN_SYMBOL=610 611 | REVOKE_SYMBOL=611 612 | RIGHT_SYMBOL=612 613 | SECOND_MICROSECOND_SYMBOL=613 614 | SELECT_SYMBOL=614 615 | SENSITIVE_SYMBOL=615 616 | SEPARATOR_SYMBOL=616 617 | SERVER_OPTIONS_SYMBOL=617 618 | SESSION_USER_SYMBOL=618 619 | SET_SYMBOL=619 620 | SET_VAR_SYMBOL=620 621 | SHOW_SYMBOL=621 622 | SIGNAL_SYMBOL=622 623 | SMALLINT_SYMBOL=623 624 | SPATIAL_SYMBOL=624 625 | SPECIFIC_SYMBOL=625 626 | SQLEXCEPTION_SYMBOL=626 627 | SQLSTATE_SYMBOL=627 628 | SQLWARNING_SYMBOL=628 629 | SQL_BIG_RESULT_SYMBOL=629 630 | SQL_CALC_FOUND_ROWS_SYMBOL=630 631 | SQL_SMALL_RESULT_SYMBOL=631 632 | SQL_SYMBOL=632 633 | SSL_SYMBOL=633 634 | STARTING_SYMBOL=634 635 | STDDEV_SAMP_SYMBOL=635 636 | STDDEV_SYMBOL=636 637 | STDDEV_POP_SYMBOL=637 638 | STD_SYMBOL=638 639 | STORED_SYMBOL=639 640 | STRAIGHT_JOIN_SYMBOL=640 641 | SUBSTR_SYMBOL=641 642 | SUBSTRING_SYMBOL=642 643 | SUM_SYMBOL=643 644 | SYSDATE_SYMBOL=644 645 | SYSTEM_USER_SYMBOL=645 646 | TABLE_REF_PRIORITY_SYMBOL=646 647 | TABLE_SYMBOL=647 648 | TERMINATED_SYMBOL=648 649 | THEN_SYMBOL=649 650 | TINYBLOB_SYMBOL=650 651 | TINYINT_SYMBOL=651 652 | TINYTEXT_SYMBOL=652 653 | TO_SYMBOL=653 654 | TRAILING_SYMBOL=654 655 | TRIGGER_SYMBOL=655 656 | TRIM_SYMBOL=656 657 | TRUE_SYMBOL=657 658 | UNDO_SYMBOL=658 659 | UNION_SYMBOL=659 660 | UNIQUE_SYMBOL=660 661 | UNLOCK_SYMBOL=661 662 | UNSIGNED_SYMBOL=662 663 | UPDATE_SYMBOL=663 664 | USAGE_SYMBOL=664 665 | USE_SYMBOL=665 666 | USING_SYMBOL=666 667 | UTC_DATE_SYMBOL=667 668 | UTC_TIMESTAMP_SYMBOL=668 669 | UTC_TIME_SYMBOL=669 670 | VALIDATION_SYMBOL=670 671 | VALUES_SYMBOL=671 672 | VARBINARY_SYMBOL=672 673 | VARCHAR_SYMBOL=673 674 | VARIANCE_SYMBOL=674 675 | VARYING_SYMBOL=675 676 | VAR_POP_SYMBOL=676 677 | VAR_SAMP_SYMBOL=677 678 | VIRTUAL_SYMBOL=678 679 | WHEN_SYMBOL=679 680 | WHERE_SYMBOL=680 681 | WHILE_SYMBOL=681 682 | WITH_SYMBOL=682 683 | WITHOUT_SYMBOL=683 684 | WRITE_SYMBOL=684 685 | XOR_SYMBOL=685 686 | YEAR_MONTH_SYMBOL=686 687 | ZEROFILL_SYMBOL=687 688 | PERSIST_SYMBOL=688 689 | ROLE_SYMBOL=689 690 | ADMIN_SYMBOL=690 691 | INVISIBLE_SYMBOL=691 692 | VISIBLE_SYMBOL=692 693 | EXCEPT_SYMBOL=693 694 | COMPONENT_SYMBOL=694 695 | RECURSIVE_SYMBOL=695 696 | JSON_OBJECTAGG_SYMBOL=696 697 | JSON_ARRAYAGG_SYMBOL=697 698 | OF_SYMBOL=698 699 | SKIP_SYMBOL=699 700 | LOCKED_SYMBOL=700 701 | NOWAIT_SYMBOL=701 702 | GROUPING_SYMBOL=702 703 | PERSIST_ONLY_SYMBOL=703 704 | HISTOGRAM_SYMBOL=704 705 | BUCKETS_SYMBOL=705 706 | REMOTE_SYMBOL=706 707 | CLONE_SYMBOL=707 708 | CUME_DIST_SYMBOL=708 709 | DENSE_RANK_SYMBOL=709 710 | EXCLUDE_SYMBOL=710 711 | FIRST_VALUE_SYMBOL=711 712 | FOLLOWING_SYMBOL=712 713 | GROUPS_SYMBOL=713 714 | LAG_SYMBOL=714 715 | LAST_VALUE_SYMBOL=715 716 | LEAD_SYMBOL=716 717 | NTH_VALUE_SYMBOL=717 718 | NTILE_SYMBOL=718 719 | NULLS_SYMBOL=719 720 | OTHERS_SYMBOL=720 721 | OVER_SYMBOL=721 722 | PERCENT_RANK_SYMBOL=722 723 | PRECEDING_SYMBOL=723 724 | RANK_SYMBOL=724 725 | RESPECT_SYMBOL=725 726 | ROW_NUMBER_SYMBOL=726 727 | TIES_SYMBOL=727 728 | UNBOUNDED_SYMBOL=728 729 | WINDOW_SYMBOL=729 730 | EMPTY_SYMBOL=730 731 | JSON_TABLE_SYMBOL=731 732 | NESTED_SYMBOL=732 733 | ORDINALITY_SYMBOL=733 734 | PATH_SYMBOL=734 735 | HISTORY_SYMBOL=735 736 | REUSE_SYMBOL=736 737 | SRID_SYMBOL=737 738 | THREAD_PRIORITY_SYMBOL=738 739 | RESOURCE_SYMBOL=739 740 | SYSTEM_SYMBOL=740 741 | VCPU_SYMBOL=741 742 | MASTER_PUBLIC_KEY_PATH_SYMBOL=742 743 | GET_MASTER_PUBLIC_KEY_SYMBOL=743 744 | RESTART_SYMBOL=744 745 | DEFINITION_SYMBOL=745 746 | DESCRIPTION_SYMBOL=746 747 | ORGANIZATION_SYMBOL=747 748 | REFERENCE_SYMBOL=748 749 | OPTIONAL_SYMBOL=749 750 | SECONDARY_SYMBOL=750 751 | SECONDARY_ENGINE_SYMBOL=751 752 | SECONDARY_LOAD_SYMBOL=752 753 | SECONDARY_UNLOAD_SYMBOL=753 754 | ACTIVE_SYMBOL=754 755 | INACTIVE_SYMBOL=755 756 | LATERAL_SYMBOL=756 757 | RETAIN_SYMBOL=757 758 | OLD_SYMBOL=758 759 | NETWORK_NAMESPACE_SYMBOL=759 760 | ENFORCED_SYMBOL=760 761 | ARRAY_SYMBOL=761 762 | OJ_SYMBOL=762 763 | MEMBER_SYMBOL=763 764 | RANDOM_SYMBOL=764 765 | MASTER_COMPRESSION_ALGORITHM_SYMBOL=765 766 | MASTER_ZSTD_COMPRESSION_LEVEL_SYMBOL=766 767 | PRIVILEGE_CHECKS_USER_SYMBOL=767 768 | MASTER_TLS_CIPHERSUITES_SYMBOL=768 769 | WHITESPACE=769 770 | INVALID_INPUT=770 771 | UNDERSCORE_CHARSET=771 772 | IDENTIFIER=772 773 | NCHAR_TEXT=773 774 | BACK_TICK_QUOTED_ID=774 775 | DOUBLE_QUOTED_TEXT=775 776 | SINGLE_QUOTED_TEXT=776 777 | VERSION_COMMENT_START=777 778 | MYSQL_COMMENT_START=778 779 | VERSION_COMMENT_END=779 780 | BLOCK_COMMENT=780 781 | POUND_COMMENT=781 782 | DASHDASH_COMMENT=782 783 | NOT_EQUAL2_OPERATOR=783 784 | '='=383 785 | ':='=384 786 | '<=>'=385 787 | '>='=386 788 | '>'=387 789 | '<='=388 790 | '<'=389 791 | '!='=390 792 | '<>'=783 793 | '+'=391 794 | '-'=392 795 | '*'=393 796 | '/'=394 797 | '%'=395 798 | '!'=396 799 | '~'=397 800 | '<<'=398 801 | '>>'=399 802 | '&&'=400 803 | '&'=401 804 | '^'=402 805 | '||'=403 806 | '|'=404 807 | '.'=405 808 | ','=406 809 | ';'=407 810 | ':'=408 811 | '('=409 812 | ')'=410 813 | '{'=411 814 | '}'=412 815 | '_'=413 816 | '->'=414 817 | '->>'=415 818 | '@'=416 819 | '@@'=418 820 | '\\N'=419 821 | '?'=420 822 | -------------------------------------------------------------------------------- /src/grammar/MySQLBaseLexer.ts: -------------------------------------------------------------------------------- 1 | import { Token, CharStream } from 'antlr4ts' 2 | import { MySQLLexer } from './MySQLLexer' 3 | import { Lexer } from 'antlr4ts/Lexer' 4 | import { SqlMode } from './common' 5 | 6 | // This is a superclass used to customize lexer functionality. 7 | export abstract class MySQLBaseLexer extends Lexer { 8 | inVersionComment: boolean 9 | pendingTokens: Token[] 10 | serverVersion: number 11 | // Used to check repertoires. 12 | charsets: string[] 13 | sqlMode?: SqlMode 14 | 15 | public constructor(input: CharStream) { 16 | super(input) 17 | this.inVersionComment = false 18 | this.serverVersion = 50707 19 | this.pendingTokens = [] 20 | this.charsets = [] 21 | } 22 | 23 | public reset(): void { 24 | this.inVersionComment = false 25 | super.reset() 26 | } 27 | 28 | // Allow a grammar rule to emit as many tokens as it needs. 29 | public nextToken(): Token { 30 | // First respond with pending tokens to the next token request, if there are any. 31 | if (this.pendingTokens.length > 0) { 32 | const pending = this.pendingTokens.shift() 33 | if (pending) { 34 | return pending 35 | } 36 | } 37 | 38 | // Let the main lexer class run the next token recognition. 39 | // This might create additional tokens again. 40 | const next = super.nextToken() 41 | 42 | if (this.pendingTokens.length > 0) { 43 | const pending = this.pendingTokens.shift() 44 | this.pendingTokens.push(next) 45 | if (pending) { 46 | return pending 47 | } 48 | } 49 | 50 | return next 51 | } 52 | 53 | public nextDefaultChannelToken(): Token { 54 | let token = this.nextToken() 55 | 56 | while (token.channel !== Token.DEFAULT_CHANNEL) { 57 | token = this.nextToken() 58 | } 59 | 60 | return token 61 | } 62 | 63 | public emitDot(): void { 64 | const token = this.tokenFactory.create( 65 | this._tokenFactorySourcePair, 66 | MySQLLexer.DOT_SYMBOL, 67 | '.', 68 | this._channel, 69 | this._tokenStartCharIndex, 70 | this._tokenStartCharIndex, 71 | this._tokenStartLine, 72 | this._tokenStartCharPositionInLine 73 | ) 74 | 75 | this.pendingTokens.push(token) 76 | 77 | ++this._tokenStartCharIndex 78 | } 79 | 80 | public checkVersion(text: string): boolean { 81 | // Minimum is: /*!12345 82 | if (text.length < 8) { 83 | return false 84 | } 85 | 86 | // Skip version comment introducer. 87 | const version = parseInt(text.substring(3, text.length), 10) 88 | if (version <= this.serverVersion) { 89 | this.inVersionComment = true 90 | return true 91 | } 92 | 93 | return false 94 | } 95 | 96 | public checkCharset(text: string): number { 97 | return this.charsets.includes(text) ? MySQLLexer.UNDERSCORE_CHARSET : MySQLLexer.IDENTIFIER 98 | } 99 | 100 | // Returns true if the given mode (one of the enums above) is set. 101 | public isSqlModeActive(mode: number): boolean { 102 | if (!this.sqlMode) { 103 | return false 104 | } 105 | 106 | return (this.sqlMode & mode) !== 0 107 | } 108 | 109 | public determineFunction(proposed: number): number { 110 | // Skip any whitespace character if the sql mode says they should be ignored, 111 | // before actually trying to match the open parenthesis. 112 | if (this.isSqlModeActive(SqlMode.IgnoreSpace)) { 113 | let input = this._input.LA(1) 114 | let character = String.fromCharCode(input) 115 | while (character === ' ' || character === '\t' || character === '\r' || character === '\n') { 116 | this.interpreter.consume(this._input) 117 | this.channel = Lexer.HIDDEN 118 | this.type = MySQLLexer.WHITESPACE 119 | input = this._input.LA(1) 120 | character = String.fromCharCode(input) 121 | } 122 | } 123 | 124 | const input = this._input.LA(1) 125 | return String.fromCharCode(input) === '(' ? proposed : MySQLLexer.IDENTIFIER 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /src/grammar/MySQLBaseParser.ts: -------------------------------------------------------------------------------- 1 | import { Parser, CommonTokenStream } from 'antlr4ts' 2 | import { SqlMode } from './common' 3 | 4 | // This is a superclass used to customize parser functionality. 5 | export abstract class MySQLBaseParser extends Parser { 6 | serverVersion: number 7 | sqlMode?: SqlMode 8 | 9 | public constructor(input: CommonTokenStream) { 10 | super(input) 11 | this.serverVersion = 50707 12 | } 13 | 14 | public reset(): void { 15 | super.reset(false) 16 | } 17 | 18 | // Checks the token at the given position relative to the current position, whether it matches the expected value. 19 | // For positions > 1 this looks ahead, otherwise it looks back. 20 | // Note: position == 0 is not defined. position == 1 is the current position. 21 | public look(position: number, expected: number): boolean { 22 | // TODO: String.fromCharcode? 23 | return this.inputStream.LA(position) === expected 24 | } 25 | 26 | // TODO: 27 | // A specialized function to get the text from a given context. This falls back to context->getText() in the general 28 | // case, but provides special behavior for certain contexts (e.g. the implicit string concatenation used in MySQL). 29 | // public getText() {} 30 | 31 | // Validation function used to check that a string that is not allowed to contain line breaks really doesn't. 32 | public containsLinebreak(text: string): boolean { 33 | return text.includes('\r\n') 34 | } 35 | 36 | // Returns true if the given mode (one of the enums above) is set. 37 | public isSqlModeActive(mode: number): boolean { 38 | if (!this.sqlMode) { 39 | return false 40 | } 41 | 42 | return (this.sqlMode & mode) !== 0 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/grammar/MySQLLexer.tokens: -------------------------------------------------------------------------------- 1 | ACCOUNT_SYMBOL=1 2 | ASCII_SYMBOL=2 3 | ALWAYS_SYMBOL=3 4 | BACKUP_SYMBOL=4 5 | BEGIN_SYMBOL=5 6 | BYTE_SYMBOL=6 7 | CACHE_SYMBOL=7 8 | CHARSET_SYMBOL=8 9 | CHECKSUM_SYMBOL=9 10 | CLOSE_SYMBOL=10 11 | COMMENT_SYMBOL=11 12 | COMMIT_SYMBOL=12 13 | CONTAINS_SYMBOL=13 14 | DEALLOCATE_SYMBOL=14 15 | DO_SYMBOL=15 16 | END_SYMBOL=16 17 | EXECUTE_SYMBOL=17 18 | FLUSH_SYMBOL=18 19 | FOLLOWS_SYMBOL=19 20 | FORMAT_SYMBOL=20 21 | GROUP_REPLICATION_SYMBOL=21 22 | HANDLER_SYMBOL=22 23 | HELP_SYMBOL=23 24 | HOST_SYMBOL=24 25 | INSTALL_SYMBOL=25 26 | LANGUAGE_SYMBOL=26 27 | NO_SYMBOL=27 28 | OPEN_SYMBOL=28 29 | OPTIONS_SYMBOL=29 30 | OWNER_SYMBOL=30 31 | PARSER_SYMBOL=31 32 | PARTITION_SYMBOL=32 33 | PORT_SYMBOL=33 34 | PRECEDES_SYMBOL=34 35 | PREPARE_SYMBOL=35 36 | REMOVE_SYMBOL=36 37 | REPAIR_SYMBOL=37 38 | RESET_SYMBOL=38 39 | RESTORE_SYMBOL=39 40 | ROLLBACK_SYMBOL=40 41 | SAVEPOINT_SYMBOL=41 42 | SECURITY_SYMBOL=42 43 | SERVER_SYMBOL=43 44 | SIGNED_SYMBOL=44 45 | SLAVE_SYMBOL=45 46 | SOCKET_SYMBOL=46 47 | SONAME_SYMBOL=47 48 | START_SYMBOL=48 49 | STOP_SYMBOL=49 50 | TRUNCATE_SYMBOL=50 51 | UNICODE_SYMBOL=51 52 | UNINSTALL_SYMBOL=52 53 | UPGRADE_SYMBOL=53 54 | WRAPPER_SYMBOL=54 55 | XA_SYMBOL=55 56 | SHUTDOWN_SYMBOL=56 57 | ACTION_SYMBOL=57 58 | ADDDATE_SYMBOL=58 59 | AFTER_SYMBOL=59 60 | AGAINST_SYMBOL=60 61 | AGGREGATE_SYMBOL=61 62 | ALGORITHM_SYMBOL=62 63 | ANALYZE_SYMBOL=63 64 | ANY_SYMBOL=64 65 | AT_SYMBOL=65 66 | AUTHORS_SYMBOL=66 67 | AUTO_INCREMENT_SYMBOL=67 68 | AUTOEXTEND_SIZE_SYMBOL=68 69 | AVG_ROW_LENGTH_SYMBOL=69 70 | AVG_SYMBOL=70 71 | BINLOG_SYMBOL=71 72 | BIT_SYMBOL=72 73 | BLOCK_SYMBOL=73 74 | BOOL_SYMBOL=74 75 | BOOLEAN_SYMBOL=75 76 | BTREE_SYMBOL=76 77 | CASCADED_SYMBOL=77 78 | CATALOG_NAME_SYMBOL=78 79 | CHAIN_SYMBOL=79 80 | CHANGED_SYMBOL=80 81 | CHANNEL_SYMBOL=81 82 | CIPHER_SYMBOL=82 83 | CLIENT_SYMBOL=83 84 | CLASS_ORIGIN_SYMBOL=84 85 | COALESCE_SYMBOL=85 86 | CODE_SYMBOL=86 87 | COLLATION_SYMBOL=87 88 | COLUMN_NAME_SYMBOL=88 89 | COLUMN_FORMAT_SYMBOL=89 90 | COLUMNS_SYMBOL=90 91 | COMMITTED_SYMBOL=91 92 | COMPACT_SYMBOL=92 93 | COMPLETION_SYMBOL=93 94 | COMPRESSED_SYMBOL=94 95 | COMPRESSION_SYMBOL=95 96 | ENCRYPTION_SYMBOL=96 97 | CONCURRENT_SYMBOL=97 98 | CONNECTION_SYMBOL=98 99 | CONSISTENT_SYMBOL=99 100 | CONSTRAINT_CATALOG_SYMBOL=100 101 | CONSTRAINT_SCHEMA_SYMBOL=101 102 | CONSTRAINT_NAME_SYMBOL=102 103 | CONTEXT_SYMBOL=103 104 | CONTRIBUTORS_SYMBOL=104 105 | CPU_SYMBOL=105 106 | CUBE_SYMBOL=106 107 | CURRENT_SYMBOL=107 108 | CURSOR_NAME_SYMBOL=108 109 | DATA_SYMBOL=109 110 | DATAFILE_SYMBOL=110 111 | DATETIME_SYMBOL=111 112 | DATE_SYMBOL=112 113 | DAY_SYMBOL=113 114 | DEFAULT_AUTH_SYMBOL=114 115 | DEFINER_SYMBOL=115 116 | DELAY_KEY_WRITE_SYMBOL=116 117 | DES_KEY_FILE_SYMBOL=117 118 | DIAGNOSTICS_SYMBOL=118 119 | DIRECTORY_SYMBOL=119 120 | DISABLE_SYMBOL=120 121 | DISCARD_SYMBOL=121 122 | DISK_SYMBOL=122 123 | DUMPFILE_SYMBOL=123 124 | DUPLICATE_SYMBOL=124 125 | DYNAMIC_SYMBOL=125 126 | ENDS_SYMBOL=126 127 | ENUM_SYMBOL=127 128 | ENGINE_SYMBOL=128 129 | ENGINES_SYMBOL=129 130 | ERROR_SYMBOL=130 131 | ERRORS_SYMBOL=131 132 | ESCAPE_SYMBOL=132 133 | EVENT_SYMBOL=133 134 | EVENTS_SYMBOL=134 135 | EVERY_SYMBOL=135 136 | EXPANSION_SYMBOL=136 137 | EXPORT_SYMBOL=137 138 | EXTENDED_SYMBOL=138 139 | EXTENT_SIZE_SYMBOL=139 140 | FAULTS_SYMBOL=140 141 | FAST_SYMBOL=141 142 | FOUND_SYMBOL=142 143 | ENABLE_SYMBOL=143 144 | FULL_SYMBOL=144 145 | FILE_SYMBOL=145 146 | FILE_BLOCK_SIZE_SYMBOL=146 147 | FILTER_SYMBOL=147 148 | FIRST_SYMBOL=148 149 | FIXED_SYMBOL=149 150 | GENERAL_SYMBOL=150 151 | GEOMETRY_SYMBOL=151 152 | GEOMETRYCOLLECTION_SYMBOL=152 153 | GET_FORMAT_SYMBOL=153 154 | GRANTS_SYMBOL=154 155 | GLOBAL_SYMBOL=155 156 | HASH_SYMBOL=156 157 | HOSTS_SYMBOL=157 158 | HOUR_SYMBOL=158 159 | IDENTIFIED_SYMBOL=159 160 | IGNORE_SERVER_IDS_SYMBOL=160 161 | INVOKER_SYMBOL=161 162 | IMPORT_SYMBOL=162 163 | INDEXES_SYMBOL=163 164 | INITIAL_SIZE_SYMBOL=164 165 | INSTANCE_SYMBOL=165 166 | INNODB_SYMBOL=166 167 | IO_SYMBOL=167 168 | IPC_SYMBOL=168 169 | ISOLATION_SYMBOL=169 170 | ISSUER_SYMBOL=170 171 | INSERT_METHOD_SYMBOL=171 172 | JSON_SYMBOL=172 173 | KEY_BLOCK_SIZE_SYMBOL=173 174 | LAST_SYMBOL=174 175 | LEAVES_SYMBOL=175 176 | LESS_SYMBOL=176 177 | LEVEL_SYMBOL=177 178 | LINESTRING_SYMBOL=178 179 | LIST_SYMBOL=179 180 | LOCAL_SYMBOL=180 181 | LOCKS_SYMBOL=181 182 | LOGFILE_SYMBOL=182 183 | LOGS_SYMBOL=183 184 | MAX_ROWS_SYMBOL=184 185 | MASTER_SYMBOL=185 186 | MASTER_HEARTBEAT_PERIOD_SYMBOL=186 187 | MASTER_HOST_SYMBOL=187 188 | MASTER_PORT_SYMBOL=188 189 | MASTER_LOG_FILE_SYMBOL=189 190 | MASTER_LOG_POS_SYMBOL=190 191 | MASTER_USER_SYMBOL=191 192 | MASTER_PASSWORD_SYMBOL=192 193 | MASTER_SERVER_ID_SYMBOL=193 194 | MASTER_CONNECT_RETRY_SYMBOL=194 195 | MASTER_RETRY_COUNT_SYMBOL=195 196 | MASTER_DELAY_SYMBOL=196 197 | MASTER_SSL_SYMBOL=197 198 | MASTER_SSL_CA_SYMBOL=198 199 | MASTER_SSL_CAPATH_SYMBOL=199 200 | MASTER_TLS_VERSION_SYMBOL=200 201 | MASTER_SSL_CERT_SYMBOL=201 202 | MASTER_SSL_CIPHER_SYMBOL=202 203 | MASTER_SSL_CRL_SYMBOL=203 204 | MASTER_SSL_CRLPATH_SYMBOL=204 205 | MASTER_SSL_KEY_SYMBOL=205 206 | MASTER_AUTO_POSITION_SYMBOL=206 207 | MAX_CONNECTIONS_PER_HOUR_SYMBOL=207 208 | MAX_QUERIES_PER_HOUR_SYMBOL=208 209 | MAX_STATEMENT_TIME_SYMBOL=209 210 | MAX_SIZE_SYMBOL=210 211 | MAX_UPDATES_PER_HOUR_SYMBOL=211 212 | MAX_USER_CONNECTIONS_SYMBOL=212 213 | MEDIUM_SYMBOL=213 214 | MEMORY_SYMBOL=214 215 | MERGE_SYMBOL=215 216 | MESSAGE_TEXT_SYMBOL=216 217 | MICROSECOND_SYMBOL=217 218 | MIGRATE_SYMBOL=218 219 | MINUTE_SYMBOL=219 220 | MIN_ROWS_SYMBOL=220 221 | MODIFY_SYMBOL=221 222 | MODE_SYMBOL=222 223 | MONTH_SYMBOL=223 224 | MULTILINESTRING_SYMBOL=224 225 | MULTIPOINT_SYMBOL=225 226 | MULTIPOLYGON_SYMBOL=226 227 | MUTEX_SYMBOL=227 228 | MYSQL_ERRNO_SYMBOL=228 229 | NAME_SYMBOL=229 230 | NAMES_SYMBOL=230 231 | NATIONAL_SYMBOL=231 232 | NCHAR_SYMBOL=232 233 | NDBCLUSTER_SYMBOL=233 234 | NEVER_SYMBOL=234 235 | NEXT_SYMBOL=235 236 | NEW_SYMBOL=236 237 | NO_WAIT_SYMBOL=237 238 | NODEGROUP_SYMBOL=238 239 | NONE_SYMBOL=239 240 | NUMBER_SYMBOL=240 241 | NVARCHAR_SYMBOL=241 242 | OFFSET_SYMBOL=242 243 | OLD_PASSWORD_SYMBOL=243 244 | ONE_SHOT_SYMBOL=244 245 | ONE_SYMBOL=245 246 | PACK_KEYS_SYMBOL=246 247 | PAGE_SYMBOL=247 248 | PARTIAL_SYMBOL=248 249 | PARTITIONING_SYMBOL=249 250 | PARTITIONS_SYMBOL=250 251 | PASSWORD_SYMBOL=251 252 | PHASE_SYMBOL=252 253 | PLUGIN_DIR_SYMBOL=253 254 | PLUGIN_SYMBOL=254 255 | PLUGINS_SYMBOL=255 256 | POINT_SYMBOL=256 257 | POLYGON_SYMBOL=257 258 | PRESERVE_SYMBOL=258 259 | PREV_SYMBOL=259 260 | PRIVILEGES_SYMBOL=260 261 | PROCESS_SYMBOL=261 262 | PROCESSLIST_SYMBOL=262 263 | PROFILE_SYMBOL=263 264 | PROFILES_SYMBOL=264 265 | PROXY_SYMBOL=265 266 | QUARTER_SYMBOL=266 267 | QUERY_SYMBOL=267 268 | QUICK_SYMBOL=268 269 | READ_ONLY_SYMBOL=269 270 | REBUILD_SYMBOL=270 271 | RECOVER_SYMBOL=271 272 | REDO_BUFFER_SIZE_SYMBOL=272 273 | REDOFILE_SYMBOL=273 274 | REDUNDANT_SYMBOL=274 275 | RELAY_SYMBOL=275 276 | RELAYLOG_SYMBOL=276 277 | RELAY_LOG_FILE_SYMBOL=277 278 | RELAY_LOG_POS_SYMBOL=278 279 | RELAY_THREAD_SYMBOL=279 280 | RELOAD_SYMBOL=280 281 | REORGANIZE_SYMBOL=281 282 | REPEATABLE_SYMBOL=282 283 | REPLICATION_SYMBOL=283 284 | REPLICATE_DO_DB_SYMBOL=284 285 | REPLICATE_IGNORE_DB_SYMBOL=285 286 | REPLICATE_DO_TABLE_SYMBOL=286 287 | REPLICATE_IGNORE_TABLE_SYMBOL=287 288 | REPLICATE_WILD_DO_TABLE_SYMBOL=288 289 | REPLICATE_WILD_IGNORE_TABLE_SYMBOL=289 290 | REPLICATE_REWRITE_DB_SYMBOL=290 291 | RESUME_SYMBOL=291 292 | RETURNED_SQLSTATE_SYMBOL=292 293 | RETURNS_SYMBOL=293 294 | REVERSE_SYMBOL=294 295 | ROLLUP_SYMBOL=295 296 | ROTATE_SYMBOL=296 297 | ROUTINE_SYMBOL=297 298 | ROWS_SYMBOL=298 299 | ROW_COUNT_SYMBOL=299 300 | ROW_FORMAT_SYMBOL=300 301 | ROW_SYMBOL=301 302 | RTREE_SYMBOL=302 303 | SCHEDULE_SYMBOL=303 304 | SCHEMA_NAME_SYMBOL=304 305 | SECOND_SYMBOL=305 306 | SERIAL_SYMBOL=306 307 | SERIALIZABLE_SYMBOL=307 308 | SESSION_SYMBOL=308 309 | SIMPLE_SYMBOL=309 310 | SHARE_SYMBOL=310 311 | SLOW_SYMBOL=311 312 | SNAPSHOT_SYMBOL=312 313 | SOUNDS_SYMBOL=313 314 | SOURCE_SYMBOL=314 315 | SQL_AFTER_GTIDS_SYMBOL=315 316 | SQL_AFTER_MTS_GAPS_SYMBOL=316 317 | SQL_BEFORE_GTIDS_SYMBOL=317 318 | SQL_CACHE_SYMBOL=318 319 | SQL_BUFFER_RESULT_SYMBOL=319 320 | SQL_NO_CACHE_SYMBOL=320 321 | SQL_THREAD_SYMBOL=321 322 | STACKED_SYMBOL=322 323 | STARTS_SYMBOL=323 324 | STATS_AUTO_RECALC_SYMBOL=324 325 | STATS_PERSISTENT_SYMBOL=325 326 | STATS_SAMPLE_PAGES_SYMBOL=326 327 | STATUS_SYMBOL=327 328 | STORAGE_SYMBOL=328 329 | STRING_SYMBOL=329 330 | SUBCLASS_ORIGIN_SYMBOL=330 331 | SUBDATE_SYMBOL=331 332 | SUBJECT_SYMBOL=332 333 | SUBPARTITION_SYMBOL=333 334 | SUBPARTITIONS_SYMBOL=334 335 | SUPER_SYMBOL=335 336 | SUSPEND_SYMBOL=336 337 | SWAPS_SYMBOL=337 338 | SWITCHES_SYMBOL=338 339 | TABLE_NAME_SYMBOL=339 340 | TABLES_SYMBOL=340 341 | TABLE_CHECKSUM_SYMBOL=341 342 | TABLESPACE_SYMBOL=342 343 | TEMPORARY_SYMBOL=343 344 | TEMPTABLE_SYMBOL=344 345 | TEXT_SYMBOL=345 346 | THAN_SYMBOL=346 347 | TRANSACTION_SYMBOL=347 348 | TRIGGERS_SYMBOL=348 349 | TIMESTAMP_SYMBOL=349 350 | TIMESTAMP_ADD_SYMBOL=350 351 | TIMESTAMP_DIFF_SYMBOL=351 352 | TIME_SYMBOL=352 353 | TYPES_SYMBOL=353 354 | TYPE_SYMBOL=354 355 | UDF_RETURNS_SYMBOL=355 356 | FUNCTION_SYMBOL=356 357 | UNCOMMITTED_SYMBOL=357 358 | UNDEFINED_SYMBOL=358 359 | UNDO_BUFFER_SIZE_SYMBOL=359 360 | UNDOFILE_SYMBOL=360 361 | UNKNOWN_SYMBOL=361 362 | UNTIL_SYMBOL=362 363 | USER_RESOURCES_SYMBOL=363 364 | USER_SYMBOL=364 365 | USE_FRM_SYMBOL=365 366 | VARIABLES_SYMBOL=366 367 | VIEW_SYMBOL=367 368 | VALUE_SYMBOL=368 369 | WARNINGS_SYMBOL=369 370 | WAIT_SYMBOL=370 371 | WEEK_SYMBOL=371 372 | WORK_SYMBOL=372 373 | WEIGHT_STRING_SYMBOL=373 374 | X509_SYMBOL=374 375 | XID_SYMBOL=375 376 | XML_SYMBOL=376 377 | YEAR_SYMBOL=377 378 | NOT2_SYMBOL=378 379 | CONCAT_PIPES_SYMBOL=379 380 | INT_NUMBER=380 381 | LONG_NUMBER=381 382 | ULONGLONG_NUMBER=382 383 | EQUAL_OPERATOR=383 384 | ASSIGN_OPERATOR=384 385 | NULL_SAFE_EQUAL_OPERATOR=385 386 | GREATER_OR_EQUAL_OPERATOR=386 387 | GREATER_THAN_OPERATOR=387 388 | LESS_OR_EQUAL_OPERATOR=388 389 | LESS_THAN_OPERATOR=389 390 | NOT_EQUAL_OPERATOR=390 391 | PLUS_OPERATOR=391 392 | MINUS_OPERATOR=392 393 | MULT_OPERATOR=393 394 | DIV_OPERATOR=394 395 | MOD_OPERATOR=395 396 | LOGICAL_NOT_OPERATOR=396 397 | BITWISE_NOT_OPERATOR=397 398 | SHIFT_LEFT_OPERATOR=398 399 | SHIFT_RIGHT_OPERATOR=399 400 | LOGICAL_AND_OPERATOR=400 401 | BITWISE_AND_OPERATOR=401 402 | BITWISE_XOR_OPERATOR=402 403 | LOGICAL_OR_OPERATOR=403 404 | BITWISE_OR_OPERATOR=404 405 | DOT_SYMBOL=405 406 | COMMA_SYMBOL=406 407 | SEMICOLON_SYMBOL=407 408 | COLON_SYMBOL=408 409 | OPEN_PAR_SYMBOL=409 410 | CLOSE_PAR_SYMBOL=410 411 | OPEN_CURLY_SYMBOL=411 412 | CLOSE_CURLY_SYMBOL=412 413 | UNDERLINE_SYMBOL=413 414 | JSON_SEPARATOR_SYMBOL=414 415 | JSON_UNQUOTED_SEPARATOR_SYMBOL=415 416 | AT_SIGN_SYMBOL=416 417 | AT_TEXT_SUFFIX=417 418 | AT_AT_SIGN_SYMBOL=418 419 | NULL2_SYMBOL=419 420 | PARAM_MARKER=420 421 | HEX_NUMBER=421 422 | BIN_NUMBER=422 423 | DECIMAL_NUMBER=423 424 | FLOAT_NUMBER=424 425 | ACCESSIBLE_SYMBOL=425 426 | ADD_SYMBOL=426 427 | ALL_SYMBOL=427 428 | ALTER_SYMBOL=428 429 | ANALYSE_SYMBOL=429 430 | AND_SYMBOL=430 431 | AS_SYMBOL=431 432 | ASC_SYMBOL=432 433 | ASENSITIVE_SYMBOL=433 434 | BEFORE_SYMBOL=434 435 | BETWEEN_SYMBOL=435 436 | BIGINT_SYMBOL=436 437 | BINARY_SYMBOL=437 438 | BIN_NUM_SYMBOL=438 439 | BIT_AND_SYMBOL=439 440 | BIT_OR_SYMBOL=440 441 | BIT_XOR_SYMBOL=441 442 | BLOB_SYMBOL=442 443 | BOTH_SYMBOL=443 444 | BY_SYMBOL=444 445 | CALL_SYMBOL=445 446 | CASCADE_SYMBOL=446 447 | CASE_SYMBOL=447 448 | CAST_SYMBOL=448 449 | CHANGE_SYMBOL=449 450 | CHAR_SYMBOL=450 451 | CHECK_SYMBOL=451 452 | COLLATE_SYMBOL=452 453 | COLUMN_SYMBOL=453 454 | CONDITION_SYMBOL=454 455 | CONSTRAINT_SYMBOL=455 456 | CONTINUE_SYMBOL=456 457 | CONVERT_SYMBOL=457 458 | COUNT_SYMBOL=458 459 | CREATE_SYMBOL=459 460 | CROSS_SYMBOL=460 461 | CURDATE_SYMBOL=461 462 | CURRENT_DATE_SYMBOL=462 463 | CURRENT_TIME_SYMBOL=463 464 | CURRENT_USER_SYMBOL=464 465 | CURSOR_SYMBOL=465 466 | CURTIME_SYMBOL=466 467 | DATABASE_SYMBOL=467 468 | DATABASES_SYMBOL=468 469 | DATE_ADD_SYMBOL=469 470 | DATE_SUB_SYMBOL=470 471 | DAY_HOUR_SYMBOL=471 472 | DAY_MICROSECOND_SYMBOL=472 473 | DAY_MINUTE_SYMBOL=473 474 | DAY_SECOND_SYMBOL=474 475 | DECIMAL_NUM_SYMBOL=475 476 | DECIMAL_SYMBOL=476 477 | DECLARE_SYMBOL=477 478 | DEFAULT_SYMBOL=478 479 | DELAYED_SYMBOL=479 480 | DELETE_SYMBOL=480 481 | DESC_SYMBOL=481 482 | DESCRIBE_SYMBOL=482 483 | DETERMINISTIC_SYMBOL=483 484 | DISTINCT_SYMBOL=484 485 | DIV_SYMBOL=485 486 | DOUBLE_SYMBOL=486 487 | DROP_SYMBOL=487 488 | DUAL_SYMBOL=488 489 | EACH_SYMBOL=489 490 | ELSE_SYMBOL=490 491 | ELSEIF_SYMBOL=491 492 | ENCLOSED_SYMBOL=492 493 | END_OF_INPUT_SYMBOL=493 494 | ESCAPED_SYMBOL=494 495 | EXCHANGE_SYMBOL=495 496 | EXISTS_SYMBOL=496 497 | EXIT_SYMBOL=497 498 | EXPIRE_SYMBOL=498 499 | EXPLAIN_SYMBOL=499 500 | EXTRACT_SYMBOL=500 501 | FALSE_SYMBOL=501 502 | FETCH_SYMBOL=502 503 | FLOAT_SYMBOL=503 504 | FORCE_SYMBOL=504 505 | FOREIGN_SYMBOL=505 506 | FOR_SYMBOL=506 507 | FROM_SYMBOL=507 508 | FULLTEXT_SYMBOL=508 509 | GET_SYMBOL=509 510 | GENERATED_SYMBOL=510 511 | GRANT_SYMBOL=511 512 | GROUP_SYMBOL=512 513 | GROUP_CONCAT_SYMBOL=513 514 | HAVING_SYMBOL=514 515 | HIGH_PRIORITY_SYMBOL=515 516 | HOUR_MICROSECOND_SYMBOL=516 517 | HOUR_MINUTE_SYMBOL=517 518 | HOUR_SECOND_SYMBOL=518 519 | IF_SYMBOL=519 520 | IGNORE_SYMBOL=520 521 | INDEX_SYMBOL=521 522 | INFILE_SYMBOL=522 523 | INNER_SYMBOL=523 524 | INOUT_SYMBOL=524 525 | INSENSITIVE_SYMBOL=525 526 | INSERT_SYMBOL=526 527 | INTERVAL_SYMBOL=527 528 | INTO_SYMBOL=528 529 | INT_SYMBOL=529 530 | IN_SYMBOL=530 531 | IO_AFTER_GTIDS_SYMBOL=531 532 | IO_BEFORE_GTIDS_SYMBOL=532 533 | IS_SYMBOL=533 534 | ITERATE_SYMBOL=534 535 | JOIN_SYMBOL=535 536 | KEYS_SYMBOL=536 537 | KEY_SYMBOL=537 538 | KILL_SYMBOL=538 539 | LEADING_SYMBOL=539 540 | LEAVE_SYMBOL=540 541 | LEFT_SYMBOL=541 542 | LIKE_SYMBOL=542 543 | LIMIT_SYMBOL=543 544 | LINEAR_SYMBOL=544 545 | LINES_SYMBOL=545 546 | LOAD_SYMBOL=546 547 | LOCATOR_SYMBOL=547 548 | LOCK_SYMBOL=548 549 | LONGBLOB_SYMBOL=549 550 | LONGTEXT_SYMBOL=550 551 | LONG_NUM_SYMBOL=551 552 | LONG_SYMBOL=552 553 | LOOP_SYMBOL=553 554 | LOW_PRIORITY_SYMBOL=554 555 | MASTER_BIND_SYMBOL=555 556 | MASTER_SSL_VERIFY_SERVER_CERT_SYMBOL=556 557 | MATCH_SYMBOL=557 558 | MAX_SYMBOL=558 559 | MAXVALUE_SYMBOL=559 560 | MEDIUMBLOB_SYMBOL=560 561 | MEDIUMINT_SYMBOL=561 562 | MEDIUMTEXT_SYMBOL=562 563 | MID_SYMBOL=563 564 | MINUTE_MICROSECOND_SYMBOL=564 565 | MINUTE_SECOND_SYMBOL=565 566 | MIN_SYMBOL=566 567 | MODIFIES_SYMBOL=567 568 | MOD_SYMBOL=568 569 | NATURAL_SYMBOL=569 570 | NCHAR_STRING_SYMBOL=570 571 | NEG_SYMBOL=571 572 | NONBLOCKING_SYMBOL=572 573 | NOT_SYMBOL=573 574 | NOW_SYMBOL=574 575 | NO_WRITE_TO_BINLOG_SYMBOL=575 576 | NULL_SYMBOL=576 577 | NUMERIC_SYMBOL=577 578 | OFFLINE_SYMBOL=578 579 | ON_SYMBOL=579 580 | ONLINE_SYMBOL=580 581 | ONLY_SYMBOL=581 582 | OPTIMIZE_SYMBOL=582 583 | OPTIMIZER_COSTS_SYMBOL=583 584 | OPTION_SYMBOL=584 585 | OPTIONALLY_SYMBOL=585 586 | ORDER_SYMBOL=586 587 | OR_SYMBOL=587 588 | OUTER_SYMBOL=588 589 | OUTFILE_SYMBOL=589 590 | OUT_SYMBOL=590 591 | POSITION_SYMBOL=591 592 | PRECISION_SYMBOL=592 593 | PRIMARY_SYMBOL=593 594 | PROCEDURE_SYMBOL=594 595 | PURGE_SYMBOL=595 596 | RANGE_SYMBOL=596 597 | READS_SYMBOL=597 598 | READ_SYMBOL=598 599 | READ_WRITE_SYMBOL=599 600 | REAL_SYMBOL=600 601 | REFERENCES_SYMBOL=601 602 | REGEXP_SYMBOL=602 603 | RELEASE_SYMBOL=603 604 | RENAME_SYMBOL=604 605 | REPEAT_SYMBOL=605 606 | REPLACE_SYMBOL=606 607 | REQUIRE_SYMBOL=607 608 | RESIGNAL_SYMBOL=608 609 | RESTRICT_SYMBOL=609 610 | RETURN_SYMBOL=610 611 | REVOKE_SYMBOL=611 612 | RIGHT_SYMBOL=612 613 | SECOND_MICROSECOND_SYMBOL=613 614 | SELECT_SYMBOL=614 615 | SENSITIVE_SYMBOL=615 616 | SEPARATOR_SYMBOL=616 617 | SERVER_OPTIONS_SYMBOL=617 618 | SESSION_USER_SYMBOL=618 619 | SET_SYMBOL=619 620 | SET_VAR_SYMBOL=620 621 | SHOW_SYMBOL=621 622 | SIGNAL_SYMBOL=622 623 | SMALLINT_SYMBOL=623 624 | SPATIAL_SYMBOL=624 625 | SPECIFIC_SYMBOL=625 626 | SQLEXCEPTION_SYMBOL=626 627 | SQLSTATE_SYMBOL=627 628 | SQLWARNING_SYMBOL=628 629 | SQL_BIG_RESULT_SYMBOL=629 630 | SQL_CALC_FOUND_ROWS_SYMBOL=630 631 | SQL_SMALL_RESULT_SYMBOL=631 632 | SQL_SYMBOL=632 633 | SSL_SYMBOL=633 634 | STARTING_SYMBOL=634 635 | STDDEV_SAMP_SYMBOL=635 636 | STDDEV_SYMBOL=636 637 | STDDEV_POP_SYMBOL=637 638 | STD_SYMBOL=638 639 | STORED_SYMBOL=639 640 | STRAIGHT_JOIN_SYMBOL=640 641 | SUBSTR_SYMBOL=641 642 | SUBSTRING_SYMBOL=642 643 | SUM_SYMBOL=643 644 | SYSDATE_SYMBOL=644 645 | SYSTEM_USER_SYMBOL=645 646 | TABLE_REF_PRIORITY_SYMBOL=646 647 | TABLE_SYMBOL=647 648 | TERMINATED_SYMBOL=648 649 | THEN_SYMBOL=649 650 | TINYBLOB_SYMBOL=650 651 | TINYINT_SYMBOL=651 652 | TINYTEXT_SYMBOL=652 653 | TO_SYMBOL=653 654 | TRAILING_SYMBOL=654 655 | TRIGGER_SYMBOL=655 656 | TRIM_SYMBOL=656 657 | TRUE_SYMBOL=657 658 | UNDO_SYMBOL=658 659 | UNION_SYMBOL=659 660 | UNIQUE_SYMBOL=660 661 | UNLOCK_SYMBOL=661 662 | UNSIGNED_SYMBOL=662 663 | UPDATE_SYMBOL=663 664 | USAGE_SYMBOL=664 665 | USE_SYMBOL=665 666 | USING_SYMBOL=666 667 | UTC_DATE_SYMBOL=667 668 | UTC_TIMESTAMP_SYMBOL=668 669 | UTC_TIME_SYMBOL=669 670 | VALIDATION_SYMBOL=670 671 | VALUES_SYMBOL=671 672 | VARBINARY_SYMBOL=672 673 | VARCHAR_SYMBOL=673 674 | VARIANCE_SYMBOL=674 675 | VARYING_SYMBOL=675 676 | VAR_POP_SYMBOL=676 677 | VAR_SAMP_SYMBOL=677 678 | VIRTUAL_SYMBOL=678 679 | WHEN_SYMBOL=679 680 | WHERE_SYMBOL=680 681 | WHILE_SYMBOL=681 682 | WITH_SYMBOL=682 683 | WITHOUT_SYMBOL=683 684 | WRITE_SYMBOL=684 685 | XOR_SYMBOL=685 686 | YEAR_MONTH_SYMBOL=686 687 | ZEROFILL_SYMBOL=687 688 | PERSIST_SYMBOL=688 689 | ROLE_SYMBOL=689 690 | ADMIN_SYMBOL=690 691 | INVISIBLE_SYMBOL=691 692 | VISIBLE_SYMBOL=692 693 | EXCEPT_SYMBOL=693 694 | COMPONENT_SYMBOL=694 695 | RECURSIVE_SYMBOL=695 696 | JSON_OBJECTAGG_SYMBOL=696 697 | JSON_ARRAYAGG_SYMBOL=697 698 | OF_SYMBOL=698 699 | SKIP_SYMBOL=699 700 | LOCKED_SYMBOL=700 701 | NOWAIT_SYMBOL=701 702 | GROUPING_SYMBOL=702 703 | PERSIST_ONLY_SYMBOL=703 704 | HISTOGRAM_SYMBOL=704 705 | BUCKETS_SYMBOL=705 706 | REMOTE_SYMBOL=706 707 | CLONE_SYMBOL=707 708 | CUME_DIST_SYMBOL=708 709 | DENSE_RANK_SYMBOL=709 710 | EXCLUDE_SYMBOL=710 711 | FIRST_VALUE_SYMBOL=711 712 | FOLLOWING_SYMBOL=712 713 | GROUPS_SYMBOL=713 714 | LAG_SYMBOL=714 715 | LAST_VALUE_SYMBOL=715 716 | LEAD_SYMBOL=716 717 | NTH_VALUE_SYMBOL=717 718 | NTILE_SYMBOL=718 719 | NULLS_SYMBOL=719 720 | OTHERS_SYMBOL=720 721 | OVER_SYMBOL=721 722 | PERCENT_RANK_SYMBOL=722 723 | PRECEDING_SYMBOL=723 724 | RANK_SYMBOL=724 725 | RESPECT_SYMBOL=725 726 | ROW_NUMBER_SYMBOL=726 727 | TIES_SYMBOL=727 728 | UNBOUNDED_SYMBOL=728 729 | WINDOW_SYMBOL=729 730 | EMPTY_SYMBOL=730 731 | JSON_TABLE_SYMBOL=731 732 | NESTED_SYMBOL=732 733 | ORDINALITY_SYMBOL=733 734 | PATH_SYMBOL=734 735 | HISTORY_SYMBOL=735 736 | REUSE_SYMBOL=736 737 | SRID_SYMBOL=737 738 | THREAD_PRIORITY_SYMBOL=738 739 | RESOURCE_SYMBOL=739 740 | SYSTEM_SYMBOL=740 741 | VCPU_SYMBOL=741 742 | MASTER_PUBLIC_KEY_PATH_SYMBOL=742 743 | GET_MASTER_PUBLIC_KEY_SYMBOL=743 744 | RESTART_SYMBOL=744 745 | DEFINITION_SYMBOL=745 746 | DESCRIPTION_SYMBOL=746 747 | ORGANIZATION_SYMBOL=747 748 | REFERENCE_SYMBOL=748 749 | OPTIONAL_SYMBOL=749 750 | SECONDARY_SYMBOL=750 751 | SECONDARY_ENGINE_SYMBOL=751 752 | SECONDARY_LOAD_SYMBOL=752 753 | SECONDARY_UNLOAD_SYMBOL=753 754 | ACTIVE_SYMBOL=754 755 | INACTIVE_SYMBOL=755 756 | LATERAL_SYMBOL=756 757 | RETAIN_SYMBOL=757 758 | OLD_SYMBOL=758 759 | NETWORK_NAMESPACE_SYMBOL=759 760 | ENFORCED_SYMBOL=760 761 | ARRAY_SYMBOL=761 762 | OJ_SYMBOL=762 763 | MEMBER_SYMBOL=763 764 | RANDOM_SYMBOL=764 765 | MASTER_COMPRESSION_ALGORITHM_SYMBOL=765 766 | MASTER_ZSTD_COMPRESSION_LEVEL_SYMBOL=766 767 | PRIVILEGE_CHECKS_USER_SYMBOL=767 768 | MASTER_TLS_CIPHERSUITES_SYMBOL=768 769 | WHITESPACE=769 770 | INVALID_INPUT=770 771 | UNDERSCORE_CHARSET=771 772 | IDENTIFIER=772 773 | NCHAR_TEXT=773 774 | BACK_TICK_QUOTED_ID=774 775 | DOUBLE_QUOTED_TEXT=775 776 | SINGLE_QUOTED_TEXT=776 777 | VERSION_COMMENT_START=777 778 | MYSQL_COMMENT_START=778 779 | VERSION_COMMENT_END=779 780 | BLOCK_COMMENT=780 781 | POUND_COMMENT=781 782 | DASHDASH_COMMENT=782 783 | NOT_EQUAL2_OPERATOR=783 784 | '='=383 785 | ':='=384 786 | '<=>'=385 787 | '>='=386 788 | '>'=387 789 | '<='=388 790 | '<'=389 791 | '!='=390 792 | '<>'=783 793 | '+'=391 794 | '-'=392 795 | '*'=393 796 | '/'=394 797 | '%'=395 798 | '!'=396 799 | '~'=397 800 | '<<'=398 801 | '>>'=399 802 | '&&'=400 803 | '&'=401 804 | '^'=402 805 | '||'=403 806 | '|'=404 807 | '.'=405 808 | ','=406 809 | ';'=407 810 | ':'=408 811 | '('=409 812 | ')'=410 813 | '{'=411 814 | '}'=412 815 | '_'=413 816 | '->'=414 817 | '->>'=415 818 | '@'=416 819 | '@@'=418 820 | '\\N'=419 821 | '?'=420 822 | -------------------------------------------------------------------------------- /src/grammar/MySQLParser.tokens: -------------------------------------------------------------------------------- 1 | ACCOUNT_SYMBOL=1 2 | ASCII_SYMBOL=2 3 | ALWAYS_SYMBOL=3 4 | BACKUP_SYMBOL=4 5 | BEGIN_SYMBOL=5 6 | BYTE_SYMBOL=6 7 | CACHE_SYMBOL=7 8 | CHARSET_SYMBOL=8 9 | CHECKSUM_SYMBOL=9 10 | CLOSE_SYMBOL=10 11 | COMMENT_SYMBOL=11 12 | COMMIT_SYMBOL=12 13 | CONTAINS_SYMBOL=13 14 | DEALLOCATE_SYMBOL=14 15 | DO_SYMBOL=15 16 | END_SYMBOL=16 17 | EXECUTE_SYMBOL=17 18 | FLUSH_SYMBOL=18 19 | FOLLOWS_SYMBOL=19 20 | FORMAT_SYMBOL=20 21 | GROUP_REPLICATION_SYMBOL=21 22 | HANDLER_SYMBOL=22 23 | HELP_SYMBOL=23 24 | HOST_SYMBOL=24 25 | INSTALL_SYMBOL=25 26 | LANGUAGE_SYMBOL=26 27 | NO_SYMBOL=27 28 | OPEN_SYMBOL=28 29 | OPTIONS_SYMBOL=29 30 | OWNER_SYMBOL=30 31 | PARSER_SYMBOL=31 32 | PARTITION_SYMBOL=32 33 | PORT_SYMBOL=33 34 | PRECEDES_SYMBOL=34 35 | PREPARE_SYMBOL=35 36 | REMOVE_SYMBOL=36 37 | REPAIR_SYMBOL=37 38 | RESET_SYMBOL=38 39 | RESTORE_SYMBOL=39 40 | ROLLBACK_SYMBOL=40 41 | SAVEPOINT_SYMBOL=41 42 | SECURITY_SYMBOL=42 43 | SERVER_SYMBOL=43 44 | SIGNED_SYMBOL=44 45 | SLAVE_SYMBOL=45 46 | SOCKET_SYMBOL=46 47 | SONAME_SYMBOL=47 48 | START_SYMBOL=48 49 | STOP_SYMBOL=49 50 | TRUNCATE_SYMBOL=50 51 | UNICODE_SYMBOL=51 52 | UNINSTALL_SYMBOL=52 53 | UPGRADE_SYMBOL=53 54 | WRAPPER_SYMBOL=54 55 | XA_SYMBOL=55 56 | SHUTDOWN_SYMBOL=56 57 | ACTION_SYMBOL=57 58 | ADDDATE_SYMBOL=58 59 | AFTER_SYMBOL=59 60 | AGAINST_SYMBOL=60 61 | AGGREGATE_SYMBOL=61 62 | ALGORITHM_SYMBOL=62 63 | ANALYZE_SYMBOL=63 64 | ANY_SYMBOL=64 65 | AT_SYMBOL=65 66 | AUTHORS_SYMBOL=66 67 | AUTO_INCREMENT_SYMBOL=67 68 | AUTOEXTEND_SIZE_SYMBOL=68 69 | AVG_ROW_LENGTH_SYMBOL=69 70 | AVG_SYMBOL=70 71 | BINLOG_SYMBOL=71 72 | BIT_SYMBOL=72 73 | BLOCK_SYMBOL=73 74 | BOOL_SYMBOL=74 75 | BOOLEAN_SYMBOL=75 76 | BTREE_SYMBOL=76 77 | CASCADED_SYMBOL=77 78 | CATALOG_NAME_SYMBOL=78 79 | CHAIN_SYMBOL=79 80 | CHANGED_SYMBOL=80 81 | CHANNEL_SYMBOL=81 82 | CIPHER_SYMBOL=82 83 | CLIENT_SYMBOL=83 84 | CLASS_ORIGIN_SYMBOL=84 85 | COALESCE_SYMBOL=85 86 | CODE_SYMBOL=86 87 | COLLATION_SYMBOL=87 88 | COLUMN_NAME_SYMBOL=88 89 | COLUMN_FORMAT_SYMBOL=89 90 | COLUMNS_SYMBOL=90 91 | COMMITTED_SYMBOL=91 92 | COMPACT_SYMBOL=92 93 | COMPLETION_SYMBOL=93 94 | COMPRESSED_SYMBOL=94 95 | COMPRESSION_SYMBOL=95 96 | ENCRYPTION_SYMBOL=96 97 | CONCURRENT_SYMBOL=97 98 | CONNECTION_SYMBOL=98 99 | CONSISTENT_SYMBOL=99 100 | CONSTRAINT_CATALOG_SYMBOL=100 101 | CONSTRAINT_SCHEMA_SYMBOL=101 102 | CONSTRAINT_NAME_SYMBOL=102 103 | CONTEXT_SYMBOL=103 104 | CONTRIBUTORS_SYMBOL=104 105 | CPU_SYMBOL=105 106 | CUBE_SYMBOL=106 107 | CURRENT_SYMBOL=107 108 | CURSOR_NAME_SYMBOL=108 109 | DATA_SYMBOL=109 110 | DATAFILE_SYMBOL=110 111 | DATETIME_SYMBOL=111 112 | DATE_SYMBOL=112 113 | DAY_SYMBOL=113 114 | DEFAULT_AUTH_SYMBOL=114 115 | DEFINER_SYMBOL=115 116 | DELAY_KEY_WRITE_SYMBOL=116 117 | DES_KEY_FILE_SYMBOL=117 118 | DIAGNOSTICS_SYMBOL=118 119 | DIRECTORY_SYMBOL=119 120 | DISABLE_SYMBOL=120 121 | DISCARD_SYMBOL=121 122 | DISK_SYMBOL=122 123 | DUMPFILE_SYMBOL=123 124 | DUPLICATE_SYMBOL=124 125 | DYNAMIC_SYMBOL=125 126 | ENDS_SYMBOL=126 127 | ENUM_SYMBOL=127 128 | ENGINE_SYMBOL=128 129 | ENGINES_SYMBOL=129 130 | ERROR_SYMBOL=130 131 | ERRORS_SYMBOL=131 132 | ESCAPE_SYMBOL=132 133 | EVENT_SYMBOL=133 134 | EVENTS_SYMBOL=134 135 | EVERY_SYMBOL=135 136 | EXPANSION_SYMBOL=136 137 | EXPORT_SYMBOL=137 138 | EXTENDED_SYMBOL=138 139 | EXTENT_SIZE_SYMBOL=139 140 | FAULTS_SYMBOL=140 141 | FAST_SYMBOL=141 142 | FOUND_SYMBOL=142 143 | ENABLE_SYMBOL=143 144 | FULL_SYMBOL=144 145 | FILE_SYMBOL=145 146 | FILE_BLOCK_SIZE_SYMBOL=146 147 | FILTER_SYMBOL=147 148 | FIRST_SYMBOL=148 149 | FIXED_SYMBOL=149 150 | GENERAL_SYMBOL=150 151 | GEOMETRY_SYMBOL=151 152 | GEOMETRYCOLLECTION_SYMBOL=152 153 | GET_FORMAT_SYMBOL=153 154 | GRANTS_SYMBOL=154 155 | GLOBAL_SYMBOL=155 156 | HASH_SYMBOL=156 157 | HOSTS_SYMBOL=157 158 | HOUR_SYMBOL=158 159 | IDENTIFIED_SYMBOL=159 160 | IGNORE_SERVER_IDS_SYMBOL=160 161 | INVOKER_SYMBOL=161 162 | IMPORT_SYMBOL=162 163 | INDEXES_SYMBOL=163 164 | INITIAL_SIZE_SYMBOL=164 165 | INSTANCE_SYMBOL=165 166 | INNODB_SYMBOL=166 167 | IO_SYMBOL=167 168 | IPC_SYMBOL=168 169 | ISOLATION_SYMBOL=169 170 | ISSUER_SYMBOL=170 171 | INSERT_METHOD_SYMBOL=171 172 | JSON_SYMBOL=172 173 | KEY_BLOCK_SIZE_SYMBOL=173 174 | LAST_SYMBOL=174 175 | LEAVES_SYMBOL=175 176 | LESS_SYMBOL=176 177 | LEVEL_SYMBOL=177 178 | LINESTRING_SYMBOL=178 179 | LIST_SYMBOL=179 180 | LOCAL_SYMBOL=180 181 | LOCKS_SYMBOL=181 182 | LOGFILE_SYMBOL=182 183 | LOGS_SYMBOL=183 184 | MAX_ROWS_SYMBOL=184 185 | MASTER_SYMBOL=185 186 | MASTER_HEARTBEAT_PERIOD_SYMBOL=186 187 | MASTER_HOST_SYMBOL=187 188 | MASTER_PORT_SYMBOL=188 189 | MASTER_LOG_FILE_SYMBOL=189 190 | MASTER_LOG_POS_SYMBOL=190 191 | MASTER_USER_SYMBOL=191 192 | MASTER_PASSWORD_SYMBOL=192 193 | MASTER_SERVER_ID_SYMBOL=193 194 | MASTER_CONNECT_RETRY_SYMBOL=194 195 | MASTER_RETRY_COUNT_SYMBOL=195 196 | MASTER_DELAY_SYMBOL=196 197 | MASTER_SSL_SYMBOL=197 198 | MASTER_SSL_CA_SYMBOL=198 199 | MASTER_SSL_CAPATH_SYMBOL=199 200 | MASTER_TLS_VERSION_SYMBOL=200 201 | MASTER_SSL_CERT_SYMBOL=201 202 | MASTER_SSL_CIPHER_SYMBOL=202 203 | MASTER_SSL_CRL_SYMBOL=203 204 | MASTER_SSL_CRLPATH_SYMBOL=204 205 | MASTER_SSL_KEY_SYMBOL=205 206 | MASTER_AUTO_POSITION_SYMBOL=206 207 | MAX_CONNECTIONS_PER_HOUR_SYMBOL=207 208 | MAX_QUERIES_PER_HOUR_SYMBOL=208 209 | MAX_STATEMENT_TIME_SYMBOL=209 210 | MAX_SIZE_SYMBOL=210 211 | MAX_UPDATES_PER_HOUR_SYMBOL=211 212 | MAX_USER_CONNECTIONS_SYMBOL=212 213 | MEDIUM_SYMBOL=213 214 | MEMORY_SYMBOL=214 215 | MERGE_SYMBOL=215 216 | MESSAGE_TEXT_SYMBOL=216 217 | MICROSECOND_SYMBOL=217 218 | MIGRATE_SYMBOL=218 219 | MINUTE_SYMBOL=219 220 | MIN_ROWS_SYMBOL=220 221 | MODIFY_SYMBOL=221 222 | MODE_SYMBOL=222 223 | MONTH_SYMBOL=223 224 | MULTILINESTRING_SYMBOL=224 225 | MULTIPOINT_SYMBOL=225 226 | MULTIPOLYGON_SYMBOL=226 227 | MUTEX_SYMBOL=227 228 | MYSQL_ERRNO_SYMBOL=228 229 | NAME_SYMBOL=229 230 | NAMES_SYMBOL=230 231 | NATIONAL_SYMBOL=231 232 | NCHAR_SYMBOL=232 233 | NDBCLUSTER_SYMBOL=233 234 | NEVER_SYMBOL=234 235 | NEXT_SYMBOL=235 236 | NEW_SYMBOL=236 237 | NO_WAIT_SYMBOL=237 238 | NODEGROUP_SYMBOL=238 239 | NONE_SYMBOL=239 240 | NUMBER_SYMBOL=240 241 | NVARCHAR_SYMBOL=241 242 | OFFSET_SYMBOL=242 243 | OLD_PASSWORD_SYMBOL=243 244 | ONE_SHOT_SYMBOL=244 245 | ONE_SYMBOL=245 246 | PACK_KEYS_SYMBOL=246 247 | PAGE_SYMBOL=247 248 | PARTIAL_SYMBOL=248 249 | PARTITIONING_SYMBOL=249 250 | PARTITIONS_SYMBOL=250 251 | PASSWORD_SYMBOL=251 252 | PHASE_SYMBOL=252 253 | PLUGIN_DIR_SYMBOL=253 254 | PLUGIN_SYMBOL=254 255 | PLUGINS_SYMBOL=255 256 | POINT_SYMBOL=256 257 | POLYGON_SYMBOL=257 258 | PRESERVE_SYMBOL=258 259 | PREV_SYMBOL=259 260 | PRIVILEGES_SYMBOL=260 261 | PROCESS_SYMBOL=261 262 | PROCESSLIST_SYMBOL=262 263 | PROFILE_SYMBOL=263 264 | PROFILES_SYMBOL=264 265 | PROXY_SYMBOL=265 266 | QUARTER_SYMBOL=266 267 | QUERY_SYMBOL=267 268 | QUICK_SYMBOL=268 269 | READ_ONLY_SYMBOL=269 270 | REBUILD_SYMBOL=270 271 | RECOVER_SYMBOL=271 272 | REDO_BUFFER_SIZE_SYMBOL=272 273 | REDOFILE_SYMBOL=273 274 | REDUNDANT_SYMBOL=274 275 | RELAY_SYMBOL=275 276 | RELAYLOG_SYMBOL=276 277 | RELAY_LOG_FILE_SYMBOL=277 278 | RELAY_LOG_POS_SYMBOL=278 279 | RELAY_THREAD_SYMBOL=279 280 | RELOAD_SYMBOL=280 281 | REORGANIZE_SYMBOL=281 282 | REPEATABLE_SYMBOL=282 283 | REPLICATION_SYMBOL=283 284 | REPLICATE_DO_DB_SYMBOL=284 285 | REPLICATE_IGNORE_DB_SYMBOL=285 286 | REPLICATE_DO_TABLE_SYMBOL=286 287 | REPLICATE_IGNORE_TABLE_SYMBOL=287 288 | REPLICATE_WILD_DO_TABLE_SYMBOL=288 289 | REPLICATE_WILD_IGNORE_TABLE_SYMBOL=289 290 | REPLICATE_REWRITE_DB_SYMBOL=290 291 | RESUME_SYMBOL=291 292 | RETURNED_SQLSTATE_SYMBOL=292 293 | RETURNS_SYMBOL=293 294 | REVERSE_SYMBOL=294 295 | ROLLUP_SYMBOL=295 296 | ROTATE_SYMBOL=296 297 | ROUTINE_SYMBOL=297 298 | ROWS_SYMBOL=298 299 | ROW_COUNT_SYMBOL=299 300 | ROW_FORMAT_SYMBOL=300 301 | ROW_SYMBOL=301 302 | RTREE_SYMBOL=302 303 | SCHEDULE_SYMBOL=303 304 | SCHEMA_NAME_SYMBOL=304 305 | SECOND_SYMBOL=305 306 | SERIAL_SYMBOL=306 307 | SERIALIZABLE_SYMBOL=307 308 | SESSION_SYMBOL=308 309 | SIMPLE_SYMBOL=309 310 | SHARE_SYMBOL=310 311 | SLOW_SYMBOL=311 312 | SNAPSHOT_SYMBOL=312 313 | SOUNDS_SYMBOL=313 314 | SOURCE_SYMBOL=314 315 | SQL_AFTER_GTIDS_SYMBOL=315 316 | SQL_AFTER_MTS_GAPS_SYMBOL=316 317 | SQL_BEFORE_GTIDS_SYMBOL=317 318 | SQL_CACHE_SYMBOL=318 319 | SQL_BUFFER_RESULT_SYMBOL=319 320 | SQL_NO_CACHE_SYMBOL=320 321 | SQL_THREAD_SYMBOL=321 322 | STACKED_SYMBOL=322 323 | STARTS_SYMBOL=323 324 | STATS_AUTO_RECALC_SYMBOL=324 325 | STATS_PERSISTENT_SYMBOL=325 326 | STATS_SAMPLE_PAGES_SYMBOL=326 327 | STATUS_SYMBOL=327 328 | STORAGE_SYMBOL=328 329 | STRING_SYMBOL=329 330 | SUBCLASS_ORIGIN_SYMBOL=330 331 | SUBDATE_SYMBOL=331 332 | SUBJECT_SYMBOL=332 333 | SUBPARTITION_SYMBOL=333 334 | SUBPARTITIONS_SYMBOL=334 335 | SUPER_SYMBOL=335 336 | SUSPEND_SYMBOL=336 337 | SWAPS_SYMBOL=337 338 | SWITCHES_SYMBOL=338 339 | TABLE_NAME_SYMBOL=339 340 | TABLES_SYMBOL=340 341 | TABLE_CHECKSUM_SYMBOL=341 342 | TABLESPACE_SYMBOL=342 343 | TEMPORARY_SYMBOL=343 344 | TEMPTABLE_SYMBOL=344 345 | TEXT_SYMBOL=345 346 | THAN_SYMBOL=346 347 | TRANSACTION_SYMBOL=347 348 | TRIGGERS_SYMBOL=348 349 | TIMESTAMP_SYMBOL=349 350 | TIMESTAMP_ADD_SYMBOL=350 351 | TIMESTAMP_DIFF_SYMBOL=351 352 | TIME_SYMBOL=352 353 | TYPES_SYMBOL=353 354 | TYPE_SYMBOL=354 355 | UDF_RETURNS_SYMBOL=355 356 | FUNCTION_SYMBOL=356 357 | UNCOMMITTED_SYMBOL=357 358 | UNDEFINED_SYMBOL=358 359 | UNDO_BUFFER_SIZE_SYMBOL=359 360 | UNDOFILE_SYMBOL=360 361 | UNKNOWN_SYMBOL=361 362 | UNTIL_SYMBOL=362 363 | USER_RESOURCES_SYMBOL=363 364 | USER_SYMBOL=364 365 | USE_FRM_SYMBOL=365 366 | VARIABLES_SYMBOL=366 367 | VIEW_SYMBOL=367 368 | VALUE_SYMBOL=368 369 | WARNINGS_SYMBOL=369 370 | WAIT_SYMBOL=370 371 | WEEK_SYMBOL=371 372 | WORK_SYMBOL=372 373 | WEIGHT_STRING_SYMBOL=373 374 | X509_SYMBOL=374 375 | XID_SYMBOL=375 376 | XML_SYMBOL=376 377 | YEAR_SYMBOL=377 378 | NOT2_SYMBOL=378 379 | CONCAT_PIPES_SYMBOL=379 380 | INT_NUMBER=380 381 | LONG_NUMBER=381 382 | ULONGLONG_NUMBER=382 383 | EQUAL_OPERATOR=383 384 | ASSIGN_OPERATOR=384 385 | NULL_SAFE_EQUAL_OPERATOR=385 386 | GREATER_OR_EQUAL_OPERATOR=386 387 | GREATER_THAN_OPERATOR=387 388 | LESS_OR_EQUAL_OPERATOR=388 389 | LESS_THAN_OPERATOR=389 390 | NOT_EQUAL_OPERATOR=390 391 | PLUS_OPERATOR=391 392 | MINUS_OPERATOR=392 393 | MULT_OPERATOR=393 394 | DIV_OPERATOR=394 395 | MOD_OPERATOR=395 396 | LOGICAL_NOT_OPERATOR=396 397 | BITWISE_NOT_OPERATOR=397 398 | SHIFT_LEFT_OPERATOR=398 399 | SHIFT_RIGHT_OPERATOR=399 400 | LOGICAL_AND_OPERATOR=400 401 | BITWISE_AND_OPERATOR=401 402 | BITWISE_XOR_OPERATOR=402 403 | LOGICAL_OR_OPERATOR=403 404 | BITWISE_OR_OPERATOR=404 405 | DOT_SYMBOL=405 406 | COMMA_SYMBOL=406 407 | SEMICOLON_SYMBOL=407 408 | COLON_SYMBOL=408 409 | OPEN_PAR_SYMBOL=409 410 | CLOSE_PAR_SYMBOL=410 411 | OPEN_CURLY_SYMBOL=411 412 | CLOSE_CURLY_SYMBOL=412 413 | UNDERLINE_SYMBOL=413 414 | JSON_SEPARATOR_SYMBOL=414 415 | JSON_UNQUOTED_SEPARATOR_SYMBOL=415 416 | AT_SIGN_SYMBOL=416 417 | AT_TEXT_SUFFIX=417 418 | AT_AT_SIGN_SYMBOL=418 419 | NULL2_SYMBOL=419 420 | PARAM_MARKER=420 421 | HEX_NUMBER=421 422 | BIN_NUMBER=422 423 | DECIMAL_NUMBER=423 424 | FLOAT_NUMBER=424 425 | ACCESSIBLE_SYMBOL=425 426 | ADD_SYMBOL=426 427 | ALL_SYMBOL=427 428 | ALTER_SYMBOL=428 429 | ANALYSE_SYMBOL=429 430 | AND_SYMBOL=430 431 | AS_SYMBOL=431 432 | ASC_SYMBOL=432 433 | ASENSITIVE_SYMBOL=433 434 | BEFORE_SYMBOL=434 435 | BETWEEN_SYMBOL=435 436 | BIGINT_SYMBOL=436 437 | BINARY_SYMBOL=437 438 | BIN_NUM_SYMBOL=438 439 | BIT_AND_SYMBOL=439 440 | BIT_OR_SYMBOL=440 441 | BIT_XOR_SYMBOL=441 442 | BLOB_SYMBOL=442 443 | BOTH_SYMBOL=443 444 | BY_SYMBOL=444 445 | CALL_SYMBOL=445 446 | CASCADE_SYMBOL=446 447 | CASE_SYMBOL=447 448 | CAST_SYMBOL=448 449 | CHANGE_SYMBOL=449 450 | CHAR_SYMBOL=450 451 | CHECK_SYMBOL=451 452 | COLLATE_SYMBOL=452 453 | COLUMN_SYMBOL=453 454 | CONDITION_SYMBOL=454 455 | CONSTRAINT_SYMBOL=455 456 | CONTINUE_SYMBOL=456 457 | CONVERT_SYMBOL=457 458 | COUNT_SYMBOL=458 459 | CREATE_SYMBOL=459 460 | CROSS_SYMBOL=460 461 | CURDATE_SYMBOL=461 462 | CURRENT_DATE_SYMBOL=462 463 | CURRENT_TIME_SYMBOL=463 464 | CURRENT_USER_SYMBOL=464 465 | CURSOR_SYMBOL=465 466 | CURTIME_SYMBOL=466 467 | DATABASE_SYMBOL=467 468 | DATABASES_SYMBOL=468 469 | DATE_ADD_SYMBOL=469 470 | DATE_SUB_SYMBOL=470 471 | DAY_HOUR_SYMBOL=471 472 | DAY_MICROSECOND_SYMBOL=472 473 | DAY_MINUTE_SYMBOL=473 474 | DAY_SECOND_SYMBOL=474 475 | DECIMAL_NUM_SYMBOL=475 476 | DECIMAL_SYMBOL=476 477 | DECLARE_SYMBOL=477 478 | DEFAULT_SYMBOL=478 479 | DELAYED_SYMBOL=479 480 | DELETE_SYMBOL=480 481 | DESC_SYMBOL=481 482 | DESCRIBE_SYMBOL=482 483 | DETERMINISTIC_SYMBOL=483 484 | DISTINCT_SYMBOL=484 485 | DIV_SYMBOL=485 486 | DOUBLE_SYMBOL=486 487 | DROP_SYMBOL=487 488 | DUAL_SYMBOL=488 489 | EACH_SYMBOL=489 490 | ELSE_SYMBOL=490 491 | ELSEIF_SYMBOL=491 492 | ENCLOSED_SYMBOL=492 493 | END_OF_INPUT_SYMBOL=493 494 | ESCAPED_SYMBOL=494 495 | EXCHANGE_SYMBOL=495 496 | EXISTS_SYMBOL=496 497 | EXIT_SYMBOL=497 498 | EXPIRE_SYMBOL=498 499 | EXPLAIN_SYMBOL=499 500 | EXTRACT_SYMBOL=500 501 | FALSE_SYMBOL=501 502 | FETCH_SYMBOL=502 503 | FLOAT_SYMBOL=503 504 | FORCE_SYMBOL=504 505 | FOREIGN_SYMBOL=505 506 | FOR_SYMBOL=506 507 | FROM_SYMBOL=507 508 | FULLTEXT_SYMBOL=508 509 | GET_SYMBOL=509 510 | GENERATED_SYMBOL=510 511 | GRANT_SYMBOL=511 512 | GROUP_SYMBOL=512 513 | GROUP_CONCAT_SYMBOL=513 514 | HAVING_SYMBOL=514 515 | HIGH_PRIORITY_SYMBOL=515 516 | HOUR_MICROSECOND_SYMBOL=516 517 | HOUR_MINUTE_SYMBOL=517 518 | HOUR_SECOND_SYMBOL=518 519 | IF_SYMBOL=519 520 | IGNORE_SYMBOL=520 521 | INDEX_SYMBOL=521 522 | INFILE_SYMBOL=522 523 | INNER_SYMBOL=523 524 | INOUT_SYMBOL=524 525 | INSENSITIVE_SYMBOL=525 526 | INSERT_SYMBOL=526 527 | INTERVAL_SYMBOL=527 528 | INTO_SYMBOL=528 529 | INT_SYMBOL=529 530 | IN_SYMBOL=530 531 | IO_AFTER_GTIDS_SYMBOL=531 532 | IO_BEFORE_GTIDS_SYMBOL=532 533 | IS_SYMBOL=533 534 | ITERATE_SYMBOL=534 535 | JOIN_SYMBOL=535 536 | KEYS_SYMBOL=536 537 | KEY_SYMBOL=537 538 | KILL_SYMBOL=538 539 | LEADING_SYMBOL=539 540 | LEAVE_SYMBOL=540 541 | LEFT_SYMBOL=541 542 | LIKE_SYMBOL=542 543 | LIMIT_SYMBOL=543 544 | LINEAR_SYMBOL=544 545 | LINES_SYMBOL=545 546 | LOAD_SYMBOL=546 547 | LOCATOR_SYMBOL=547 548 | LOCK_SYMBOL=548 549 | LONGBLOB_SYMBOL=549 550 | LONGTEXT_SYMBOL=550 551 | LONG_NUM_SYMBOL=551 552 | LONG_SYMBOL=552 553 | LOOP_SYMBOL=553 554 | LOW_PRIORITY_SYMBOL=554 555 | MASTER_BIND_SYMBOL=555 556 | MASTER_SSL_VERIFY_SERVER_CERT_SYMBOL=556 557 | MATCH_SYMBOL=557 558 | MAX_SYMBOL=558 559 | MAXVALUE_SYMBOL=559 560 | MEDIUMBLOB_SYMBOL=560 561 | MEDIUMINT_SYMBOL=561 562 | MEDIUMTEXT_SYMBOL=562 563 | MID_SYMBOL=563 564 | MINUTE_MICROSECOND_SYMBOL=564 565 | MINUTE_SECOND_SYMBOL=565 566 | MIN_SYMBOL=566 567 | MODIFIES_SYMBOL=567 568 | MOD_SYMBOL=568 569 | NATURAL_SYMBOL=569 570 | NCHAR_STRING_SYMBOL=570 571 | NEG_SYMBOL=571 572 | NONBLOCKING_SYMBOL=572 573 | NOT_SYMBOL=573 574 | NOW_SYMBOL=574 575 | NO_WRITE_TO_BINLOG_SYMBOL=575 576 | NULL_SYMBOL=576 577 | NUMERIC_SYMBOL=577 578 | OFFLINE_SYMBOL=578 579 | ON_SYMBOL=579 580 | ONLINE_SYMBOL=580 581 | ONLY_SYMBOL=581 582 | OPTIMIZE_SYMBOL=582 583 | OPTIMIZER_COSTS_SYMBOL=583 584 | OPTION_SYMBOL=584 585 | OPTIONALLY_SYMBOL=585 586 | ORDER_SYMBOL=586 587 | OR_SYMBOL=587 588 | OUTER_SYMBOL=588 589 | OUTFILE_SYMBOL=589 590 | OUT_SYMBOL=590 591 | POSITION_SYMBOL=591 592 | PRECISION_SYMBOL=592 593 | PRIMARY_SYMBOL=593 594 | PROCEDURE_SYMBOL=594 595 | PURGE_SYMBOL=595 596 | RANGE_SYMBOL=596 597 | READS_SYMBOL=597 598 | READ_SYMBOL=598 599 | READ_WRITE_SYMBOL=599 600 | REAL_SYMBOL=600 601 | REFERENCES_SYMBOL=601 602 | REGEXP_SYMBOL=602 603 | RELEASE_SYMBOL=603 604 | RENAME_SYMBOL=604 605 | REPEAT_SYMBOL=605 606 | REPLACE_SYMBOL=606 607 | REQUIRE_SYMBOL=607 608 | RESIGNAL_SYMBOL=608 609 | RESTRICT_SYMBOL=609 610 | RETURN_SYMBOL=610 611 | REVOKE_SYMBOL=611 612 | RIGHT_SYMBOL=612 613 | SECOND_MICROSECOND_SYMBOL=613 614 | SELECT_SYMBOL=614 615 | SENSITIVE_SYMBOL=615 616 | SEPARATOR_SYMBOL=616 617 | SERVER_OPTIONS_SYMBOL=617 618 | SESSION_USER_SYMBOL=618 619 | SET_SYMBOL=619 620 | SET_VAR_SYMBOL=620 621 | SHOW_SYMBOL=621 622 | SIGNAL_SYMBOL=622 623 | SMALLINT_SYMBOL=623 624 | SPATIAL_SYMBOL=624 625 | SPECIFIC_SYMBOL=625 626 | SQLEXCEPTION_SYMBOL=626 627 | SQLSTATE_SYMBOL=627 628 | SQLWARNING_SYMBOL=628 629 | SQL_BIG_RESULT_SYMBOL=629 630 | SQL_CALC_FOUND_ROWS_SYMBOL=630 631 | SQL_SMALL_RESULT_SYMBOL=631 632 | SQL_SYMBOL=632 633 | SSL_SYMBOL=633 634 | STARTING_SYMBOL=634 635 | STDDEV_SAMP_SYMBOL=635 636 | STDDEV_SYMBOL=636 637 | STDDEV_POP_SYMBOL=637 638 | STD_SYMBOL=638 639 | STORED_SYMBOL=639 640 | STRAIGHT_JOIN_SYMBOL=640 641 | SUBSTR_SYMBOL=641 642 | SUBSTRING_SYMBOL=642 643 | SUM_SYMBOL=643 644 | SYSDATE_SYMBOL=644 645 | SYSTEM_USER_SYMBOL=645 646 | TABLE_REF_PRIORITY_SYMBOL=646 647 | TABLE_SYMBOL=647 648 | TERMINATED_SYMBOL=648 649 | THEN_SYMBOL=649 650 | TINYBLOB_SYMBOL=650 651 | TINYINT_SYMBOL=651 652 | TINYTEXT_SYMBOL=652 653 | TO_SYMBOL=653 654 | TRAILING_SYMBOL=654 655 | TRIGGER_SYMBOL=655 656 | TRIM_SYMBOL=656 657 | TRUE_SYMBOL=657 658 | UNDO_SYMBOL=658 659 | UNION_SYMBOL=659 660 | UNIQUE_SYMBOL=660 661 | UNLOCK_SYMBOL=661 662 | UNSIGNED_SYMBOL=662 663 | UPDATE_SYMBOL=663 664 | USAGE_SYMBOL=664 665 | USE_SYMBOL=665 666 | USING_SYMBOL=666 667 | UTC_DATE_SYMBOL=667 668 | UTC_TIMESTAMP_SYMBOL=668 669 | UTC_TIME_SYMBOL=669 670 | VALIDATION_SYMBOL=670 671 | VALUES_SYMBOL=671 672 | VARBINARY_SYMBOL=672 673 | VARCHAR_SYMBOL=673 674 | VARIANCE_SYMBOL=674 675 | VARYING_SYMBOL=675 676 | VAR_POP_SYMBOL=676 677 | VAR_SAMP_SYMBOL=677 678 | VIRTUAL_SYMBOL=678 679 | WHEN_SYMBOL=679 680 | WHERE_SYMBOL=680 681 | WHILE_SYMBOL=681 682 | WITH_SYMBOL=682 683 | WITHOUT_SYMBOL=683 684 | WRITE_SYMBOL=684 685 | XOR_SYMBOL=685 686 | YEAR_MONTH_SYMBOL=686 687 | ZEROFILL_SYMBOL=687 688 | PERSIST_SYMBOL=688 689 | ROLE_SYMBOL=689 690 | ADMIN_SYMBOL=690 691 | INVISIBLE_SYMBOL=691 692 | VISIBLE_SYMBOL=692 693 | EXCEPT_SYMBOL=693 694 | COMPONENT_SYMBOL=694 695 | RECURSIVE_SYMBOL=695 696 | JSON_OBJECTAGG_SYMBOL=696 697 | JSON_ARRAYAGG_SYMBOL=697 698 | OF_SYMBOL=698 699 | SKIP_SYMBOL=699 700 | LOCKED_SYMBOL=700 701 | NOWAIT_SYMBOL=701 702 | GROUPING_SYMBOL=702 703 | PERSIST_ONLY_SYMBOL=703 704 | HISTOGRAM_SYMBOL=704 705 | BUCKETS_SYMBOL=705 706 | REMOTE_SYMBOL=706 707 | CLONE_SYMBOL=707 708 | CUME_DIST_SYMBOL=708 709 | DENSE_RANK_SYMBOL=709 710 | EXCLUDE_SYMBOL=710 711 | FIRST_VALUE_SYMBOL=711 712 | FOLLOWING_SYMBOL=712 713 | GROUPS_SYMBOL=713 714 | LAG_SYMBOL=714 715 | LAST_VALUE_SYMBOL=715 716 | LEAD_SYMBOL=716 717 | NTH_VALUE_SYMBOL=717 718 | NTILE_SYMBOL=718 719 | NULLS_SYMBOL=719 720 | OTHERS_SYMBOL=720 721 | OVER_SYMBOL=721 722 | PERCENT_RANK_SYMBOL=722 723 | PRECEDING_SYMBOL=723 724 | RANK_SYMBOL=724 725 | RESPECT_SYMBOL=725 726 | ROW_NUMBER_SYMBOL=726 727 | TIES_SYMBOL=727 728 | UNBOUNDED_SYMBOL=728 729 | WINDOW_SYMBOL=729 730 | EMPTY_SYMBOL=730 731 | JSON_TABLE_SYMBOL=731 732 | NESTED_SYMBOL=732 733 | ORDINALITY_SYMBOL=733 734 | PATH_SYMBOL=734 735 | HISTORY_SYMBOL=735 736 | REUSE_SYMBOL=736 737 | SRID_SYMBOL=737 738 | THREAD_PRIORITY_SYMBOL=738 739 | RESOURCE_SYMBOL=739 740 | SYSTEM_SYMBOL=740 741 | VCPU_SYMBOL=741 742 | MASTER_PUBLIC_KEY_PATH_SYMBOL=742 743 | GET_MASTER_PUBLIC_KEY_SYMBOL=743 744 | RESTART_SYMBOL=744 745 | DEFINITION_SYMBOL=745 746 | DESCRIPTION_SYMBOL=746 747 | ORGANIZATION_SYMBOL=747 748 | REFERENCE_SYMBOL=748 749 | OPTIONAL_SYMBOL=749 750 | SECONDARY_SYMBOL=750 751 | SECONDARY_ENGINE_SYMBOL=751 752 | SECONDARY_LOAD_SYMBOL=752 753 | SECONDARY_UNLOAD_SYMBOL=753 754 | ACTIVE_SYMBOL=754 755 | INACTIVE_SYMBOL=755 756 | LATERAL_SYMBOL=756 757 | RETAIN_SYMBOL=757 758 | OLD_SYMBOL=758 759 | NETWORK_NAMESPACE_SYMBOL=759 760 | ENFORCED_SYMBOL=760 761 | ARRAY_SYMBOL=761 762 | OJ_SYMBOL=762 763 | MEMBER_SYMBOL=763 764 | RANDOM_SYMBOL=764 765 | MASTER_COMPRESSION_ALGORITHM_SYMBOL=765 766 | MASTER_ZSTD_COMPRESSION_LEVEL_SYMBOL=766 767 | PRIVILEGE_CHECKS_USER_SYMBOL=767 768 | MASTER_TLS_CIPHERSUITES_SYMBOL=768 769 | WHITESPACE=769 770 | INVALID_INPUT=770 771 | UNDERSCORE_CHARSET=771 772 | IDENTIFIER=772 773 | NCHAR_TEXT=773 774 | BACK_TICK_QUOTED_ID=774 775 | DOUBLE_QUOTED_TEXT=775 776 | SINGLE_QUOTED_TEXT=776 777 | VERSION_COMMENT_START=777 778 | MYSQL_COMMENT_START=778 779 | VERSION_COMMENT_END=779 780 | BLOCK_COMMENT=780 781 | POUND_COMMENT=781 782 | DASHDASH_COMMENT=782 783 | NOT_EQUAL2_OPERATOR=783 784 | '='=383 785 | ':='=384 786 | '<=>'=385 787 | '>='=386 788 | '>'=387 789 | '<='=388 790 | '<'=389 791 | '!='=390 792 | '<>'=783 793 | '+'=391 794 | '-'=392 795 | '*'=393 796 | '/'=394 797 | '%'=395 798 | '!'=396 799 | '~'=397 800 | '<<'=398 801 | '>>'=399 802 | '&&'=400 803 | '&'=401 804 | '^'=402 805 | '||'=403 806 | '|'=404 807 | '.'=405 808 | ','=406 809 | ';'=407 810 | ':'=408 811 | '('=409 812 | ')'=410 813 | '{'=411 814 | '}'=412 815 | '_'=413 816 | '->'=414 817 | '->>'=415 818 | '@'=416 819 | '@@'=418 820 | '\\N'=419 821 | '?'=420 822 | -------------------------------------------------------------------------------- /src/grammar/common.ts: -------------------------------------------------------------------------------- 1 | // SQL modes that control parsing behavior. 2 | export enum SqlMode { 3 | NoMode = 0, 4 | AnsiQuotes = 1 << 0, 5 | HighNotPrecedence = 1 << 1, 6 | PipesAsConcat = 1 << 2, 7 | IgnoreSpace = 1 << 3, 8 | NoBackslashEscapes = 1 << 4 9 | } 10 | -------------------------------------------------------------------------------- /src/grammar/keywords/index.ts: -------------------------------------------------------------------------------- 1 | import { keywords as keywords56 } from './keyword_list_56' 2 | import { keywords as keywords57 } from './keyword_list_57' 3 | import { keywords as keywords80 } from './keyword_list_80' 4 | 5 | export { keywords56, keywords57, keywords80 } 6 | 7 | export interface Keyword { 8 | isReserved: boolean 9 | word: string 10 | } 11 | -------------------------------------------------------------------------------- /src/grammar/keywords/keyword_list_56.ts: -------------------------------------------------------------------------------- 1 | import { Keyword } from './' 2 | 3 | export const keywords: Keyword[] = [ 4 | { word: 'ACCESSIBLE', isReserved: true }, 5 | { word: 'ACTION', isReserved: false }, 6 | { word: 'ADD', isReserved: true }, 7 | { word: 'AFTER', isReserved: false }, 8 | { word: 'AGAINST', isReserved: false }, 9 | { word: 'AGGREGATE', isReserved: false }, 10 | { word: 'ALGORITHM', isReserved: false }, 11 | { word: 'ALL', isReserved: true }, 12 | { word: 'ALTER', isReserved: true }, 13 | { word: 'ANALYSE', isReserved: false }, 14 | { word: 'ANALYZE', isReserved: true }, 15 | { word: 'AND', isReserved: true }, 16 | { word: 'ANY', isReserved: false }, 17 | { word: 'AS', isReserved: true }, 18 | { word: 'ASC', isReserved: true }, 19 | { word: 'ASCII', isReserved: false }, 20 | { word: 'ASENSITIVE', isReserved: true }, 21 | { word: 'AT', isReserved: false }, 22 | { word: 'AUTHORS', isReserved: false }, 23 | { word: 'AUTOEXTEND_SIZE', isReserved: false }, 24 | { word: 'AUTO_INCREMENT', isReserved: false }, 25 | { word: 'AVG', isReserved: false }, 26 | { word: 'AVG_ROW_LENGTH', isReserved: false }, 27 | { word: 'BACKUP', isReserved: false }, 28 | { word: 'BEFORE', isReserved: true }, 29 | { word: 'BEGIN', isReserved: false }, 30 | { word: 'BETWEEN', isReserved: true }, 31 | { word: 'BIGINT', isReserved: true }, 32 | { word: 'BINARY', isReserved: true }, 33 | { word: 'BINLOG', isReserved: false }, 34 | { word: 'BIT', isReserved: false }, 35 | { word: 'BLOB', isReserved: true }, 36 | { word: 'BLOCK', isReserved: false }, 37 | { word: 'BOOL', isReserved: false }, 38 | { word: 'BOOLEAN', isReserved: false }, 39 | { word: 'BOTH', isReserved: true }, 40 | { word: 'BTREE', isReserved: false }, 41 | { word: 'BY', isReserved: true }, 42 | { word: 'BYTE', isReserved: false }, 43 | { word: 'CACHE', isReserved: false }, 44 | { word: 'CALL', isReserved: true }, 45 | { word: 'CASCADE', isReserved: true }, 46 | { word: 'CASCADED', isReserved: false }, 47 | { word: 'CASE', isReserved: true }, 48 | { word: 'CATALOG_NAME', isReserved: false }, 49 | { word: 'CHAIN', isReserved: false }, 50 | { word: 'CHANGE', isReserved: true }, 51 | { word: 'CHANGED', isReserved: false }, 52 | { word: 'CHAR', isReserved: true }, 53 | { word: 'CHARACTER', isReserved: true }, 54 | { word: 'CHARSET', isReserved: false }, 55 | { word: 'CHECK', isReserved: true }, 56 | { word: 'CHECKSUM', isReserved: false }, 57 | { word: 'CIPHER', isReserved: false }, 58 | { word: 'CLASS_ORIGIN', isReserved: false }, 59 | { word: 'CLIENT', isReserved: false }, 60 | { word: 'CLOSE', isReserved: false }, 61 | { word: 'COALESCE', isReserved: false }, 62 | { word: 'CODE', isReserved: false }, 63 | { word: 'COLLATE', isReserved: true }, 64 | { word: 'COLLATION', isReserved: false }, 65 | { word: 'COLUMN', isReserved: true }, 66 | { word: 'COLUMNS', isReserved: false }, 67 | { word: 'COLUMN_FORMAT', isReserved: false }, 68 | { word: 'COLUMN_NAME', isReserved: false }, 69 | { word: 'COMMENT', isReserved: false }, 70 | { word: 'COMMIT', isReserved: false }, 71 | { word: 'COMMITTED', isReserved: false }, 72 | { word: 'COMPACT', isReserved: false }, 73 | { word: 'COMPLETION', isReserved: false }, 74 | { word: 'COMPRESSED', isReserved: false }, 75 | { word: 'CONCURRENT', isReserved: false }, 76 | { word: 'CONDITION', isReserved: true }, 77 | { word: 'CONNECTION', isReserved: false }, 78 | { word: 'CONSISTENT', isReserved: false }, 79 | { word: 'CONSTRAINT', isReserved: true }, 80 | { word: 'CONSTRAINT_CATALOG', isReserved: false }, 81 | { word: 'CONSTRAINT_NAME', isReserved: false }, 82 | { word: 'CONSTRAINT_SCHEMA', isReserved: false }, 83 | { word: 'CONTAINS', isReserved: false }, 84 | { word: 'CONTEXT', isReserved: false }, 85 | { word: 'CONTINUE', isReserved: true }, 86 | { word: 'CONTRIBUTORS', isReserved: false }, 87 | { word: 'CONVERT', isReserved: true }, 88 | { word: 'CPU', isReserved: false }, 89 | { word: 'CREATE', isReserved: true }, 90 | { word: 'CROSS', isReserved: true }, 91 | { word: 'CUBE', isReserved: false }, 92 | { word: 'CURRENT', isReserved: false }, 93 | { word: 'CURRENT_DATE', isReserved: true }, 94 | { word: 'CURRENT_TIME', isReserved: true }, 95 | { word: 'CURRENT_TIMESTAMP', isReserved: true }, 96 | { word: 'CURRENT_USER', isReserved: true }, 97 | { word: 'CURSOR', isReserved: true }, 98 | { word: 'CURSOR_NAME', isReserved: false }, 99 | { word: 'DATA', isReserved: false }, 100 | { word: 'DATABASE', isReserved: true }, 101 | { word: 'DATABASES', isReserved: true }, 102 | { word: 'DATAFILE', isReserved: false }, 103 | { word: 'DATE', isReserved: false }, 104 | { word: 'DATETIME', isReserved: false }, 105 | { word: 'DAY', isReserved: false }, 106 | { word: 'DAY_HOUR', isReserved: true }, 107 | { word: 'DAY_MICROSECOND', isReserved: true }, 108 | { word: 'DAY_MINUTE', isReserved: true }, 109 | { word: 'DAY_SECOND', isReserved: true }, 110 | { word: 'DEALLOCATE', isReserved: false }, 111 | { word: 'DEC', isReserved: true }, 112 | { word: 'DECIMAL', isReserved: true }, 113 | { word: 'DECLARE', isReserved: true }, 114 | { word: 'DEFAULT', isReserved: true }, 115 | { word: 'DEFAULT_AUTH', isReserved: false }, 116 | { word: 'DEFINER', isReserved: false }, 117 | { word: 'DELAYED', isReserved: true }, 118 | { word: 'DELAY_KEY_WRITE', isReserved: false }, 119 | { word: 'DELETE', isReserved: true }, 120 | { word: 'DESC', isReserved: true }, 121 | { word: 'DESCRIBE', isReserved: true }, 122 | { word: 'DES_KEY_FILE', isReserved: false }, 123 | { word: 'DETERMINISTIC', isReserved: true }, 124 | { word: 'DIAGNOSTICS', isReserved: false }, 125 | { word: 'DIRECTORY', isReserved: false }, 126 | { word: 'DISABLE', isReserved: false }, 127 | { word: 'DISCARD', isReserved: false }, 128 | { word: 'DISK', isReserved: false }, 129 | { word: 'DISTINCT', isReserved: true }, 130 | { word: 'DISTINCTROW', isReserved: true }, 131 | { word: 'DIV', isReserved: true }, 132 | { word: 'DO', isReserved: false }, 133 | { word: 'DOUBLE', isReserved: true }, 134 | { word: 'DROP', isReserved: true }, 135 | { word: 'DUAL', isReserved: true }, 136 | { word: 'DUMPFILE', isReserved: false }, 137 | { word: 'DUPLICATE', isReserved: false }, 138 | { word: 'DYNAMIC', isReserved: false }, 139 | { word: 'EACH', isReserved: true }, 140 | { word: 'ELSE', isReserved: true }, 141 | { word: 'ELSEIF', isReserved: true }, 142 | { word: 'ENABLE', isReserved: false }, 143 | { word: 'ENCLOSED', isReserved: true }, 144 | { word: 'END', isReserved: false }, 145 | { word: 'ENDS', isReserved: false }, 146 | { word: 'ENGINE', isReserved: false }, 147 | { word: 'ENGINES', isReserved: false }, 148 | { word: 'ENUM', isReserved: false }, 149 | { word: 'ERROR', isReserved: false }, 150 | { word: 'ERRORS', isReserved: false }, 151 | { word: 'ESCAPE', isReserved: false }, 152 | { word: 'ESCAPED', isReserved: true }, 153 | { word: 'EVENT', isReserved: false }, 154 | { word: 'EVENTS', isReserved: false }, 155 | { word: 'EVERY', isReserved: false }, 156 | { word: 'EXCHANGE', isReserved: false }, 157 | { word: 'EXECUTE', isReserved: false }, 158 | { word: 'EXISTS', isReserved: true }, 159 | { word: 'EXIT', isReserved: true }, 160 | { word: 'EXPANSION', isReserved: false }, 161 | { word: 'EXPIRE', isReserved: false }, 162 | { word: 'EXPLAIN', isReserved: true }, 163 | { word: 'EXPORT', isReserved: false }, 164 | { word: 'EXTENDED', isReserved: false }, 165 | { word: 'EXTENT_SIZE', isReserved: false }, 166 | { word: 'FALSE', isReserved: true }, 167 | { word: 'FAST', isReserved: false }, 168 | { word: 'FAULTS', isReserved: false }, 169 | { word: 'FETCH', isReserved: true }, 170 | { word: 'FIELDS', isReserved: false }, 171 | { word: 'FILE', isReserved: false }, 172 | { word: 'FIRST', isReserved: false }, 173 | { word: 'FIXED', isReserved: false }, 174 | { word: 'FLOAT', isReserved: true }, 175 | { word: 'FLOAT4', isReserved: true }, 176 | { word: 'FLOAT8', isReserved: true }, 177 | { word: 'FLUSH', isReserved: false }, 178 | { word: 'FOR', isReserved: true }, 179 | { word: 'FORCE', isReserved: true }, 180 | { word: 'FOREIGN', isReserved: true }, 181 | { word: 'FORMAT', isReserved: false }, 182 | { word: 'FOUND', isReserved: false }, 183 | { word: 'FROM', isReserved: true }, 184 | { word: 'FULL', isReserved: false }, 185 | { word: 'FULLTEXT', isReserved: true }, 186 | { word: 'FUNCTION', isReserved: false }, 187 | { word: 'GENERAL', isReserved: false }, 188 | { word: 'GEOMETRY', isReserved: false }, 189 | { word: 'GEOMETRYCOLLECTION', isReserved: false }, 190 | { word: 'GET', isReserved: true }, 191 | { word: 'GET_FORMAT', isReserved: false }, 192 | { word: 'GLOBAL', isReserved: false }, 193 | { word: 'GRANT', isReserved: true }, 194 | { word: 'GRANTS', isReserved: false }, 195 | { word: 'GROUP', isReserved: true }, 196 | { word: 'HANDLER', isReserved: false }, 197 | { word: 'HASH', isReserved: false }, 198 | { word: 'HAVING', isReserved: true }, 199 | { word: 'HELP', isReserved: false }, 200 | { word: 'HIGH_PRIORITY', isReserved: true }, 201 | { word: 'HOST', isReserved: false }, 202 | { word: 'HOSTS', isReserved: false }, 203 | { word: 'HOUR', isReserved: false }, 204 | { word: 'HOUR_MICROSECOND', isReserved: true }, 205 | { word: 'HOUR_MINUTE', isReserved: true }, 206 | { word: 'HOUR_SECOND', isReserved: true }, 207 | { word: 'IDENTIFIED', isReserved: false }, 208 | { word: 'IF', isReserved: true }, 209 | { word: 'IGNORE', isReserved: true }, 210 | { word: 'IGNORE_SERVER_IDS', isReserved: false }, 211 | { word: 'IMPORT', isReserved: false }, 212 | { word: 'IN', isReserved: true }, 213 | { word: 'INDEX', isReserved: true }, 214 | { word: 'INDEXES', isReserved: false }, 215 | { word: 'INFILE', isReserved: true }, 216 | { word: 'INITIAL_SIZE', isReserved: false }, 217 | { word: 'INNER', isReserved: true }, 218 | { word: 'INOUT', isReserved: true }, 219 | { word: 'INSENSITIVE', isReserved: true }, 220 | { word: 'INSERT', isReserved: true }, 221 | { word: 'INSERT_METHOD', isReserved: false }, 222 | { word: 'INSTALL', isReserved: false }, 223 | { word: 'INT', isReserved: true }, 224 | { word: 'INT1', isReserved: true }, 225 | { word: 'INT2', isReserved: true }, 226 | { word: 'INT3', isReserved: true }, 227 | { word: 'INT4', isReserved: true }, 228 | { word: 'INT8', isReserved: true }, 229 | { word: 'INTEGER', isReserved: true }, 230 | { word: 'INTERVAL', isReserved: true }, 231 | { word: 'INTO', isReserved: true }, 232 | { word: 'INVOKER', isReserved: false }, 233 | { word: 'IO', isReserved: false }, 234 | { word: 'IO_AFTER_GTIDS', isReserved: true }, 235 | { word: 'IO_BEFORE_GTIDS', isReserved: true }, 236 | { word: 'IO_THREAD', isReserved: false }, 237 | { word: 'IPC', isReserved: false }, 238 | { word: 'IS', isReserved: true }, 239 | { word: 'ISOLATION', isReserved: false }, 240 | { word: 'ISSUER', isReserved: false }, 241 | { word: 'ITERATE', isReserved: true }, 242 | { word: 'JOIN', isReserved: true }, 243 | { word: 'KEY', isReserved: true }, 244 | { word: 'KEYS', isReserved: true }, 245 | { word: 'KEY_BLOCK_SIZE', isReserved: false }, 246 | { word: 'KILL', isReserved: true }, 247 | { word: 'LANGUAGE', isReserved: false }, 248 | { word: 'LAST', isReserved: false }, 249 | { word: 'LEADING', isReserved: true }, 250 | { word: 'LEAVE', isReserved: true }, 251 | { word: 'LEAVES', isReserved: false }, 252 | { word: 'LEFT', isReserved: true }, 253 | { word: 'LESS', isReserved: false }, 254 | { word: 'LEVEL', isReserved: false }, 255 | { word: 'LIKE', isReserved: true }, 256 | { word: 'LIMIT', isReserved: true }, 257 | { word: 'LINEAR', isReserved: true }, 258 | { word: 'LINES', isReserved: true }, 259 | { word: 'LINESTRING', isReserved: false }, 260 | { word: 'LIST', isReserved: false }, 261 | { word: 'LOAD', isReserved: true }, 262 | { word: 'LOCAL', isReserved: false }, 263 | { word: 'LOCALTIME', isReserved: true }, 264 | { word: 'LOCALTIMESTAMP', isReserved: true }, 265 | { word: 'LOCK', isReserved: true }, 266 | { word: 'LOCKS', isReserved: false }, 267 | { word: 'LOGFILE', isReserved: false }, 268 | { word: 'LOGS', isReserved: false }, 269 | { word: 'LONG', isReserved: true }, 270 | { word: 'LONGBLOB', isReserved: true }, 271 | { word: 'LONGTEXT', isReserved: true }, 272 | { word: 'LOOP', isReserved: true }, 273 | { word: 'LOW_PRIORITY', isReserved: true }, 274 | { word: 'MASTER', isReserved: false }, 275 | { word: 'MASTER_AUTO_POSITION', isReserved: false }, 276 | { word: 'MASTER_BIND', isReserved: true }, 277 | { word: 'MASTER_CONNECT_RETRY', isReserved: false }, 278 | { word: 'MASTER_DELAY', isReserved: false }, 279 | { word: 'MASTER_HEARTBEAT_PERIOD', isReserved: false }, 280 | { word: 'MASTER_HOST', isReserved: false }, 281 | { word: 'MASTER_LOG_FILE', isReserved: false }, 282 | { word: 'MASTER_LOG_POS', isReserved: false }, 283 | { word: 'MASTER_PASSWORD', isReserved: false }, 284 | { word: 'MASTER_PORT', isReserved: false }, 285 | { word: 'MASTER_RETRY_COUNT', isReserved: false }, 286 | { word: 'MASTER_SERVER_ID', isReserved: false }, 287 | { word: 'MASTER_SSL', isReserved: false }, 288 | { word: 'MASTER_SSL_CA', isReserved: false }, 289 | { word: 'MASTER_SSL_CAPATH', isReserved: false }, 290 | { word: 'MASTER_SSL_CERT', isReserved: false }, 291 | { word: 'MASTER_SSL_CIPHER', isReserved: false }, 292 | { word: 'MASTER_SSL_CRL', isReserved: false }, 293 | { word: 'MASTER_SSL_CRLPATH', isReserved: false }, 294 | { word: 'MASTER_SSL_KEY', isReserved: false }, 295 | { word: 'MASTER_SSL_VERIFY_SERVER_CERT', isReserved: true }, 296 | { word: 'MASTER_USER', isReserved: false }, 297 | { word: 'MATCH', isReserved: true }, 298 | { word: 'MAXVALUE', isReserved: true }, 299 | { word: 'MAX_CONNECTIONS_PER_HOUR', isReserved: false }, 300 | { word: 'MAX_QUERIES_PER_HOUR', isReserved: false }, 301 | { word: 'MAX_ROWS', isReserved: false }, 302 | { word: 'MAX_SIZE', isReserved: false }, 303 | { word: 'MAX_UPDATES_PER_HOUR', isReserved: false }, 304 | { word: 'MAX_USER_CONNECTIONS', isReserved: false }, 305 | { word: 'MEDIUM', isReserved: false }, 306 | { word: 'MEDIUMBLOB', isReserved: true }, 307 | { word: 'MEDIUMINT', isReserved: true }, 308 | { word: 'MEDIUMTEXT', isReserved: true }, 309 | { word: 'MEMORY', isReserved: false }, 310 | { word: 'MERGE', isReserved: false }, 311 | { word: 'MESSAGE_TEXT', isReserved: false }, 312 | { word: 'MICROSECOND', isReserved: false }, 313 | { word: 'MIDDLEINT', isReserved: true }, 314 | { word: 'MIGRATE', isReserved: false }, 315 | { word: 'MINUTE', isReserved: false }, 316 | { word: 'MINUTE_MICROSECOND', isReserved: true }, 317 | { word: 'MINUTE_SECOND', isReserved: true }, 318 | { word: 'MIN_ROWS', isReserved: false }, 319 | { word: 'MOD', isReserved: true }, 320 | { word: 'MODE', isReserved: false }, 321 | { word: 'MODIFIES', isReserved: true }, 322 | { word: 'MODIFY', isReserved: false }, 323 | { word: 'MONTH', isReserved: false }, 324 | { word: 'MULTILINESTRING', isReserved: false }, 325 | { word: 'MULTIPOINT', isReserved: false }, 326 | { word: 'MULTIPOLYGON', isReserved: false }, 327 | { word: 'MUTEX', isReserved: false }, 328 | { word: 'MYSQL_ERRNO', isReserved: false }, 329 | { word: 'NAME', isReserved: false }, 330 | { word: 'NAMES', isReserved: false }, 331 | { word: 'NATIONAL', isReserved: false }, 332 | { word: 'NATURAL', isReserved: true }, 333 | { word: 'NCHAR', isReserved: false }, 334 | { word: 'NDB', isReserved: false }, 335 | { word: 'NDBCLUSTER', isReserved: false }, 336 | { word: 'NEW', isReserved: false }, 337 | { word: 'NEXT', isReserved: false }, 338 | { word: 'NO', isReserved: false }, 339 | { word: 'NODEGROUP', isReserved: false }, 340 | { word: 'NONE', isReserved: false }, 341 | { word: 'NOT', isReserved: true }, 342 | { word: 'NO_WAIT', isReserved: false }, 343 | { word: 'NO_WRITE_TO_BINLOG', isReserved: true }, 344 | { word: 'NULL', isReserved: true }, 345 | { word: 'NUMBER', isReserved: false }, 346 | { word: 'NUMERIC', isReserved: true }, 347 | { word: 'NVARCHAR', isReserved: false }, 348 | { word: 'OFFSET', isReserved: false }, 349 | { word: 'OLD_PASSWORD', isReserved: false }, 350 | { word: 'ON', isReserved: true }, 351 | { word: 'ONE', isReserved: false }, 352 | { word: 'ONE_SHOT', isReserved: false }, 353 | { word: 'ONLY', isReserved: false }, 354 | { word: 'OPEN', isReserved: false }, 355 | { word: 'OPTIMIZE', isReserved: true }, 356 | { word: 'OPTION', isReserved: true }, 357 | { word: 'OPTIONALLY', isReserved: true }, 358 | { word: 'OPTIONS', isReserved: false }, 359 | { word: 'OR', isReserved: true }, 360 | { word: 'ORDER', isReserved: true }, 361 | { word: 'OUT', isReserved: true }, 362 | { word: 'OUTER', isReserved: true }, 363 | { word: 'OUTFILE', isReserved: true }, 364 | { word: 'OWNER', isReserved: false }, 365 | { word: 'PACK_KEYS', isReserved: false }, 366 | { word: 'PAGE', isReserved: false }, 367 | { word: 'PARSER', isReserved: false }, 368 | { word: 'PARTIAL', isReserved: false }, 369 | { word: 'PARTITION', isReserved: true }, 370 | { word: 'PARTITIONING', isReserved: false }, 371 | { word: 'PARTITIONS', isReserved: false }, 372 | { word: 'PASSWORD', isReserved: false }, 373 | { word: 'PHASE', isReserved: false }, 374 | { word: 'PLUGIN', isReserved: false }, 375 | { word: 'PLUGINS', isReserved: false }, 376 | { word: 'PLUGIN_DIR', isReserved: false }, 377 | { word: 'POINT', isReserved: false }, 378 | { word: 'POLYGON', isReserved: false }, 379 | { word: 'PORT', isReserved: false }, 380 | { word: 'PRECISION', isReserved: true }, 381 | { word: 'PREPARE', isReserved: false }, 382 | { word: 'PRESERVE', isReserved: false }, 383 | { word: 'PREV', isReserved: false }, 384 | { word: 'PRIMARY', isReserved: true }, 385 | { word: 'PRIVILEGES', isReserved: false }, 386 | { word: 'PROCEDURE', isReserved: true }, 387 | { word: 'PROCESSLIST', isReserved: false }, 388 | { word: 'PROFILE', isReserved: false }, 389 | { word: 'PROFILES', isReserved: false }, 390 | { word: 'PROXY', isReserved: false }, 391 | { word: 'PURGE', isReserved: true }, 392 | { word: 'QUARTER', isReserved: false }, 393 | { word: 'QUERY', isReserved: false }, 394 | { word: 'QUICK', isReserved: false }, 395 | { word: 'RANGE', isReserved: true }, 396 | { word: 'READ', isReserved: true }, 397 | { word: 'READS', isReserved: true }, 398 | { word: 'READ_ONLY', isReserved: false }, 399 | { word: 'READ_WRITE', isReserved: true }, 400 | { word: 'REAL', isReserved: true }, 401 | { word: 'REBUILD', isReserved: false }, 402 | { word: 'RECOVER', isReserved: false }, 403 | { word: 'REDOFILE', isReserved: false }, 404 | { word: 'REDO_BUFFER_SIZE', isReserved: false }, 405 | { word: 'REDUNDANT', isReserved: false }, 406 | { word: 'REFERENCES', isReserved: true }, 407 | { word: 'REGEXP', isReserved: true }, 408 | { word: 'RELAY', isReserved: false }, 409 | { word: 'RELAYLOG', isReserved: false }, 410 | { word: 'RELAY_LOG_FILE', isReserved: false }, 411 | { word: 'RELAY_LOG_POS', isReserved: false }, 412 | { word: 'RELAY_THREAD', isReserved: false }, 413 | { word: 'RELEASE', isReserved: true }, 414 | { word: 'RELOAD', isReserved: false }, 415 | { word: 'REMOVE', isReserved: false }, 416 | { word: 'RENAME', isReserved: true }, 417 | { word: 'REORGANIZE', isReserved: false }, 418 | { word: 'REPAIR', isReserved: false }, 419 | { word: 'REPEAT', isReserved: true }, 420 | { word: 'REPEATABLE', isReserved: false }, 421 | { word: 'REPLACE', isReserved: true }, 422 | { word: 'REPLICATION', isReserved: false }, 423 | { word: 'REQUIRE', isReserved: true }, 424 | { word: 'RESET', isReserved: false }, 425 | { word: 'RESIGNAL', isReserved: true }, 426 | { word: 'RESTORE', isReserved: false }, 427 | { word: 'RESTRICT', isReserved: true }, 428 | { word: 'RESUME', isReserved: false }, 429 | { word: 'RETURN', isReserved: true }, 430 | { word: 'RETURNED_SQLSTATE', isReserved: false }, 431 | { word: 'RETURNS', isReserved: false }, 432 | { word: 'REVERSE', isReserved: false }, 433 | { word: 'REVOKE', isReserved: true }, 434 | { word: 'RIGHT', isReserved: true }, 435 | { word: 'RLIKE', isReserved: true }, 436 | { word: 'ROLLBACK', isReserved: false }, 437 | { word: 'ROLLUP', isReserved: false }, 438 | { word: 'ROUTINE', isReserved: false }, 439 | { word: 'ROW', isReserved: false }, 440 | { word: 'ROWS', isReserved: false }, 441 | { word: 'ROW_COUNT', isReserved: false }, 442 | { word: 'ROW_FORMAT', isReserved: false }, 443 | { word: 'RTREE', isReserved: false }, 444 | { word: 'SAVEPOINT', isReserved: false }, 445 | { word: 'SCHEDULE', isReserved: false }, 446 | { word: 'SCHEMA', isReserved: true }, 447 | { word: 'SCHEMAS', isReserved: true }, 448 | { word: 'SCHEMA_NAME', isReserved: false }, 449 | { word: 'SECOND', isReserved: false }, 450 | { word: 'SECOND_MICROSECOND', isReserved: true }, 451 | { word: 'SECURITY', isReserved: false }, 452 | { word: 'SELECT', isReserved: true }, 453 | { word: 'SENSITIVE', isReserved: true }, 454 | { word: 'SEPARATOR', isReserved: true }, 455 | { word: 'SERIAL', isReserved: false }, 456 | { word: 'SERIALIZABLE', isReserved: false }, 457 | { word: 'SERVER', isReserved: false }, 458 | { word: 'SESSION', isReserved: false }, 459 | { word: 'SET', isReserved: true }, 460 | { word: 'SHARE', isReserved: false }, 461 | { word: 'SHOW', isReserved: true }, 462 | { word: 'SHUTDOWN', isReserved: false }, 463 | { word: 'SIGNAL', isReserved: true }, 464 | { word: 'SIGNED', isReserved: false }, 465 | { word: 'SIMPLE', isReserved: false }, 466 | { word: 'SLAVE', isReserved: false }, 467 | { word: 'SLOW', isReserved: false }, 468 | { word: 'SMALLINT', isReserved: true }, 469 | { word: 'SNAPSHOT', isReserved: false }, 470 | { word: 'SOCKET', isReserved: false }, 471 | { word: 'SOME', isReserved: false }, 472 | { word: 'SONAME', isReserved: false }, 473 | { word: 'SOUNDS', isReserved: false }, 474 | { word: 'SOURCE', isReserved: false }, 475 | { word: 'SPATIAL', isReserved: true }, 476 | { word: 'SPECIFIC', isReserved: true }, 477 | { word: 'SQL', isReserved: true }, 478 | { word: 'SQLEXCEPTION', isReserved: true }, 479 | { word: 'SQLSTATE', isReserved: true }, 480 | { word: 'SQLWARNING', isReserved: true }, 481 | { word: 'SQL_AFTER_GTIDS', isReserved: false }, 482 | { word: 'SQL_AFTER_MTS_GAPS', isReserved: false }, 483 | { word: 'SQL_BEFORE_GTIDS', isReserved: false }, 484 | { word: 'SQL_BIG_RESULT', isReserved: true }, 485 | { word: 'SQL_BUFFER_RESULT', isReserved: false }, 486 | { word: 'SQL_CACHE', isReserved: false }, 487 | { word: 'SQL_CALC_FOUND_ROWS', isReserved: true }, 488 | { word: 'SQL_NO_CACHE', isReserved: false }, 489 | { word: 'SQL_SMALL_RESULT', isReserved: true }, 490 | { word: 'SQL_THREAD', isReserved: false }, 491 | { word: 'SQL_TSI_DAY', isReserved: false }, 492 | { word: 'SQL_TSI_HOUR', isReserved: false }, 493 | { word: 'SQL_TSI_MINUTE', isReserved: false }, 494 | { word: 'SQL_TSI_MONTH', isReserved: false }, 495 | { word: 'SQL_TSI_QUARTER', isReserved: false }, 496 | { word: 'SQL_TSI_SECOND', isReserved: false }, 497 | { word: 'SQL_TSI_WEEK', isReserved: false }, 498 | { word: 'SQL_TSI_YEAR', isReserved: false }, 499 | { word: 'SSL', isReserved: true }, 500 | { word: 'START', isReserved: false }, 501 | { word: 'STARTING', isReserved: true }, 502 | { word: 'STARTS', isReserved: false }, 503 | { word: 'STATS_AUTO_RECALC', isReserved: false }, 504 | { word: 'STATS_PERSISTENT', isReserved: false }, 505 | { word: 'STATS_SAMPLE_PAGES', isReserved: false }, 506 | { word: 'STATUS', isReserved: false }, 507 | { word: 'STOP', isReserved: false }, 508 | { word: 'STORAGE', isReserved: false }, 509 | { word: 'STRAIGHT_JOIN', isReserved: true }, 510 | { word: 'STRING', isReserved: false }, 511 | { word: 'SUBCLASS_ORIGIN', isReserved: false }, 512 | { word: 'SUBJECT', isReserved: false }, 513 | { word: 'SUBPARTITION', isReserved: false }, 514 | { word: 'SUBPARTITIONS', isReserved: false }, 515 | { word: 'SUPER', isReserved: false }, 516 | { word: 'SUSPEND', isReserved: false }, 517 | { word: 'SWAPS', isReserved: false }, 518 | { word: 'SWITCHES', isReserved: false }, 519 | { word: 'TABLE', isReserved: true }, 520 | { word: 'TABLES', isReserved: false }, 521 | { word: 'TABLESPACE', isReserved: false }, 522 | { word: 'TABLE_CHECKSUM', isReserved: false }, 523 | { word: 'TABLE_NAME', isReserved: false }, 524 | { word: 'TEMPORARY', isReserved: false }, 525 | { word: 'TEMPTABLE', isReserved: false }, 526 | { word: 'TERMINATED', isReserved: true }, 527 | { word: 'TEXT', isReserved: false }, 528 | { word: 'THAN', isReserved: false }, 529 | { word: 'THEN', isReserved: true }, 530 | { word: 'TIME', isReserved: false }, 531 | { word: 'TIMESTAMP', isReserved: false }, 532 | { word: 'TIMESTAMPADD', isReserved: false }, 533 | { word: 'TIMESTAMPDIFF', isReserved: false }, 534 | { word: 'TINYBLOB', isReserved: true }, 535 | { word: 'TINYINT', isReserved: true }, 536 | { word: 'TINYTEXT', isReserved: true }, 537 | { word: 'TO', isReserved: true }, 538 | { word: 'TRAILING', isReserved: true }, 539 | { word: 'TRANSACTION', isReserved: false }, 540 | { word: 'TRIGGER', isReserved: true }, 541 | { word: 'TRIGGERS', isReserved: false }, 542 | { word: 'TRUE', isReserved: true }, 543 | { word: 'TRUNCATE', isReserved: false }, 544 | { word: 'TYPE', isReserved: false }, 545 | { word: 'TYPES', isReserved: false }, 546 | { word: 'UNCOMMITTED', isReserved: false }, 547 | { word: 'UNDEFINED', isReserved: false }, 548 | { word: 'UNDO', isReserved: true }, 549 | { word: 'UNDOFILE', isReserved: false }, 550 | { word: 'UNDO_BUFFER_SIZE', isReserved: false }, 551 | { word: 'UNICODE', isReserved: false }, 552 | { word: 'UNINSTALL', isReserved: false }, 553 | { word: 'UNION', isReserved: true }, 554 | { word: 'UNIQUE', isReserved: true }, 555 | { word: 'UNKNOWN', isReserved: false }, 556 | { word: 'UNLOCK', isReserved: true }, 557 | { word: 'UNSIGNED', isReserved: true }, 558 | { word: 'UNTIL', isReserved: false }, 559 | { word: 'UPDATE', isReserved: true }, 560 | { word: 'UPGRADE', isReserved: false }, 561 | { word: 'USAGE', isReserved: true }, 562 | { word: 'USE', isReserved: true }, 563 | { word: 'USER', isReserved: false }, 564 | { word: 'USER_RESOURCES', isReserved: false }, 565 | { word: 'USE_FRM', isReserved: false }, 566 | { word: 'USING', isReserved: true }, 567 | { word: 'UTC_DATE', isReserved: true }, 568 | { word: 'UTC_TIME', isReserved: true }, 569 | { word: 'UTC_TIMESTAMP', isReserved: true }, 570 | { word: 'VALUE', isReserved: false }, 571 | { word: 'VALUES', isReserved: true }, 572 | { word: 'VARBINARY', isReserved: true }, 573 | { word: 'VARCHAR', isReserved: true }, 574 | { word: 'VARCHARACTER', isReserved: true }, 575 | { word: 'VARIABLES', isReserved: false }, 576 | { word: 'VARYING', isReserved: true }, 577 | { word: 'VIEW', isReserved: false }, 578 | { word: 'WAIT', isReserved: false }, 579 | { word: 'WARNINGS', isReserved: false }, 580 | { word: 'WEEK', isReserved: false }, 581 | { word: 'WEIGHT_STRING', isReserved: false }, 582 | { word: 'WHEN', isReserved: true }, 583 | { word: 'WHERE', isReserved: true }, 584 | { word: 'WHILE', isReserved: true }, 585 | { word: 'WITH', isReserved: true }, 586 | { word: 'WORK', isReserved: false }, 587 | { word: 'WRAPPER', isReserved: false }, 588 | { word: 'WRITE', isReserved: true }, 589 | { word: 'X509', isReserved: false }, 590 | { word: 'XA', isReserved: false }, 591 | { word: 'XML', isReserved: false }, 592 | { word: 'XOR', isReserved: true }, 593 | { word: 'YEAR', isReserved: false }, 594 | { word: 'YEAR_MONTH', isReserved: true }, 595 | { word: 'ZEROFILL', isReserved: true } 596 | ] 597 | -------------------------------------------------------------------------------- /src/grammar/keywords/keyword_list_57.ts: -------------------------------------------------------------------------------- 1 | import { Keyword } from './' 2 | 3 | export const keywords: Keyword[] = [ 4 | { word: 'ACCESSIBLE', isReserved: true }, 5 | { word: 'ACCOUNT', isReserved: false }, 6 | { word: 'ACTION', isReserved: false }, 7 | { word: 'ADD', isReserved: true }, 8 | { word: 'AFTER', isReserved: false }, 9 | { word: 'AGAINST', isReserved: false }, 10 | { word: 'AGGREGATE', isReserved: false }, 11 | { word: 'ALGORITHM', isReserved: false }, 12 | { word: 'ALL', isReserved: true }, 13 | { word: 'ALTER', isReserved: true }, 14 | { word: 'ALWAYS', isReserved: false }, 15 | { word: 'ANALYSE', isReserved: false }, 16 | { word: 'ANALYZE', isReserved: true }, 17 | { word: 'AND', isReserved: true }, 18 | { word: 'ANY', isReserved: false }, 19 | { word: 'AS', isReserved: true }, 20 | { word: 'ASC', isReserved: true }, 21 | { word: 'ASCII', isReserved: false }, 22 | { word: 'ASENSITIVE', isReserved: true }, 23 | { word: 'AT', isReserved: false }, 24 | { word: 'AUTOEXTEND_SIZE', isReserved: false }, 25 | { word: 'AUTO_INCREMENT', isReserved: false }, 26 | { word: 'AVG', isReserved: false }, 27 | { word: 'AVG_ROW_LENGTH', isReserved: false }, 28 | { word: 'BACKUP', isReserved: false }, 29 | { word: 'BEFORE', isReserved: true }, 30 | { word: 'BEGIN', isReserved: false }, 31 | { word: 'BETWEEN', isReserved: true }, 32 | { word: 'BIGINT', isReserved: true }, 33 | { word: 'BINARY', isReserved: true }, 34 | { word: 'BINLOG', isReserved: false }, 35 | { word: 'BIT', isReserved: false }, 36 | { word: 'BLOB', isReserved: true }, 37 | { word: 'BLOCK', isReserved: false }, 38 | { word: 'BOOL', isReserved: false }, 39 | { word: 'BOOLEAN', isReserved: false }, 40 | { word: 'BOTH', isReserved: true }, 41 | { word: 'BTREE', isReserved: false }, 42 | { word: 'BY', isReserved: true }, 43 | { word: 'BYTE', isReserved: false }, 44 | { word: 'CACHE', isReserved: false }, 45 | { word: 'CALL', isReserved: true }, 46 | { word: 'CASCADE', isReserved: true }, 47 | { word: 'CASCADED', isReserved: false }, 48 | { word: 'CASE', isReserved: true }, 49 | { word: 'CATALOG_NAME', isReserved: false }, 50 | { word: 'CHAIN', isReserved: false }, 51 | { word: 'CHANGE', isReserved: true }, 52 | { word: 'CHANGED', isReserved: false }, 53 | { word: 'CHANNEL', isReserved: false }, 54 | { word: 'CHAR', isReserved: true }, 55 | { word: 'CHARACTER', isReserved: true }, 56 | { word: 'CHARSET', isReserved: false }, 57 | { word: 'CHECK', isReserved: true }, 58 | { word: 'CHECKSUM', isReserved: false }, 59 | { word: 'CIPHER', isReserved: false }, 60 | { word: 'CLASS_ORIGIN', isReserved: false }, 61 | { word: 'CLIENT', isReserved: false }, 62 | { word: 'CLOSE', isReserved: false }, 63 | { word: 'COALESCE', isReserved: false }, 64 | { word: 'CODE', isReserved: false }, 65 | { word: 'COLLATE', isReserved: true }, 66 | { word: 'COLLATION', isReserved: false }, 67 | { word: 'COLUMN', isReserved: true }, 68 | { word: 'COLUMNS', isReserved: false }, 69 | { word: 'COLUMN_FORMAT', isReserved: false }, 70 | { word: 'COLUMN_NAME', isReserved: false }, 71 | { word: 'COMMENT', isReserved: false }, 72 | { word: 'COMMIT', isReserved: false }, 73 | { word: 'COMMITTED', isReserved: false }, 74 | { word: 'COMPACT', isReserved: false }, 75 | { word: 'COMPLETION', isReserved: false }, 76 | { word: 'COMPRESSED', isReserved: false }, 77 | { word: 'COMPRESSION', isReserved: false }, 78 | { word: 'CONCURRENT', isReserved: false }, 79 | { word: 'CONDITION', isReserved: true }, 80 | { word: 'CONNECTION', isReserved: false }, 81 | { word: 'CONSISTENT', isReserved: false }, 82 | { word: 'CONSTRAINT', isReserved: true }, 83 | { word: 'CONSTRAINT_CATALOG', isReserved: false }, 84 | { word: 'CONSTRAINT_NAME', isReserved: false }, 85 | { word: 'CONSTRAINT_SCHEMA', isReserved: false }, 86 | { word: 'CONTAINS', isReserved: false }, 87 | { word: 'CONTEXT', isReserved: false }, 88 | { word: 'CONTINUE', isReserved: true }, 89 | { word: 'CONVERT', isReserved: true }, 90 | { word: 'CPU', isReserved: false }, 91 | { word: 'CREATE', isReserved: true }, 92 | { word: 'CROSS', isReserved: true }, 93 | { word: 'CUBE', isReserved: false }, 94 | { word: 'CURRENT', isReserved: false }, 95 | { word: 'CURRENT_DATE', isReserved: true }, 96 | { word: 'CURRENT_TIME', isReserved: true }, 97 | { word: 'CURRENT_TIMESTAMP', isReserved: true }, 98 | { word: 'CURRENT_USER', isReserved: true }, 99 | { word: 'CURSOR', isReserved: true }, 100 | { word: 'CURSOR_NAME', isReserved: false }, 101 | { word: 'DATA', isReserved: false }, 102 | { word: 'DATABASE', isReserved: true }, 103 | { word: 'DATABASES', isReserved: true }, 104 | { word: 'DATAFILE', isReserved: false }, 105 | { word: 'DATE', isReserved: false }, 106 | { word: 'DATETIME', isReserved: false }, 107 | { word: 'DAY', isReserved: false }, 108 | { word: 'DAY_HOUR', isReserved: true }, 109 | { word: 'DAY_MICROSECOND', isReserved: true }, 110 | { word: 'DAY_MINUTE', isReserved: true }, 111 | { word: 'DAY_SECOND', isReserved: true }, 112 | { word: 'DEALLOCATE', isReserved: false }, 113 | { word: 'DEC', isReserved: true }, 114 | { word: 'DECIMAL', isReserved: true }, 115 | { word: 'DECLARE', isReserved: true }, 116 | { word: 'DEFAULT', isReserved: true }, 117 | { word: 'DEFAULT_AUTH', isReserved: false }, 118 | { word: 'DEFINER', isReserved: false }, 119 | { word: 'DELAYED', isReserved: true }, 120 | { word: 'DELAY_KEY_WRITE', isReserved: false }, 121 | { word: 'DELETE', isReserved: true }, 122 | { word: 'DESC', isReserved: true }, 123 | { word: 'DESCRIBE', isReserved: true }, 124 | { word: 'DES_KEY_FILE', isReserved: false }, 125 | { word: 'DETERMINISTIC', isReserved: true }, 126 | { word: 'DIAGNOSTICS', isReserved: false }, 127 | { word: 'DIRECTORY', isReserved: false }, 128 | { word: 'DISABLE', isReserved: false }, 129 | { word: 'DISCARD', isReserved: false }, 130 | { word: 'DISK', isReserved: false }, 131 | { word: 'DISTINCT', isReserved: true }, 132 | { word: 'DISTINCTROW', isReserved: true }, 133 | { word: 'DIV', isReserved: true }, 134 | { word: 'DO', isReserved: false }, 135 | { word: 'DOUBLE', isReserved: true }, 136 | { word: 'DROP', isReserved: true }, 137 | { word: 'DUAL', isReserved: true }, 138 | { word: 'DUMPFILE', isReserved: false }, 139 | { word: 'DUPLICATE', isReserved: false }, 140 | { word: 'DYNAMIC', isReserved: false }, 141 | { word: 'EACH', isReserved: true }, 142 | { word: 'ELSE', isReserved: true }, 143 | { word: 'ELSEIF', isReserved: true }, 144 | { word: 'ENABLE', isReserved: false }, 145 | { word: 'ENCLOSED', isReserved: true }, 146 | { word: 'ENCRYPTION', isReserved: false }, 147 | { word: 'END', isReserved: false }, 148 | { word: 'ENDS', isReserved: false }, 149 | { word: 'ENGINE', isReserved: false }, 150 | { word: 'ENGINES', isReserved: false }, 151 | { word: 'ENUM', isReserved: false }, 152 | { word: 'ERROR', isReserved: false }, 153 | { word: 'ERRORS', isReserved: false }, 154 | { word: 'ESCAPE', isReserved: false }, 155 | { word: 'ESCAPED', isReserved: true }, 156 | { word: 'EVENT', isReserved: false }, 157 | { word: 'EVENTS', isReserved: false }, 158 | { word: 'EVERY', isReserved: false }, 159 | { word: 'EXCHANGE', isReserved: false }, 160 | { word: 'EXECUTE', isReserved: false }, 161 | { word: 'EXISTS', isReserved: true }, 162 | { word: 'EXIT', isReserved: true }, 163 | { word: 'EXPANSION', isReserved: false }, 164 | { word: 'EXPIRE', isReserved: false }, 165 | { word: 'EXPLAIN', isReserved: true }, 166 | { word: 'EXPORT', isReserved: false }, 167 | { word: 'EXTENDED', isReserved: false }, 168 | { word: 'EXTENT_SIZE', isReserved: false }, 169 | { word: 'FALSE', isReserved: true }, 170 | { word: 'FAST', isReserved: false }, 171 | { word: 'FAULTS', isReserved: false }, 172 | { word: 'FETCH', isReserved: true }, 173 | { word: 'FIELDS', isReserved: false }, 174 | { word: 'FILE', isReserved: false }, 175 | { word: 'FILE_BLOCK_SIZE', isReserved: false }, 176 | { word: 'FILTER', isReserved: false }, 177 | { word: 'FIRST', isReserved: false }, 178 | { word: 'FIXED', isReserved: false }, 179 | { word: 'FLOAT', isReserved: true }, 180 | { word: 'FLOAT4', isReserved: true }, 181 | { word: 'FLOAT8', isReserved: true }, 182 | { word: 'FLUSH', isReserved: false }, 183 | { word: 'FOLLOWS', isReserved: false }, 184 | { word: 'FOR', isReserved: true }, 185 | { word: 'FORCE', isReserved: true }, 186 | { word: 'FOREIGN', isReserved: true }, 187 | { word: 'FORMAT', isReserved: false }, 188 | { word: 'FOUND', isReserved: false }, 189 | { word: 'FROM', isReserved: true }, 190 | { word: 'FULL', isReserved: false }, 191 | { word: 'FULLTEXT', isReserved: true }, 192 | { word: 'FUNCTION', isReserved: false }, 193 | { word: 'GENERAL', isReserved: false }, 194 | { word: 'GENERATED', isReserved: true }, 195 | { word: 'GEOMETRY', isReserved: false }, 196 | { word: 'GEOMETRYCOLLECTION', isReserved: false }, 197 | { word: 'GET', isReserved: true }, 198 | { word: 'GET_FORMAT', isReserved: false }, 199 | { word: 'GLOBAL', isReserved: false }, 200 | { word: 'GRANT', isReserved: true }, 201 | { word: 'GRANTS', isReserved: false }, 202 | { word: 'GROUP', isReserved: true }, 203 | { word: 'GROUP_REPLICATION', isReserved: false }, 204 | { word: 'HANDLER', isReserved: false }, 205 | { word: 'HASH', isReserved: false }, 206 | { word: 'HAVING', isReserved: true }, 207 | { word: 'HELP', isReserved: false }, 208 | { word: 'HIGH_PRIORITY', isReserved: true }, 209 | { word: 'HOST', isReserved: false }, 210 | { word: 'HOSTS', isReserved: false }, 211 | { word: 'HOUR', isReserved: false }, 212 | { word: 'HOUR_MICROSECOND', isReserved: true }, 213 | { word: 'HOUR_MINUTE', isReserved: true }, 214 | { word: 'HOUR_SECOND', isReserved: true }, 215 | { word: 'IDENTIFIED', isReserved: false }, 216 | { word: 'IF', isReserved: true }, 217 | { word: 'IGNORE', isReserved: true }, 218 | { word: 'IGNORE_SERVER_IDS', isReserved: false }, 219 | { word: 'IMPORT', isReserved: false }, 220 | { word: 'IN', isReserved: true }, 221 | { word: 'INDEX', isReserved: true }, 222 | { word: 'INDEXES', isReserved: false }, 223 | { word: 'INFILE', isReserved: true }, 224 | { word: 'INITIAL_SIZE', isReserved: false }, 225 | { word: 'INNER', isReserved: true }, 226 | { word: 'INOUT', isReserved: true }, 227 | { word: 'INSENSITIVE', isReserved: true }, 228 | { word: 'INSERT', isReserved: true }, 229 | { word: 'INSERT_METHOD', isReserved: false }, 230 | { word: 'INSTALL', isReserved: false }, 231 | { word: 'INSTANCE', isReserved: false }, 232 | { word: 'INT', isReserved: true }, 233 | { word: 'INT1', isReserved: true }, 234 | { word: 'INT2', isReserved: true }, 235 | { word: 'INT3', isReserved: true }, 236 | { word: 'INT4', isReserved: true }, 237 | { word: 'INT8', isReserved: true }, 238 | { word: 'INTEGER', isReserved: true }, 239 | { word: 'INTERVAL', isReserved: true }, 240 | { word: 'INTO', isReserved: true }, 241 | { word: 'INVOKER', isReserved: false }, 242 | { word: 'IO', isReserved: false }, 243 | { word: 'IO_AFTER_GTIDS', isReserved: true }, 244 | { word: 'IO_BEFORE_GTIDS', isReserved: true }, 245 | { word: 'IO_THREAD', isReserved: false }, 246 | { word: 'IPC', isReserved: false }, 247 | { word: 'IS', isReserved: true }, 248 | { word: 'ISOLATION', isReserved: false }, 249 | { word: 'ISSUER', isReserved: false }, 250 | { word: 'ITERATE', isReserved: true }, 251 | { word: 'JOIN', isReserved: true }, 252 | { word: 'JSON', isReserved: false }, 253 | { word: 'KEY', isReserved: true }, 254 | { word: 'KEYS', isReserved: true }, 255 | { word: 'KEY_BLOCK_SIZE', isReserved: false }, 256 | { word: 'KILL', isReserved: true }, 257 | { word: 'LANGUAGE', isReserved: false }, 258 | { word: 'LAST', isReserved: false }, 259 | { word: 'LEADING', isReserved: true }, 260 | { word: 'LEAVE', isReserved: true }, 261 | { word: 'LEAVES', isReserved: false }, 262 | { word: 'LEFT', isReserved: true }, 263 | { word: 'LESS', isReserved: false }, 264 | { word: 'LEVEL', isReserved: false }, 265 | { word: 'LIKE', isReserved: true }, 266 | { word: 'LIMIT', isReserved: true }, 267 | { word: 'LINEAR', isReserved: true }, 268 | { word: 'LINES', isReserved: true }, 269 | { word: 'LINESTRING', isReserved: false }, 270 | { word: 'LIST', isReserved: false }, 271 | { word: 'LOAD', isReserved: true }, 272 | { word: 'LOCAL', isReserved: false }, 273 | { word: 'LOCALTIME', isReserved: true }, 274 | { word: 'LOCALTIMESTAMP', isReserved: true }, 275 | { word: 'LOCK', isReserved: true }, 276 | { word: 'LOCKS', isReserved: false }, 277 | { word: 'LOGFILE', isReserved: false }, 278 | { word: 'LOGS', isReserved: false }, 279 | { word: 'LONG', isReserved: true }, 280 | { word: 'LONGBLOB', isReserved: true }, 281 | { word: 'LONGTEXT', isReserved: true }, 282 | { word: 'LOOP', isReserved: true }, 283 | { word: 'LOW_PRIORITY', isReserved: true }, 284 | { word: 'MASTER', isReserved: false }, 285 | { word: 'MASTER_AUTO_POSITION', isReserved: false }, 286 | { word: 'MASTER_BIND', isReserved: true }, 287 | { word: 'MASTER_CONNECT_RETRY', isReserved: false }, 288 | { word: 'MASTER_DELAY', isReserved: false }, 289 | { word: 'MASTER_HEARTBEAT_PERIOD', isReserved: false }, 290 | { word: 'MASTER_HOST', isReserved: false }, 291 | { word: 'MASTER_LOG_FILE', isReserved: false }, 292 | { word: 'MASTER_LOG_POS', isReserved: false }, 293 | { word: 'MASTER_PASSWORD', isReserved: false }, 294 | { word: 'MASTER_PORT', isReserved: false }, 295 | { word: 'MASTER_RETRY_COUNT', isReserved: false }, 296 | { word: 'MASTER_SERVER_ID', isReserved: false }, 297 | { word: 'MASTER_SSL', isReserved: false }, 298 | { word: 'MASTER_SSL_CA', isReserved: false }, 299 | { word: 'MASTER_SSL_CAPATH', isReserved: false }, 300 | { word: 'MASTER_SSL_CERT', isReserved: false }, 301 | { word: 'MASTER_SSL_CIPHER', isReserved: false }, 302 | { word: 'MASTER_SSL_CRL', isReserved: false }, 303 | { word: 'MASTER_SSL_CRLPATH', isReserved: false }, 304 | { word: 'MASTER_SSL_KEY', isReserved: false }, 305 | { word: 'MASTER_SSL_VERIFY_SERVER_CERT', isReserved: true }, 306 | { word: 'MASTER_TLS_VERSION', isReserved: false }, 307 | { word: 'MASTER_USER', isReserved: false }, 308 | { word: 'MATCH', isReserved: true }, 309 | { word: 'MAXVALUE', isReserved: true }, 310 | { word: 'MAX_CONNECTIONS_PER_HOUR', isReserved: false }, 311 | { word: 'MAX_QUERIES_PER_HOUR', isReserved: false }, 312 | { word: 'MAX_ROWS', isReserved: false }, 313 | { word: 'MAX_SIZE', isReserved: false }, 314 | { word: 'MAX_STATEMENT_TIME', isReserved: false }, 315 | { word: 'MAX_UPDATES_PER_HOUR', isReserved: false }, 316 | { word: 'MAX_USER_CONNECTIONS', isReserved: false }, 317 | { word: 'MEDIUM', isReserved: false }, 318 | { word: 'MEDIUMBLOB', isReserved: true }, 319 | { word: 'MEDIUMINT', isReserved: true }, 320 | { word: 'MEDIUMTEXT', isReserved: true }, 321 | { word: 'MEMORY', isReserved: false }, 322 | { word: 'MERGE', isReserved: false }, 323 | { word: 'MESSAGE_TEXT', isReserved: false }, 324 | { word: 'MICROSECOND', isReserved: false }, 325 | { word: 'MIDDLEINT', isReserved: true }, 326 | { word: 'MIGRATE', isReserved: false }, 327 | { word: 'MINUTE', isReserved: false }, 328 | { word: 'MINUTE_MICROSECOND', isReserved: true }, 329 | { word: 'MINUTE_SECOND', isReserved: true }, 330 | { word: 'MIN_ROWS', isReserved: false }, 331 | { word: 'MOD', isReserved: true }, 332 | { word: 'MODE', isReserved: false }, 333 | { word: 'MODIFIES', isReserved: true }, 334 | { word: 'MODIFY', isReserved: false }, 335 | { word: 'MONTH', isReserved: false }, 336 | { word: 'MULTILINESTRING', isReserved: false }, 337 | { word: 'MULTIPOINT', isReserved: false }, 338 | { word: 'MULTIPOLYGON', isReserved: false }, 339 | { word: 'MUTEX', isReserved: false }, 340 | { word: 'MYSQL_ERRNO', isReserved: false }, 341 | { word: 'NAME', isReserved: false }, 342 | { word: 'NAMES', isReserved: false }, 343 | { word: 'NATIONAL', isReserved: false }, 344 | { word: 'NATURAL', isReserved: true }, 345 | { word: 'NCHAR', isReserved: false }, 346 | { word: 'NDB', isReserved: false }, 347 | { word: 'NDBCLUSTER', isReserved: false }, 348 | { word: 'NEVER', isReserved: false }, 349 | { word: 'NEW', isReserved: false }, 350 | { word: 'NEXT', isReserved: false }, 351 | { word: 'NO', isReserved: false }, 352 | { word: 'NODEGROUP', isReserved: false }, 353 | { word: 'NONBLOCKING', isReserved: false }, 354 | { word: 'NONE', isReserved: false }, 355 | { word: 'NOT', isReserved: true }, 356 | { word: 'NO_WAIT', isReserved: false }, 357 | { word: 'NO_WRITE_TO_BINLOG', isReserved: true }, 358 | { word: 'NULL', isReserved: true }, 359 | { word: 'NUMBER', isReserved: false }, 360 | { word: 'NUMERIC', isReserved: true }, 361 | { word: 'NVARCHAR', isReserved: false }, 362 | { word: 'OFFSET', isReserved: false }, 363 | { word: 'OLD_PASSWORD', isReserved: false }, 364 | { word: 'ON', isReserved: true }, 365 | { word: 'ONE', isReserved: false }, 366 | { word: 'ONLY', isReserved: false }, 367 | { word: 'OPEN', isReserved: false }, 368 | { word: 'OPTIMIZE', isReserved: true }, 369 | { word: 'OPTIMIZER_COSTS', isReserved: true }, 370 | { word: 'OPTION', isReserved: true }, 371 | { word: 'OPTIONALLY', isReserved: true }, 372 | { word: 'OPTIONS', isReserved: false }, 373 | { word: 'OR', isReserved: true }, 374 | { word: 'ORDER', isReserved: true }, 375 | { word: 'OUT', isReserved: true }, 376 | { word: 'OUTER', isReserved: true }, 377 | { word: 'OUTFILE', isReserved: true }, 378 | { word: 'OWNER', isReserved: false }, 379 | { word: 'PACK_KEYS', isReserved: false }, 380 | { word: 'PAGE', isReserved: false }, 381 | { word: 'PARSER', isReserved: false }, 382 | { word: 'PARSE_GCOL_EXPR', isReserved: false }, 383 | { word: 'PARTIAL', isReserved: false }, 384 | { word: 'PARTITION', isReserved: true }, 385 | { word: 'PARTITIONING', isReserved: false }, 386 | { word: 'PARTITIONS', isReserved: false }, 387 | { word: 'PASSWORD', isReserved: false }, 388 | { word: 'PHASE', isReserved: false }, 389 | { word: 'PLUGIN', isReserved: false }, 390 | { word: 'PLUGINS', isReserved: false }, 391 | { word: 'PLUGIN_DIR', isReserved: false }, 392 | { word: 'POINT', isReserved: false }, 393 | { word: 'POLYGON', isReserved: false }, 394 | { word: 'PORT', isReserved: false }, 395 | { word: 'PRECEDES', isReserved: false }, 396 | { word: 'PRECISION', isReserved: true }, 397 | { word: 'PREPARE', isReserved: false }, 398 | { word: 'PRESERVE', isReserved: false }, 399 | { word: 'PREV', isReserved: false }, 400 | { word: 'PRIMARY', isReserved: true }, 401 | { word: 'PRIVILEGES', isReserved: false }, 402 | { word: 'PROCEDURE', isReserved: true }, 403 | { word: 'PROCESSLIST', isReserved: false }, 404 | { word: 'PROFILE', isReserved: false }, 405 | { word: 'PROFILES', isReserved: false }, 406 | { word: 'PROXY', isReserved: false }, 407 | { word: 'PURGE', isReserved: true }, 408 | { word: 'QUARTER', isReserved: false }, 409 | { word: 'QUERY', isReserved: false }, 410 | { word: 'QUICK', isReserved: false }, 411 | { word: 'RANGE', isReserved: true }, 412 | { word: 'READ', isReserved: true }, 413 | { word: 'READS', isReserved: true }, 414 | { word: 'READ_ONLY', isReserved: false }, 415 | { word: 'READ_WRITE', isReserved: true }, 416 | { word: 'REAL', isReserved: true }, 417 | { word: 'REBUILD', isReserved: false }, 418 | { word: 'RECOVER', isReserved: false }, 419 | { word: 'REDOFILE', isReserved: false }, 420 | { word: 'REDO_BUFFER_SIZE', isReserved: false }, 421 | { word: 'REDUNDANT', isReserved: false }, 422 | { word: 'REFERENCES', isReserved: true }, 423 | { word: 'REGEXP', isReserved: true }, 424 | { word: 'RELAY', isReserved: false }, 425 | { word: 'RELAYLOG', isReserved: false }, 426 | { word: 'RELAY_LOG_FILE', isReserved: false }, 427 | { word: 'RELAY_LOG_POS', isReserved: false }, 428 | { word: 'RELAY_THREAD', isReserved: false }, 429 | { word: 'RELEASE', isReserved: true }, 430 | { word: 'RELOAD', isReserved: false }, 431 | { word: 'REMOVE', isReserved: false }, 432 | { word: 'RENAME', isReserved: true }, 433 | { word: 'REORGANIZE', isReserved: false }, 434 | { word: 'REPAIR', isReserved: false }, 435 | { word: 'REPEAT', isReserved: true }, 436 | { word: 'REPEATABLE', isReserved: false }, 437 | { word: 'REPLACE', isReserved: true }, 438 | { word: 'REPLICATE_DO_DB', isReserved: false }, 439 | { word: 'REPLICATE_DO_TABLE', isReserved: false }, 440 | { word: 'REPLICATE_IGNORE_DB', isReserved: false }, 441 | { word: 'REPLICATE_IGNORE_TABLE', isReserved: false }, 442 | { word: 'REPLICATE_REWRITE_DB', isReserved: false }, 443 | { word: 'REPLICATE_WILD_DO_TABLE', isReserved: false }, 444 | { word: 'REPLICATE_WILD_IGNORE_TABLE', isReserved: false }, 445 | { word: 'REPLICATION', isReserved: false }, 446 | { word: 'REQUIRE', isReserved: true }, 447 | { word: 'RESET', isReserved: false }, 448 | { word: 'RESIGNAL', isReserved: true }, 449 | { word: 'RESTORE', isReserved: false }, 450 | { word: 'RESTRICT', isReserved: true }, 451 | { word: 'RESUME', isReserved: false }, 452 | { word: 'RETURN', isReserved: true }, 453 | { word: 'RETURNED_SQLSTATE', isReserved: false }, 454 | { word: 'RETURNS', isReserved: false }, 455 | { word: 'REVERSE', isReserved: false }, 456 | { word: 'REVOKE', isReserved: true }, 457 | { word: 'RIGHT', isReserved: true }, 458 | { word: 'RLIKE', isReserved: true }, 459 | { word: 'ROLLBACK', isReserved: false }, 460 | { word: 'ROLLUP', isReserved: false }, 461 | { word: 'ROTATE', isReserved: false }, 462 | { word: 'ROUTINE', isReserved: false }, 463 | { word: 'ROW', isReserved: false }, 464 | { word: 'ROWS', isReserved: false }, 465 | { word: 'ROW_COUNT', isReserved: false }, 466 | { word: 'ROW_FORMAT', isReserved: false }, 467 | { word: 'RTREE', isReserved: false }, 468 | { word: 'SAVEPOINT', isReserved: false }, 469 | { word: 'SCHEDULE', isReserved: false }, 470 | { word: 'SCHEMA', isReserved: true }, 471 | { word: 'SCHEMAS', isReserved: true }, 472 | { word: 'SCHEMA_NAME', isReserved: false }, 473 | { word: 'SECOND', isReserved: false }, 474 | { word: 'SECOND_MICROSECOND', isReserved: true }, 475 | { word: 'SECURITY', isReserved: false }, 476 | { word: 'SELECT', isReserved: true }, 477 | { word: 'SENSITIVE', isReserved: true }, 478 | { word: 'SEPARATOR', isReserved: true }, 479 | { word: 'SERIAL', isReserved: false }, 480 | { word: 'SERIALIZABLE', isReserved: false }, 481 | { word: 'SERVER', isReserved: false }, 482 | { word: 'SESSION', isReserved: false }, 483 | { word: 'SET', isReserved: true }, 484 | { word: 'SHARE', isReserved: false }, 485 | { word: 'SHOW', isReserved: true }, 486 | { word: 'SHUTDOWN', isReserved: false }, 487 | { word: 'SIGNAL', isReserved: true }, 488 | { word: 'SIGNED', isReserved: false }, 489 | { word: 'SIMPLE', isReserved: false }, 490 | { word: 'SLAVE', isReserved: false }, 491 | { word: 'SLOW', isReserved: false }, 492 | { word: 'SMALLINT', isReserved: true }, 493 | { word: 'SNAPSHOT', isReserved: false }, 494 | { word: 'SOCKET', isReserved: false }, 495 | { word: 'SOME', isReserved: false }, 496 | { word: 'SONAME', isReserved: false }, 497 | { word: 'SOUNDS', isReserved: false }, 498 | { word: 'SOURCE', isReserved: false }, 499 | { word: 'SPATIAL', isReserved: true }, 500 | { word: 'SPECIFIC', isReserved: true }, 501 | { word: 'SQL', isReserved: true }, 502 | { word: 'SQLEXCEPTION', isReserved: true }, 503 | { word: 'SQLSTATE', isReserved: true }, 504 | { word: 'SQLWARNING', isReserved: true }, 505 | { word: 'SQL_AFTER_GTIDS', isReserved: false }, 506 | { word: 'SQL_AFTER_MTS_GAPS', isReserved: false }, 507 | { word: 'SQL_BEFORE_GTIDS', isReserved: false }, 508 | { word: 'SQL_BIG_RESULT', isReserved: true }, 509 | { word: 'SQL_BUFFER_RESULT', isReserved: false }, 510 | { word: 'SQL_CACHE', isReserved: false }, 511 | { word: 'SQL_CALC_FOUND_ROWS', isReserved: true }, 512 | { word: 'SQL_NO_CACHE', isReserved: false }, 513 | { word: 'SQL_SMALL_RESULT', isReserved: true }, 514 | { word: 'SQL_THREAD', isReserved: false }, 515 | { word: 'SQL_TSI_DAY', isReserved: false }, 516 | { word: 'SQL_TSI_HOUR', isReserved: false }, 517 | { word: 'SQL_TSI_MINUTE', isReserved: false }, 518 | { word: 'SQL_TSI_MONTH', isReserved: false }, 519 | { word: 'SQL_TSI_QUARTER', isReserved: false }, 520 | { word: 'SQL_TSI_SECOND', isReserved: false }, 521 | { word: 'SQL_TSI_WEEK', isReserved: false }, 522 | { word: 'SQL_TSI_YEAR', isReserved: false }, 523 | { word: 'SSL', isReserved: true }, 524 | { word: 'STACKED', isReserved: false }, 525 | { word: 'START', isReserved: false }, 526 | { word: 'STARTING', isReserved: true }, 527 | { word: 'STARTS', isReserved: false }, 528 | { word: 'STATS_AUTO_RECALC', isReserved: false }, 529 | { word: 'STATS_PERSISTENT', isReserved: false }, 530 | { word: 'STATS_SAMPLE_PAGES', isReserved: false }, 531 | { word: 'STATUS', isReserved: false }, 532 | { word: 'STOP', isReserved: false }, 533 | { word: 'STORAGE', isReserved: false }, 534 | { word: 'STORED', isReserved: true }, 535 | { word: 'STRAIGHT_JOIN', isReserved: true }, 536 | { word: 'STRING', isReserved: false }, 537 | { word: 'SUBCLASS_ORIGIN', isReserved: false }, 538 | { word: 'SUBJECT', isReserved: false }, 539 | { word: 'SUBPARTITION', isReserved: false }, 540 | { word: 'SUBPARTITIONS', isReserved: false }, 541 | { word: 'SUPER', isReserved: false }, 542 | { word: 'SUSPEND', isReserved: false }, 543 | { word: 'SWAPS', isReserved: false }, 544 | { word: 'SWITCHES', isReserved: false }, 545 | { word: 'TABLE', isReserved: true }, 546 | { word: 'TABLES', isReserved: false }, 547 | { word: 'TABLESPACE', isReserved: false }, 548 | { word: 'TABLE_CHECKSUM', isReserved: false }, 549 | { word: 'TABLE_NAME', isReserved: false }, 550 | { word: 'TEMPORARY', isReserved: false }, 551 | { word: 'TEMPTABLE', isReserved: false }, 552 | { word: 'TERMINATED', isReserved: true }, 553 | { word: 'TEXT', isReserved: false }, 554 | { word: 'THAN', isReserved: false }, 555 | { word: 'THEN', isReserved: true }, 556 | { word: 'TIME', isReserved: false }, 557 | { word: 'TIMESTAMP', isReserved: false }, 558 | { word: 'TIMESTAMPADD', isReserved: false }, 559 | { word: 'TIMESTAMPDIFF', isReserved: false }, 560 | { word: 'TINYBLOB', isReserved: true }, 561 | { word: 'TINYINT', isReserved: true }, 562 | { word: 'TINYTEXT', isReserved: true }, 563 | { word: 'TO', isReserved: true }, 564 | { word: 'TRAILING', isReserved: true }, 565 | { word: 'TRANSACTION', isReserved: false }, 566 | { word: 'TRIGGER', isReserved: true }, 567 | { word: 'TRIGGERS', isReserved: false }, 568 | { word: 'TRUE', isReserved: true }, 569 | { word: 'TRUNCATE', isReserved: false }, 570 | { word: 'TYPE', isReserved: false }, 571 | { word: 'TYPES', isReserved: false }, 572 | { word: 'UNCOMMITTED', isReserved: false }, 573 | { word: 'UNDEFINED', isReserved: false }, 574 | { word: 'UNDO', isReserved: true }, 575 | { word: 'UNDOFILE', isReserved: false }, 576 | { word: 'UNDO_BUFFER_SIZE', isReserved: false }, 577 | { word: 'UNICODE', isReserved: false }, 578 | { word: 'UNINSTALL', isReserved: false }, 579 | { word: 'UNION', isReserved: true }, 580 | { word: 'UNIQUE', isReserved: true }, 581 | { word: 'UNKNOWN', isReserved: false }, 582 | { word: 'UNLOCK', isReserved: true }, 583 | { word: 'UNSIGNED', isReserved: true }, 584 | { word: 'UNTIL', isReserved: false }, 585 | { word: 'UPDATE', isReserved: true }, 586 | { word: 'UPGRADE', isReserved: false }, 587 | { word: 'USAGE', isReserved: true }, 588 | { word: 'USE', isReserved: true }, 589 | { word: 'USER', isReserved: false }, 590 | { word: 'USER_RESOURCES', isReserved: false }, 591 | { word: 'USE_FRM', isReserved: false }, 592 | { word: 'USING', isReserved: true }, 593 | { word: 'UTC_DATE', isReserved: true }, 594 | { word: 'UTC_TIME', isReserved: true }, 595 | { word: 'UTC_TIMESTAMP', isReserved: true }, 596 | { word: 'VALIDATION', isReserved: false }, 597 | { word: 'VALUE', isReserved: false }, 598 | { word: 'VALUES', isReserved: true }, 599 | { word: 'VARBINARY', isReserved: true }, 600 | { word: 'VARCHAR', isReserved: true }, 601 | { word: 'VARCHARACTER', isReserved: true }, 602 | { word: 'VARIABLES', isReserved: false }, 603 | { word: 'VARYING', isReserved: true }, 604 | { word: 'VIEW', isReserved: false }, 605 | { word: 'VIRTUAL', isReserved: true }, 606 | { word: 'WAIT', isReserved: false }, 607 | { word: 'WARNINGS', isReserved: false }, 608 | { word: 'WEEK', isReserved: false }, 609 | { word: 'WEIGHT_STRING', isReserved: false }, 610 | { word: 'WHEN', isReserved: true }, 611 | { word: 'WHERE', isReserved: true }, 612 | { word: 'WHILE', isReserved: true }, 613 | { word: 'WITH', isReserved: true }, 614 | { word: 'WITHOUT', isReserved: false }, 615 | { word: 'WORK', isReserved: false }, 616 | { word: 'WRAPPER', isReserved: false }, 617 | { word: 'WRITE', isReserved: true }, 618 | { word: 'X509', isReserved: false }, 619 | { word: 'XA', isReserved: false }, 620 | { word: 'XID', isReserved: false }, 621 | { word: 'XML', isReserved: false }, 622 | { word: 'XOR', isReserved: true }, 623 | { word: 'YEAR', isReserved: false }, 624 | { word: 'YEAR_MONTH', isReserved: true }, 625 | { word: 'ZEROFILL', isReserved: true } 626 | ] 627 | -------------------------------------------------------------------------------- /src/grammar/predefined.tokens: -------------------------------------------------------------------------------- 1 | ACCOUNT_SYMBOL= 1 2 | ASCII_SYMBOL= 2 3 | ALWAYS_SYMBOL= 3 4 | BACKUP_SYMBOL= 4 5 | BEGIN_SYMBOL= 5 6 | BYTE_SYMBOL= 6 7 | CACHE_SYMBOL= 7 8 | CHARSET_SYMBOL= 8 9 | CHECKSUM_SYMBOL= 9 10 | CLOSE_SYMBOL= 10 11 | COMMENT_SYMBOL= 11 12 | COMMIT_SYMBOL= 12 13 | CONTAINS_SYMBOL= 13 14 | DEALLOCATE_SYMBOL= 14 15 | DO_SYMBOL= 15 16 | END_SYMBOL= 16 17 | EXECUTE_SYMBOL= 17 18 | FLUSH_SYMBOL= 18 19 | FOLLOWS_SYMBOL= 19 20 | FORMAT_SYMBOL= 20 21 | GROUP_REPLICATION_SYMBOL= 21 22 | HANDLER_SYMBOL= 22 23 | HELP_SYMBOL= 23 24 | HOST_SYMBOL= 24 25 | INSTALL_SYMBOL= 25 26 | LANGUAGE_SYMBOL= 26 27 | NO_SYMBOL= 27 28 | OPEN_SYMBOL= 28 29 | OPTIONS_SYMBOL= 29 30 | OWNER_SYMBOL= 30 31 | PARSER_SYMBOL= 31 32 | PARTITION_SYMBOL= 32 33 | PORT_SYMBOL= 33 34 | PRECEDES_SYMBOL= 34 35 | PREPARE_SYMBOL= 35 36 | REMOVE_SYMBOL= 36 37 | REPAIR_SYMBOL= 37 38 | RESET_SYMBOL= 38 39 | RESTORE_SYMBOL= 39 40 | ROLLBACK_SYMBOL= 40 41 | SAVEPOINT_SYMBOL= 41 42 | SECURITY_SYMBOL= 42 43 | SERVER_SYMBOL= 43 44 | SIGNED_SYMBOL= 44 45 | SLAVE_SYMBOL= 45 46 | SOCKET_SYMBOL= 46 47 | SONAME_SYMBOL= 47 48 | START_SYMBOL= 48 49 | STOP_SYMBOL= 49 50 | TRUNCATE_SYMBOL= 50 51 | UNICODE_SYMBOL= 51 52 | UNINSTALL_SYMBOL= 52 53 | UPGRADE_SYMBOL= 53 54 | WRAPPER_SYMBOL= 54 55 | XA_SYMBOL= 55 56 | SHUTDOWN_SYMBOL= 56 57 | ACTION_SYMBOL= 57 58 | ADDDATE_SYMBOL= 58 59 | AFTER_SYMBOL= 59 60 | AGAINST_SYMBOL= 60 61 | AGGREGATE_SYMBOL= 61 62 | ALGORITHM_SYMBOL= 62 63 | ANALYZE_SYMBOL= 63 64 | ANY_SYMBOL= 64 65 | AT_SYMBOL= 65 66 | AUTHORS_SYMBOL= 66 67 | AUTO_INCREMENT_SYMBOL= 67 68 | AUTOEXTEND_SIZE_SYMBOL= 68 69 | AVG_ROW_LENGTH_SYMBOL= 69 70 | AVG_SYMBOL= 70 71 | BINLOG_SYMBOL= 71 72 | BIT_SYMBOL= 72 73 | BLOCK_SYMBOL= 73 74 | BOOL_SYMBOL= 74 75 | BOOLEAN_SYMBOL= 75 76 | BTREE_SYMBOL= 76 77 | CASCADED_SYMBOL= 77 78 | CATALOG_NAME_SYMBOL= 78 79 | CHAIN_SYMBOL= 79 80 | CHANGED_SYMBOL= 80 81 | CHANNEL_SYMBOL= 81 82 | CIPHER_SYMBOL= 82 83 | CLIENT_SYMBOL= 83 84 | CLASS_ORIGIN_SYMBOL= 84 85 | COALESCE_SYMBOL= 85 86 | CODE_SYMBOL= 86 87 | COLLATION_SYMBOL= 87 88 | COLUMN_NAME_SYMBOL= 88 89 | COLUMN_FORMAT_SYMBOL= 89 90 | COLUMNS_SYMBOL= 90 91 | COMMITTED_SYMBOL= 91 92 | COMPACT_SYMBOL= 92 93 | COMPLETION_SYMBOL= 93 94 | COMPRESSED_SYMBOL= 94 95 | COMPRESSION_SYMBOL= 95 96 | ENCRYPTION_SYMBOL= 96 97 | CONCURRENT_SYMBOL= 97 98 | CONNECTION_SYMBOL= 98 99 | CONSISTENT_SYMBOL= 99 100 | CONSTRAINT_CATALOG_SYMBOL= 100 101 | CONSTRAINT_SCHEMA_SYMBOL= 101 102 | CONSTRAINT_NAME_SYMBOL= 102 103 | CONTEXT_SYMBOL= 103 104 | CONTRIBUTORS_SYMBOL= 104 105 | CPU_SYMBOL= 105 106 | CUBE_SYMBOL= 106 107 | CURRENT_SYMBOL= 107 108 | CURSOR_NAME_SYMBOL= 108 109 | DATA_SYMBOL= 109 110 | DATAFILE_SYMBOL= 110 111 | DATETIME_SYMBOL= 111 112 | DATE_SYMBOL= 112 113 | DAY_SYMBOL= 113 114 | DEFAULT_AUTH_SYMBOL= 114 115 | DEFINER_SYMBOL= 115 116 | DELAY_KEY_WRITE_SYMBOL= 116 117 | DES_KEY_FILE_SYMBOL= 117 118 | DIAGNOSTICS_SYMBOL= 118 119 | DIRECTORY_SYMBOL= 119 120 | DISABLE_SYMBOL= 120 121 | DISCARD_SYMBOL= 121 122 | DISK_SYMBOL= 122 123 | DUMPFILE_SYMBOL= 123 124 | DUPLICATE_SYMBOL= 124 125 | DYNAMIC_SYMBOL= 125 126 | ENDS_SYMBOL= 126 127 | ENUM_SYMBOL= 127 128 | ENGINE_SYMBOL= 128 129 | ENGINES_SYMBOL= 129 130 | ERROR_SYMBOL= 130 131 | ERRORS_SYMBOL= 131 132 | ESCAPE_SYMBOL= 132 133 | EVENT_SYMBOL= 133 134 | EVENTS_SYMBOL= 134 135 | EVERY_SYMBOL= 135 136 | EXPANSION_SYMBOL= 136 137 | EXPORT_SYMBOL= 137 138 | EXTENDED_SYMBOL= 138 139 | EXTENT_SIZE_SYMBOL= 139 140 | FAULTS_SYMBOL= 140 141 | FAST_SYMBOL= 141 142 | FOUND_SYMBOL= 142 143 | ENABLE_SYMBOL= 143 144 | FULL_SYMBOL= 144 145 | FILE_SYMBOL= 145 146 | FILE_BLOCK_SIZE_SYMBOL= 146 147 | FILTER_SYMBOL= 147 148 | FIRST_SYMBOL= 148 149 | FIXED_SYMBOL= 149 150 | GENERAL_SYMBOL= 150 151 | GEOMETRY_SYMBOL= 151 152 | GEOMETRYCOLLECTION_SYMBOL= 152 153 | GET_FORMAT_SYMBOL= 153 154 | GRANTS_SYMBOL= 154 155 | GLOBAL_SYMBOL= 155 156 | HASH_SYMBOL= 156 157 | HOSTS_SYMBOL= 157 158 | HOUR_SYMBOL= 158 159 | IDENTIFIED_SYMBOL= 159 160 | IGNORE_SERVER_IDS_SYMBOL= 160 161 | INVOKER_SYMBOL= 161 162 | IMPORT_SYMBOL= 162 163 | INDEXES_SYMBOL= 163 164 | INITIAL_SIZE_SYMBOL= 164 165 | INSTANCE_SYMBOL= 165 166 | INNODB_SYMBOL= 166 167 | IO_SYMBOL= 167 168 | IPC_SYMBOL= 168 169 | ISOLATION_SYMBOL= 169 170 | ISSUER_SYMBOL= 170 171 | INSERT_METHOD_SYMBOL= 171 172 | JSON_SYMBOL= 172 173 | KEY_BLOCK_SIZE_SYMBOL= 173 174 | LAST_SYMBOL= 174 175 | LEAVES_SYMBOL= 175 176 | LESS_SYMBOL= 176 177 | LEVEL_SYMBOL= 177 178 | LINESTRING_SYMBOL= 178 179 | LIST_SYMBOL= 179 180 | LOCAL_SYMBOL= 180 181 | LOCKS_SYMBOL= 181 182 | LOGFILE_SYMBOL= 182 183 | LOGS_SYMBOL= 183 184 | MAX_ROWS_SYMBOL= 184 185 | MASTER_SYMBOL= 185 186 | MASTER_HEARTBEAT_PERIOD_SYMBOL= 186 187 | MASTER_HOST_SYMBOL= 187 188 | MASTER_PORT_SYMBOL= 188 189 | MASTER_LOG_FILE_SYMBOL= 189 190 | MASTER_LOG_POS_SYMBOL= 190 191 | MASTER_USER_SYMBOL= 191 192 | MASTER_PASSWORD_SYMBOL= 192 193 | MASTER_SERVER_ID_SYMBOL= 193 194 | MASTER_CONNECT_RETRY_SYMBOL= 194 195 | MASTER_RETRY_COUNT_SYMBOL= 195 196 | MASTER_DELAY_SYMBOL= 196 197 | MASTER_SSL_SYMBOL= 197 198 | MASTER_SSL_CA_SYMBOL= 198 199 | MASTER_SSL_CAPATH_SYMBOL= 199 200 | MASTER_TLS_VERSION_SYMBOL= 200 201 | MASTER_SSL_CERT_SYMBOL= 201 202 | MASTER_SSL_CIPHER_SYMBOL= 202 203 | MASTER_SSL_CRL_SYMBOL= 203 204 | MASTER_SSL_CRLPATH_SYMBOL= 204 205 | MASTER_SSL_KEY_SYMBOL= 205 206 | MASTER_AUTO_POSITION_SYMBOL= 206 207 | MAX_CONNECTIONS_PER_HOUR_SYMBOL= 207 208 | MAX_QUERIES_PER_HOUR_SYMBOL= 208 209 | MAX_STATEMENT_TIME_SYMBOL= 209 210 | MAX_SIZE_SYMBOL= 210 211 | MAX_UPDATES_PER_HOUR_SYMBOL= 211 212 | MAX_USER_CONNECTIONS_SYMBOL= 212 213 | MEDIUM_SYMBOL= 213 214 | MEMORY_SYMBOL= 214 215 | MERGE_SYMBOL= 215 216 | MESSAGE_TEXT_SYMBOL= 216 217 | MICROSECOND_SYMBOL= 217 218 | MIGRATE_SYMBOL= 218 219 | MINUTE_SYMBOL= 219 220 | MIN_ROWS_SYMBOL= 220 221 | MODIFY_SYMBOL= 221 222 | MODE_SYMBOL= 222 223 | MONTH_SYMBOL= 223 224 | MULTILINESTRING_SYMBOL= 224 225 | MULTIPOINT_SYMBOL= 225 226 | MULTIPOLYGON_SYMBOL= 226 227 | MUTEX_SYMBOL= 227 228 | MYSQL_ERRNO_SYMBOL= 228 229 | NAME_SYMBOL= 229 230 | NAMES_SYMBOL= 230 231 | NATIONAL_SYMBOL= 231 232 | NCHAR_SYMBOL= 232 233 | NDBCLUSTER_SYMBOL= 233 234 | NEVER_SYMBOL= 234 235 | NEXT_SYMBOL= 235 236 | NEW_SYMBOL= 236 237 | NO_WAIT_SYMBOL= 237 238 | NODEGROUP_SYMBOL= 238 239 | NONE_SYMBOL= 239 240 | NUMBER_SYMBOL= 240 241 | NVARCHAR_SYMBOL= 241 242 | OFFSET_SYMBOL= 242 243 | OLD_PASSWORD_SYMBOL= 243 244 | ONE_SHOT_SYMBOL= 244 245 | ONE_SYMBOL= 245 246 | PACK_KEYS_SYMBOL= 246 247 | PAGE_SYMBOL= 247 248 | PARTIAL_SYMBOL= 248 249 | PARTITIONING_SYMBOL= 249 250 | PARTITIONS_SYMBOL= 250 251 | PASSWORD_SYMBOL= 251 252 | PHASE_SYMBOL= 252 253 | PLUGIN_DIR_SYMBOL= 253 254 | PLUGIN_SYMBOL= 254 255 | PLUGINS_SYMBOL= 255 256 | POINT_SYMBOL= 256 257 | POLYGON_SYMBOL= 257 258 | PRESERVE_SYMBOL= 258 259 | PREV_SYMBOL= 259 260 | PRIVILEGES_SYMBOL= 260 261 | PROCESS_SYMBOL= 261 262 | PROCESSLIST_SYMBOL= 262 263 | PROFILE_SYMBOL= 263 264 | PROFILES_SYMBOL= 264 265 | PROXY_SYMBOL= 265 266 | QUARTER_SYMBOL= 266 267 | QUERY_SYMBOL= 267 268 | QUICK_SYMBOL= 268 269 | READ_ONLY_SYMBOL= 269 270 | REBUILD_SYMBOL= 270 271 | RECOVER_SYMBOL= 271 272 | REDO_BUFFER_SIZE_SYMBOL= 272 273 | REDOFILE_SYMBOL= 273 274 | REDUNDANT_SYMBOL= 274 275 | RELAY_SYMBOL= 275 276 | RELAYLOG_SYMBOL= 276 277 | RELAY_LOG_FILE_SYMBOL= 277 278 | RELAY_LOG_POS_SYMBOL= 278 279 | RELAY_THREAD_SYMBOL= 279 280 | RELOAD_SYMBOL= 280 281 | REORGANIZE_SYMBOL= 281 282 | REPEATABLE_SYMBOL= 282 283 | REPLICATION_SYMBOL= 283 284 | REPLICATE_DO_DB_SYMBOL= 284 285 | REPLICATE_IGNORE_DB_SYMBOL= 285 286 | REPLICATE_DO_TABLE_SYMBOL= 286 287 | REPLICATE_IGNORE_TABLE_SYMBOL= 287 288 | REPLICATE_WILD_DO_TABLE_SYMBOL= 288 289 | REPLICATE_WILD_IGNORE_TABLE_SYMBOL= 289 290 | REPLICATE_REWRITE_DB_SYMBOL= 290 291 | RESUME_SYMBOL= 291 292 | RETURNED_SQLSTATE_SYMBOL= 292 293 | RETURNS_SYMBOL= 293 294 | REVERSE_SYMBOL= 294 295 | ROLLUP_SYMBOL= 295 296 | ROTATE_SYMBOL= 296 297 | ROUTINE_SYMBOL= 297 298 | ROWS_SYMBOL= 298 299 | ROW_COUNT_SYMBOL= 299 300 | ROW_FORMAT_SYMBOL= 300 301 | ROW_SYMBOL= 301 302 | RTREE_SYMBOL= 302 303 | SCHEDULE_SYMBOL= 303 304 | SCHEMA_NAME_SYMBOL= 304 305 | SECOND_SYMBOL= 305 306 | SERIAL_SYMBOL= 306 307 | SERIALIZABLE_SYMBOL= 307 308 | SESSION_SYMBOL= 308 309 | SIMPLE_SYMBOL= 309 310 | SHARE_SYMBOL= 310 311 | SLOW_SYMBOL= 311 312 | SNAPSHOT_SYMBOL= 312 313 | SOUNDS_SYMBOL= 313 314 | SOURCE_SYMBOL= 314 315 | SQL_AFTER_GTIDS_SYMBOL= 315 316 | SQL_AFTER_MTS_GAPS_SYMBOL= 316 317 | SQL_BEFORE_GTIDS_SYMBOL= 317 318 | SQL_CACHE_SYMBOL= 318 319 | SQL_BUFFER_RESULT_SYMBOL= 319 320 | SQL_NO_CACHE_SYMBOL= 320 321 | SQL_THREAD_SYMBOL= 321 322 | STACKED_SYMBOL= 322 323 | STARTS_SYMBOL= 323 324 | STATS_AUTO_RECALC_SYMBOL= 324 325 | STATS_PERSISTENT_SYMBOL= 325 326 | STATS_SAMPLE_PAGES_SYMBOL= 326 327 | STATUS_SYMBOL= 327 328 | STORAGE_SYMBOL= 328 329 | STRING_SYMBOL= 329 330 | SUBCLASS_ORIGIN_SYMBOL= 330 331 | SUBDATE_SYMBOL= 331 332 | SUBJECT_SYMBOL= 332 333 | SUBPARTITION_SYMBOL= 333 334 | SUBPARTITIONS_SYMBOL= 334 335 | SUPER_SYMBOL= 335 336 | SUSPEND_SYMBOL= 336 337 | SWAPS_SYMBOL= 337 338 | SWITCHES_SYMBOL= 338 339 | TABLE_NAME_SYMBOL= 339 340 | TABLES_SYMBOL= 340 341 | TABLE_CHECKSUM_SYMBOL= 341 342 | TABLESPACE_SYMBOL= 342 343 | TEMPORARY_SYMBOL= 343 344 | TEMPTABLE_SYMBOL= 344 345 | TEXT_SYMBOL= 345 346 | THAN_SYMBOL= 346 347 | TRANSACTION_SYMBOL= 347 348 | TRIGGERS_SYMBOL= 348 349 | TIMESTAMP_SYMBOL= 349 350 | TIMESTAMP_ADD_SYMBOL= 350 351 | TIMESTAMP_DIFF_SYMBOL= 351 352 | TIME_SYMBOL= 352 353 | TYPES_SYMBOL= 353 354 | TYPE_SYMBOL= 354 355 | UDF_RETURNS_SYMBOL= 355 356 | FUNCTION_SYMBOL= 356 357 | UNCOMMITTED_SYMBOL= 357 358 | UNDEFINED_SYMBOL= 358 359 | UNDO_BUFFER_SIZE_SYMBOL= 359 360 | UNDOFILE_SYMBOL= 360 361 | UNKNOWN_SYMBOL= 361 362 | UNTIL_SYMBOL= 362 363 | USER_RESOURCES_SYMBOL= 363 364 | USER_SYMBOL= 364 365 | USE_FRM_SYMBOL= 365 366 | VARIABLES_SYMBOL= 366 367 | VIEW_SYMBOL= 367 368 | VALUE_SYMBOL= 368 369 | WARNINGS_SYMBOL= 369 370 | WAIT_SYMBOL= 370 371 | WEEK_SYMBOL= 371 372 | WORK_SYMBOL= 372 373 | WEIGHT_STRING_SYMBOL= 373 374 | X509_SYMBOL= 374 375 | XID_SYMBOL= 375 376 | XML_SYMBOL= 376 377 | YEAR_SYMBOL= 377 -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import parser from './parser' 2 | 3 | export default parser 4 | 5 | export * from './grammar/MySQLParserListener' 6 | export * from './grammar/MySQLParser' 7 | export * from './grammar/MySQLLexer' 8 | export * from './grammar/MySQLBaseLexer' 9 | export * from './grammar/MySQLBaseParser' 10 | export * from './grammar/common' 11 | export * from './parser' 12 | export * from './lib/parsers-common' 13 | export * from './lib/version' 14 | export * from './lib/unquote' 15 | export * from './lib/rule-name' 16 | 17 | export * from './listeners/parser-listener' 18 | export * from './listeners/lexer-error-listener' 19 | export * from './listeners/parser-error-listener' 20 | -------------------------------------------------------------------------------- /src/lib/interval-to-array.ts: -------------------------------------------------------------------------------- 1 | import { Vocabulary } from 'antlr4ts' 2 | import { IntervalSet } from 'antlr4ts/misc/IntervalSet' 3 | 4 | export function intervalToArray(set: IntervalSet, vocabulary: Vocabulary): string[] { 5 | const symbols = set.toIntegerList() 6 | 7 | if (symbols.isEmpty) { 8 | return [] 9 | } 10 | 11 | const tokens: string[] = [] 12 | 13 | for (let i = 0; i < symbols.size; ++i) { 14 | const symbol = symbols.get(i) 15 | if (symbol < 0) { 16 | tokens.push('EOF') 17 | } else { 18 | let name = vocabulary.getDisplayName(symbol) 19 | if (name.includes('_SYMBOL')) { 20 | name = name.substr(0, name.length - 7) 21 | } else if (name.includes('_OPERATOR')) { 22 | name = name.substr(0, name.length - 9) 23 | } else if (name.includes('_NUMBER')) { 24 | name = name.substr(0, name.length - 7) + ' number' 25 | } else if (name.includes('BACK_TICK_QUOTED_ID')) { 26 | name = '`text`' 27 | } else if (name.includes('DOUBLE_QUOTED_TEXT')) { 28 | name = '"text"' 29 | } else if (name.includes('SINGLE_QUOTED_TEXT')) { 30 | name = "'text'" 31 | } 32 | tokens.push(name) 33 | } 34 | } 35 | 36 | return tokens 37 | } 38 | -------------------------------------------------------------------------------- /src/lib/parsers-common.ts: -------------------------------------------------------------------------------- 1 | // Describes the type of a given query. 2 | export enum MySQLQueryType { 3 | QtUnknown, 4 | QtAmbiguous, 5 | 6 | // DDL 7 | QtAlterDatabase, 8 | QtAlterLogFileGroup, 9 | QtAlterFunction, 10 | QtAlterProcedure, 11 | QtAlterServer, 12 | QtAlterTable, 13 | QtAlterTableSpace, 14 | QtAlterEvent, 15 | QtAlterView, 16 | 17 | QtCreateTable, 18 | QtCreateIndex, 19 | QtCreateDatabase, 20 | QtCreateEvent, 21 | QtCreateView, 22 | QtCreateRoutine, // All of procedure, function, UDF. Used for parse type. 23 | QtCreateProcedure, 24 | QtCreateFunction, 25 | QtCreateUdf, 26 | QtCreateTrigger, 27 | QtCreateLogFileGroup, 28 | QtCreateServer, 29 | QtCreateTableSpace, 30 | 31 | QtDropDatabase, 32 | QtDropEvent, 33 | QtDropFunction, // Includes UDF. 34 | QtDropProcedure, 35 | QtDropIndex, 36 | QtDropLogfileGroup, 37 | QtDropServer, 38 | QtDropTable, 39 | QtDropTablespace, 40 | QtDropTrigger, 41 | QtDropView, 42 | 43 | QtRenameTable, 44 | QtTruncateTable, 45 | 46 | // DML 47 | QtCall, 48 | QtDelete, 49 | QtDo, 50 | 51 | QtHandler, // Do we need Handler open/close etc.? 52 | 53 | QtInsert, 54 | QtLoadData, 55 | QtLoadXML, 56 | QtReplace, 57 | QtSelect, 58 | QtUpdate, 59 | 60 | QtPartition, // Cannot be used standalone. 61 | 62 | QtStartTransaction, 63 | QtBeginWork, 64 | QtCommit, 65 | QtRollbackWork, 66 | QtSetAutoCommit, // "set autocommit" is especially mentioned in transaction help, so identify this too. 67 | QtSetTransaction, 68 | 69 | QtSavepoint, 70 | QtReleaseSavepoint, 71 | QtRollbackSavepoint, 72 | 73 | QtLock, 74 | QtUnlock, 75 | 76 | QtXA, // Do we need xa start, xa end etc.? 77 | 78 | QtPurge, 79 | QtChangeMaster, 80 | QtReset, 81 | QtResetMaster, 82 | QtResetSlave, 83 | QtStartSlave, 84 | QtStopSlave, 85 | QtLoadDataMaster, 86 | QtLoadTableMaster, 87 | 88 | QtPrepare, 89 | QtExecute, 90 | QtDeallocate, 91 | 92 | // Database administration 93 | QtAlterUser, 94 | QtCreateUser, 95 | QtDropUser, 96 | QtGrantProxy, 97 | QtGrant, 98 | QtRenameUser, 99 | QtRevokeProxy, 100 | QtRevoke, 101 | 102 | QtAnalyzeTable, 103 | QtCheckTable, 104 | QtChecksumTable, 105 | QtOptimizeTable, 106 | QtRepairTable, 107 | QtBackUpTable, 108 | QtRestoreTable, 109 | 110 | QtInstallPlugin, 111 | QtUninstallPlugin, 112 | 113 | QtSet, // Any variable assignment. 114 | QtSetPassword, 115 | 116 | QtShow, 117 | QtShowAuthors, 118 | QtShowBinaryLogs, 119 | QtShowBinlogEvents, 120 | QtShowRelaylogEvents, 121 | QtShowCharset, 122 | QtShowCollation, 123 | QtShowColumns, 124 | QtShowContributors, 125 | QtShowCreateDatabase, 126 | QtShowCreateEvent, 127 | QtShowCreateFunction, 128 | QtShowCreateProcedure, 129 | QtShowCreateTable, 130 | QtShowCreateTrigger, 131 | QtShowCreateView, 132 | QtShowDatabases, 133 | QtShowEngineStatus, 134 | QtShowStorageEngines, 135 | QtShowErrors, 136 | QtShowEvents, 137 | QtShowFunctionCode, 138 | QtShowFunctionStatus, 139 | QtShowGrants, 140 | QtShowIndexes, // Index, Indexes, Keys 141 | QtShowInnoDBStatus, 142 | QtShowMasterStatus, 143 | QtShowOpenTables, 144 | QtShowPlugins, 145 | QtShowProcedureStatus, 146 | QtShowProcedureCode, 147 | QtShowPrivileges, 148 | QtShowProcessList, 149 | QtShowProfile, 150 | QtShowProfiles, 151 | QtShowSlaveHosts, 152 | QtShowSlaveStatus, 153 | QtShowStatus, 154 | QtShowVariables, 155 | QtShowTableStatus, 156 | QtShowTables, 157 | QtShowTriggers, 158 | QtShowWarnings, 159 | 160 | QtCacheIndex, 161 | QtFlush, 162 | QtKill, // Connection, Query 163 | QtLoadIndex, 164 | 165 | QtExplainTable, 166 | QtExplainStatement, 167 | QtHelp, 168 | QtUse, 169 | 170 | QtSentinel 171 | } 172 | -------------------------------------------------------------------------------- /src/lib/resolve-references.ts: -------------------------------------------------------------------------------- 1 | import { TableReference, ColumnReference, ValueReference } from '../listeners/parser-listener' 2 | 3 | export function resolveColumns( 4 | columnReferences: ColumnReference[], 5 | tableReferences: TableReference[] 6 | ): ColumnReference[] { 7 | const columnRefs = [...columnReferences] 8 | 9 | if (tableReferences.length === 1) { 10 | for (const columnRef of columnRefs) { 11 | columnRef.tableReference = tableReferences[0] 12 | } 13 | } 14 | 15 | return columnRefs 16 | } 17 | 18 | export function resolveValues( 19 | valueReferences: ValueReference[], 20 | tableReferences: TableReference[], 21 | columnReferences: ColumnReference[] 22 | ): ValueReference[] { 23 | const valueRefs = [...valueReferences] 24 | 25 | if (tableReferences.length === 1) { 26 | for (const [i, valueRef] of valueRefs.entries()) { 27 | if (valueRef.columnReference) { 28 | valueRef.columnReference.tableReference = tableReferences[0] 29 | } else { 30 | valueRef.columnReference = columnReferences[i] 31 | } 32 | } 33 | } 34 | 35 | return valueRefs 36 | } 37 | -------------------------------------------------------------------------------- /src/lib/rule-name.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/camelcase */ 2 | 3 | export enum RuleName { 4 | query = 'query', 5 | simpleStatement = 'simpleStatement', 6 | alterStatement = 'alterStatement', 7 | alterDatabase = 'alterDatabase', 8 | alterEvent = 'alterEvent', 9 | alterLogfileGroup = 'alterLogfileGroup', 10 | alterLogfileGroupOptions = 'alterLogfileGroupOptions', 11 | alterLogfileGroupOption = 'alterLogfileGroupOption', 12 | alterServer = 'alterServer', 13 | alterTable = 'alterTable', 14 | alterTableActions = 'alterTableActions', 15 | alterCommandList = 'alterCommandList', 16 | alterCommandsModifierList = 'alterCommandsModifierList', 17 | standaloneAlterCommands = 'standaloneAlterCommands', 18 | alterPartition = 'alterPartition', 19 | alterList = 'alterList', 20 | alterCommandsModifier = 'alterCommandsModifier', 21 | alterListItem = 'alterListItem', 22 | place = 'place', 23 | restrict = 'restrict', 24 | alterOrderList = 'alterOrderList', 25 | alterAlgorithmOption = 'alterAlgorithmOption', 26 | alterLockOption = 'alterLockOption', 27 | indexLockAndAlgorithm = 'indexLockAndAlgorithm', 28 | withValidation = 'withValidation', 29 | removePartitioning = 'removePartitioning', 30 | allOrPartitionNameList = 'allOrPartitionNameList', 31 | reorgPartitionRule = 'reorgPartitionRule', 32 | alterTablespace = 'alterTablespace', 33 | alterUndoTablespace = 'alterUndoTablespace', 34 | undoTableSpaceOptions = 'undoTableSpaceOptions', 35 | undoTableSpaceOption = 'undoTableSpaceOption', 36 | alterTablespaceOptions = 'alterTablespaceOptions', 37 | alterTablespaceOption = 'alterTablespaceOption', 38 | changeTablespaceOption = 'changeTablespaceOption', 39 | alterView = 'alterView', 40 | viewTail = 'viewTail', 41 | viewSelect = 'viewSelect', 42 | viewCheckOption = 'viewCheckOption', 43 | createStatement = 'createStatement', 44 | createDatabase = 'createDatabase', 45 | createDatabaseOption = 'createDatabaseOption', 46 | createTable = 'createTable', 47 | tableElementList = 'tableElementList', 48 | tableElement = 'tableElement', 49 | duplicateAsQueryExpression = 'duplicateAsQueryExpression', 50 | queryExpressionOrParens = 'queryExpressionOrParens', 51 | createRoutine = 'createRoutine', 52 | createProcedure = 'createProcedure', 53 | createFunction = 'createFunction', 54 | createUdf = 'createUdf', 55 | routineCreateOption = 'routineCreateOption', 56 | routineAlterOptions = 'routineAlterOptions', 57 | routineOption = 'routineOption', 58 | createIndex = 'createIndex', 59 | indexNameAndType = 'indexNameAndType', 60 | createIndexTarget = 'createIndexTarget', 61 | createLogfileGroup = 'createLogfileGroup', 62 | logfileGroupOptions = 'logfileGroupOptions', 63 | logfileGroupOption = 'logfileGroupOption', 64 | createServer = 'createServer', 65 | serverOptions = 'serverOptions', 66 | serverOption = 'serverOption', 67 | createTablespace = 'createTablespace', 68 | createUndoTablespace = 'createUndoTablespace', 69 | tsDataFileName = 'tsDataFileName', 70 | tsDataFile = 'tsDataFile', 71 | tablespaceOptions = 'tablespaceOptions', 72 | tablespaceOption = 'tablespaceOption', 73 | tsOptionInitialSize = 'tsOptionInitialSize', 74 | tsOptionUndoRedoBufferSize = 'tsOptionUndoRedoBufferSize', 75 | tsOptionAutoextendSize = 'tsOptionAutoextendSize', 76 | tsOptionMaxSize = 'tsOptionMaxSize', 77 | tsOptionExtentSize = 'tsOptionExtentSize', 78 | tsOptionNodegroup = 'tsOptionNodegroup', 79 | tsOptionEngine = 'tsOptionEngine', 80 | tsOptionWait = 'tsOptionWait', 81 | tsOptionComment = 'tsOptionComment', 82 | tsOptionFileblockSize = 'tsOptionFileblockSize', 83 | tsOptionEncryption = 'tsOptionEncryption', 84 | createView = 'createView', 85 | viewReplaceOrAlgorithm = 'viewReplaceOrAlgorithm', 86 | viewAlgorithm = 'viewAlgorithm', 87 | viewSuid = 'viewSuid', 88 | createTrigger = 'createTrigger', 89 | triggerFollowsPrecedesClause = 'triggerFollowsPrecedesClause', 90 | createEvent = 'createEvent', 91 | createRole = 'createRole', 92 | createSpatialReference = 'createSpatialReference', 93 | srsAttribute = 'srsAttribute', 94 | dropStatement = 'dropStatement', 95 | dropDatabase = 'dropDatabase', 96 | dropEvent = 'dropEvent', 97 | dropFunction = 'dropFunction', 98 | dropProcedure = 'dropProcedure', 99 | dropIndex = 'dropIndex', 100 | dropLogfileGroup = 'dropLogfileGroup', 101 | dropLogfileGroupOption = 'dropLogfileGroupOption', 102 | dropServer = 'dropServer', 103 | dropTable = 'dropTable', 104 | dropTableSpace = 'dropTableSpace', 105 | dropTrigger = 'dropTrigger', 106 | dropView = 'dropView', 107 | dropRole = 'dropRole', 108 | dropSpatialReference = 'dropSpatialReference', 109 | dropUndoTablespace = 'dropUndoTablespace', 110 | renameTableStatement = 'renameTableStatement', 111 | renamePair = 'renamePair', 112 | truncateTableStatement = 'truncateTableStatement', 113 | importStatement = 'importStatement', 114 | callStatement = 'callStatement', 115 | deleteStatement = 'deleteStatement', 116 | partitionDelete = 'partitionDelete', 117 | deleteStatementOption = 'deleteStatementOption', 118 | doStatement = 'doStatement', 119 | handlerStatement = 'handlerStatement', 120 | handlerReadOrScan = 'handlerReadOrScan', 121 | insertStatement = 'insertStatement', 122 | insertLockOption = 'insertLockOption', 123 | insertFromConstructor = 'insertFromConstructor', 124 | fields = 'fields', 125 | insertValues = 'insertValues', 126 | insertQueryExpression = 'insertQueryExpression', 127 | valueList = 'valueList', 128 | values = 'values', 129 | valuesReference = 'valuesReference', 130 | insertUpdateList = 'insertUpdateList', 131 | loadStatement = 'loadStatement', 132 | dataOrXml = 'dataOrXml', 133 | xmlRowsIdentifiedBy = 'xmlRowsIdentifiedBy', 134 | loadDataFileTail = 'loadDataFileTail', 135 | loadDataFileTargetList = 'loadDataFileTargetList', 136 | fieldOrVariableList = 'fieldOrVariableList', 137 | replaceStatement = 'replaceStatement', 138 | selectStatement = 'selectStatement', 139 | selectStatementWithInto = 'selectStatementWithInto', 140 | queryExpression = 'queryExpression', 141 | queryExpressionBody = 'queryExpressionBody', 142 | queryExpressionParens = 'queryExpressionParens', 143 | querySpecification = 'querySpecification', 144 | subquery = 'subquery', 145 | querySpecOption = 'querySpecOption', 146 | limitClause = 'limitClause', 147 | simpleLimitClause = 'simpleLimitClause', 148 | limitOptions = 'limitOptions', 149 | limitOption = 'limitOption', 150 | intoClause = 'intoClause', 151 | procedureAnalyseClause = 'procedureAnalyseClause', 152 | havingClause = 'havingClause', 153 | windowClause = 'windowClause', 154 | windowDefinition = 'windowDefinition', 155 | windowSpec = 'windowSpec', 156 | windowSpecDetails = 'windowSpecDetails', 157 | windowFrameClause = 'windowFrameClause', 158 | windowFrameUnits = 'windowFrameUnits', 159 | windowFrameExtent = 'windowFrameExtent', 160 | windowFrameStart = 'windowFrameStart', 161 | windowFrameBetween = 'windowFrameBetween', 162 | windowFrameBound = 'windowFrameBound', 163 | windowFrameExclusion = 'windowFrameExclusion', 164 | withClause = 'withClause', 165 | commonTableExpression = 'commonTableExpression', 166 | groupByClause = 'groupByClause', 167 | olapOption = 'olapOption', 168 | orderClause = 'orderClause', 169 | direction = 'direction', 170 | fromClause = 'fromClause', 171 | tableReferenceList = 'tableReferenceList', 172 | selectOption = 'selectOption', 173 | lockingClause = 'lockingClause', 174 | lockStrengh = 'lockStrengh', 175 | lockedRowAction = 'lockedRowAction', 176 | selectItemList = 'selectItemList', 177 | selectItem = 'selectItem', 178 | selectAlias = 'selectAlias', 179 | whereClause = 'whereClause', 180 | tableReference = 'tableReference', 181 | escapedTableReference = 'escapedTableReference', 182 | joinedTable = 'joinedTable', 183 | naturalJoinType = 'naturalJoinType', 184 | innerJoinType = 'innerJoinType', 185 | outerJoinType = 'outerJoinType', 186 | tableFactor = 'tableFactor', 187 | singleTable = 'singleTable', 188 | singleTableParens = 'singleTableParens', 189 | derivedTable = 'derivedTable', 190 | tableReferenceListParens = 'tableReferenceListParens', 191 | tableFunction = 'tableFunction', 192 | columnsClause = 'columnsClause', 193 | jtColumn = 'jtColumn', 194 | onEmptyOrError = 'onEmptyOrError', 195 | onEmpty = 'onEmpty', 196 | onError = 'onError', 197 | jtOnResponse = 'jtOnResponse', 198 | unionOption = 'unionOption', 199 | tableAlias = 'tableAlias', 200 | indexHintList = 'indexHintList', 201 | indexHint = 'indexHint', 202 | indexHintType = 'indexHintType', 203 | keyOrIndex = 'keyOrIndex', 204 | constraintKeyType = 'constraintKeyType', 205 | indexHintClause = 'indexHintClause', 206 | indexList = 'indexList', 207 | indexListElement = 'indexListElement', 208 | updateStatement = 'updateStatement', 209 | transactionOrLockingStatement = 'transactionOrLockingStatement', 210 | transactionStatement = 'transactionStatement', 211 | beginWork = 'beginWork', 212 | transactionCharacteristic = 'transactionCharacteristic', 213 | savepointStatement = 'savepointStatement', 214 | lockStatement = 'lockStatement', 215 | lockItem = 'lockItem', 216 | lockOption = 'lockOption', 217 | xaStatement = 'xaStatement', 218 | xaConvert = 'xaConvert', 219 | xid = 'xid', 220 | replicationStatement = 'replicationStatement', 221 | resetOption = 'resetOption', 222 | masterResetOptions = 'masterResetOptions', 223 | replicationLoad = 'replicationLoad', 224 | changeMaster = 'changeMaster', 225 | changeMasterOptions = 'changeMasterOptions', 226 | masterOption = 'masterOption', 227 | privilegeCheckDef = 'privilegeCheckDef', 228 | masterTlsCiphersuitesDef = 'masterTlsCiphersuitesDef', 229 | masterFileDef = 'masterFileDef', 230 | serverIdList = 'serverIdList', 231 | changeReplication = 'changeReplication', 232 | filterDefinition = 'filterDefinition', 233 | filterDbList = 'filterDbList', 234 | filterTableList = 'filterTableList', 235 | filterStringList = 'filterStringList', 236 | filterWildDbTableString = 'filterWildDbTableString', 237 | filterDbPairList = 'filterDbPairList', 238 | slave = 'slave', 239 | slaveUntilOptions = 'slaveUntilOptions', 240 | slaveConnectionOptions = 'slaveConnectionOptions', 241 | slaveThreadOptions = 'slaveThreadOptions', 242 | slaveThreadOption = 'slaveThreadOption', 243 | groupReplication = 'groupReplication', 244 | preparedStatement = 'preparedStatement', 245 | executeStatement = 'executeStatement', 246 | executeVarList = 'executeVarList', 247 | cloneStatement = 'cloneStatement', 248 | dataDirSSL = 'dataDirSSL', 249 | ssl = 'ssl', 250 | accountManagementStatement = 'accountManagementStatement', 251 | alterUser = 'alterUser', 252 | alterUserTail = 'alterUserTail', 253 | userFunction = 'userFunction', 254 | createUser = 'createUser', 255 | createUserTail = 'createUserTail', 256 | defaultRoleClause = 'defaultRoleClause', 257 | requireClause = 'requireClause', 258 | connectOptions = 'connectOptions', 259 | accountLockPasswordExpireOptions = 'accountLockPasswordExpireOptions', 260 | dropUser = 'dropUser', 261 | grant = 'grant', 262 | grantTargetList = 'grantTargetList', 263 | grantOptions = 'grantOptions', 264 | exceptRoleList = 'exceptRoleList', 265 | withRoles = 'withRoles', 266 | grantAs = 'grantAs', 267 | versionedRequireClause = 'versionedRequireClause', 268 | renameUser = 'renameUser', 269 | revoke = 'revoke', 270 | onTypeTo = 'onTypeTo', 271 | aclType = 'aclType', 272 | roleOrPrivilegesList = 'roleOrPrivilegesList', 273 | roleOrPrivilege = 'roleOrPrivilege', 274 | grantIdentifier = 'grantIdentifier', 275 | requireList = 'requireList', 276 | requireListElement = 'requireListElement', 277 | grantOption = 'grantOption', 278 | setRole = 'setRole', 279 | roleList = 'roleList', 280 | role = 'role', 281 | tableAdministrationStatement = 'tableAdministrationStatement', 282 | histogram = 'histogram', 283 | checkOption = 'checkOption', 284 | repairType = 'repairType', 285 | installUninstallStatment = 'installUninstallStatment', 286 | setStatement = 'setStatement', 287 | startOptionValueList = 'startOptionValueList', 288 | transactionCharacteristics = 'transactionCharacteristics', 289 | transactionAccessMode = 'transactionAccessMode', 290 | isolationLevel = 'isolationLevel', 291 | optionValueListContinued = 'optionValueListContinued', 292 | optionValueNoOptionType = 'optionValueNoOptionType', 293 | optionValue = 'optionValue', 294 | setSystemVariable = 'setSystemVariable', 295 | startOptionValueListFollowingOptionType = 'startOptionValueListFollowingOptionType', 296 | optionValueFollowingOptionType = 'optionValueFollowingOptionType', 297 | setExprOrDefault = 'setExprOrDefault', 298 | showStatement = 'showStatement', 299 | showCommandType = 'showCommandType', 300 | nonBlocking = 'nonBlocking', 301 | fromOrIn = 'fromOrIn', 302 | inDb = 'inDb', 303 | profileType = 'profileType', 304 | otherAdministrativeStatement = 'otherAdministrativeStatement', 305 | keyCacheListOrParts = 'keyCacheListOrParts', 306 | keyCacheList = 'keyCacheList', 307 | assignToKeycache = 'assignToKeycache', 308 | assignToKeycachePartition = 'assignToKeycachePartition', 309 | cacheKeyList = 'cacheKeyList', 310 | keyUsageElement = 'keyUsageElement', 311 | keyUsageList = 'keyUsageList', 312 | flushOption = 'flushOption', 313 | logType = 'logType', 314 | flushTables = 'flushTables', 315 | flushTablesOptions = 'flushTablesOptions', 316 | preloadTail = 'preloadTail', 317 | preloadList = 'preloadList', 318 | preloadKeys = 'preloadKeys', 319 | adminPartition = 'adminPartition', 320 | resourceGroupManagement = 'resourceGroupManagement', 321 | createResourceGroup = 'createResourceGroup', 322 | resourceGroupVcpuList = 'resourceGroupVcpuList', 323 | vcpuNumOrRange = 'vcpuNumOrRange', 324 | resourceGroupPriority = 'resourceGroupPriority', 325 | resourceGroupEnableDisable = 'resourceGroupEnableDisable', 326 | alterResourceGroup = 'alterResourceGroup', 327 | setResourceGroup = 'setResourceGroup', 328 | threadIdList = 'threadIdList', 329 | dropResourceGroup = 'dropResourceGroup', 330 | utilityStatement = 'utilityStatement', 331 | describeCommand = 'describeCommand', 332 | explainCommand = 'explainCommand', 333 | explainableStatement = 'explainableStatement', 334 | helpCommand = 'helpCommand', 335 | useCommand = 'useCommand', 336 | restartServer = 'restartServer', 337 | expr = 'expr', 338 | boolPri = 'boolPri', 339 | compOp = 'compOp', 340 | predicate = 'predicate', 341 | predicateOperations = 'predicateOperations', 342 | bitExpr = 'bitExpr', 343 | simpleExpr = 'simpleExpr', 344 | arrayCast = 'arrayCast', 345 | jsonOperator = 'jsonOperator', 346 | sumExpr = 'sumExpr', 347 | groupingOperation = 'groupingOperation', 348 | windowFunctionCall = 'windowFunctionCall', 349 | windowingClause = 'windowingClause', 350 | leadLagInfo = 'leadLagInfo', 351 | nullTreatment = 'nullTreatment', 352 | jsonFunction = 'jsonFunction', 353 | inSumExpr = 'inSumExpr', 354 | identListArg = 'identListArg', 355 | identList = 'identList', 356 | fulltextOptions = 'fulltextOptions', 357 | runtimeFunctionCall = 'runtimeFunctionCall', 358 | geometryFunction = 'geometryFunction', 359 | timeFunctionParameters = 'timeFunctionParameters', 360 | fractionalPrecision = 'fractionalPrecision', 361 | weightStringLevels = 'weightStringLevels', 362 | weightStringLevelListItem = 'weightStringLevelListItem', 363 | dateTimeTtype = 'dateTimeTtype', 364 | trimFunction = 'trimFunction', 365 | substringFunction = 'substringFunction', 366 | functionCall = 'functionCall', 367 | udfExprList = 'udfExprList', 368 | udfExpr = 'udfExpr', 369 | variable = 'variable', 370 | userVariable = 'userVariable', 371 | systemVariable = 'systemVariable', 372 | internalVariableName = 'internalVariableName', 373 | whenExpression = 'whenExpression', 374 | thenExpression = 'thenExpression', 375 | elseExpression = 'elseExpression', 376 | castType = 'castType', 377 | exprList = 'exprList', 378 | charset = 'charset', 379 | notRule = 'notRule', 380 | not2Rule = 'not2Rule', 381 | interval = 'interval', 382 | intervalTimeStamp = 'intervalTimeStamp', 383 | exprListWithParentheses = 'exprListWithParentheses', 384 | exprWithParentheses = 'exprWithParentheses', 385 | simpleExprWithParentheses = 'simpleExprWithParentheses', 386 | orderList = 'orderList', 387 | orderExpression = 'orderExpression', 388 | groupList = 'groupList', 389 | groupingExpression = 'groupingExpression', 390 | channel = 'channel', 391 | compoundStatement = 'compoundStatement', 392 | returnStatement = 'returnStatement', 393 | ifStatement = 'ifStatement', 394 | ifBody = 'ifBody', 395 | thenStatement = 'thenStatement', 396 | compoundStatementList = 'compoundStatementList', 397 | caseStatement = 'caseStatement', 398 | elseStatement = 'elseStatement', 399 | labeledBlock = 'labeledBlock', 400 | unlabeledBlock = 'unlabeledBlock', 401 | label = 'label', 402 | beginEndBlock = 'beginEndBlock', 403 | labeledControl = 'labeledControl', 404 | unlabeledControl = 'unlabeledControl', 405 | loopBlock = 'loopBlock', 406 | whileDoBlock = 'whileDoBlock', 407 | repeatUntilBlock = 'repeatUntilBlock', 408 | spDeclarations = 'spDeclarations', 409 | spDeclaration = 'spDeclaration', 410 | variableDeclaration = 'variableDeclaration', 411 | conditionDeclaration = 'conditionDeclaration', 412 | spCondition = 'spCondition', 413 | sqlstate = 'sqlstate', 414 | handlerDeclaration = 'handlerDeclaration', 415 | handlerCondition = 'handlerCondition', 416 | cursorDeclaration = 'cursorDeclaration', 417 | iterateStatement = 'iterateStatement', 418 | leaveStatement = 'leaveStatement', 419 | getDiagnostics = 'getDiagnostics', 420 | signalAllowedExpr = 'signalAllowedExpr', 421 | statementInformationItem = 'statementInformationItem', 422 | conditionInformationItem = 'conditionInformationItem', 423 | signalInformationItemName = 'signalInformationItemName', 424 | signalStatement = 'signalStatement', 425 | resignalStatement = 'resignalStatement', 426 | signalInformationItem = 'signalInformationItem', 427 | cursorOpen = 'cursorOpen', 428 | cursorClose = 'cursorClose', 429 | cursorFetch = 'cursorFetch', 430 | schedule = 'schedule', 431 | columnDefinition = 'columnDefinition', 432 | checkOrReferences = 'checkOrReferences', 433 | checkConstraint = 'checkConstraint', 434 | constraintEnforcement = 'constraintEnforcement', 435 | tableConstraintDef = 'tableConstraintDef', 436 | constraintName = 'constraintName', 437 | fieldDefinition = 'fieldDefinition', 438 | columnAttribute = 'columnAttribute', 439 | columnFormat = 'columnFormat', 440 | storageMedia = 'storageMedia', 441 | gcolAttribute = 'gcolAttribute', 442 | references = 'references', 443 | deleteOption = 'deleteOption', 444 | keyList = 'keyList', 445 | keyPart = 'keyPart', 446 | keyListWithExpression = 'keyListWithExpression', 447 | keyPartOrExpression = 'keyPartOrExpression', 448 | keyListVariants = 'keyListVariants', 449 | indexType = 'indexType', 450 | indexOption = 'indexOption', 451 | commonIndexOption = 'commonIndexOption', 452 | visibility = 'visibility', 453 | indexTypeClause = 'indexTypeClause', 454 | fulltextIndexOption = 'fulltextIndexOption', 455 | spatialIndexOption = 'spatialIndexOption', 456 | dataTypeDefinition = 'dataTypeDefinition', 457 | dataType = 'dataType', 458 | nchar = 'nchar', 459 | realType = 'realType', 460 | fieldLength = 'fieldLength', 461 | fieldOptions = 'fieldOptions', 462 | charsetWithOptBinary = 'charsetWithOptBinary', 463 | ascii = 'ascii', 464 | unicode = 'unicode', 465 | wsNumCodepoints = 'wsNumCodepoints', 466 | typeDatetimePrecision = 'typeDatetimePrecision', 467 | charsetName = 'charsetName', 468 | collationName = 'collationName', 469 | createTableOptions = 'createTableOptions', 470 | createTableOptionsSpaceSeparated = 'createTableOptionsSpaceSeparated', 471 | createTableOption = 'createTableOption', 472 | ternaryOption = 'ternaryOption', 473 | defaultCollation = 'defaultCollation', 474 | defaultEncryption = 'defaultEncryption', 475 | defaultCharset = 'defaultCharset', 476 | partitionClause = 'partitionClause', 477 | partitionTypeDef = 'partitionTypeDef', 478 | subPartitions = 'subPartitions', 479 | partitionKeyAlgorithm = 'partitionKeyAlgorithm', 480 | partitionDefinitions = 'partitionDefinitions', 481 | partitionDefinition = 'partitionDefinition', 482 | partitionValuesIn = 'partitionValuesIn', 483 | partitionOption = 'partitionOption', 484 | subpartitionDefinition = 'subpartitionDefinition', 485 | partitionValueItemListParen = 'partitionValueItemListParen', 486 | partitionValueItem = 'partitionValueItem', 487 | definerClause = 'definerClause', 488 | ifExists = 'ifExists', 489 | ifNotExists = 'ifNotExists', 490 | procedureParameter = 'procedureParameter', 491 | functionParameter = 'functionParameter', 492 | collate = 'collate', 493 | typeWithOptCollate = 'typeWithOptCollate', 494 | schemaIdentifierPair = 'schemaIdentifierPair', 495 | viewRefList = 'viewRefList', 496 | updateList = 'updateList', 497 | updateElement = 'updateElement', 498 | charsetClause = 'charsetClause', 499 | fieldsClause = 'fieldsClause', 500 | fieldTerm = 'fieldTerm', 501 | linesClause = 'linesClause', 502 | lineTerm = 'lineTerm', 503 | userList = 'userList', 504 | createUserList = 'createUserList', 505 | alterUserList = 'alterUserList', 506 | createUserEntry = 'createUserEntry', 507 | alterUserEntry = 'alterUserEntry', 508 | retainCurrentPassword = 'retainCurrentPassword', 509 | discardOldPassword = 'discardOldPassword', 510 | replacePassword = 'replacePassword', 511 | userIdentifierOrText = 'userIdentifierOrText', 512 | user = 'user', 513 | likeClause = 'likeClause', 514 | likeOrWhere = 'likeOrWhere', 515 | onlineOption = 'onlineOption', 516 | noWriteToBinLog = 'noWriteToBinLog', 517 | usePartition = 'usePartition', 518 | fieldIdentifier = 'fieldIdentifier', 519 | columnName = 'columnName', 520 | columnInternalRef = 'columnInternalRef', 521 | columnInternalRefList = 'columnInternalRefList', 522 | columnRef = 'columnRef', 523 | insertIdentifier = 'insertIdentifier', 524 | indexName = 'indexName', 525 | indexRef = 'indexRef', 526 | tableWild = 'tableWild', 527 | schemaName = 'schemaName', 528 | schemaRef = 'schemaRef', 529 | procedureName = 'procedureName', 530 | procedureRef = 'procedureRef', 531 | functionName = 'functionName', 532 | functionRef = 'functionRef', 533 | triggerName = 'triggerName', 534 | triggerRef = 'triggerRef', 535 | viewName = 'viewName', 536 | viewRef = 'viewRef', 537 | tablespaceName = 'tablespaceName', 538 | tablespaceRef = 'tablespaceRef', 539 | logfileGroupName = 'logfileGroupName', 540 | logfileGroupRef = 'logfileGroupRef', 541 | eventName = 'eventName', 542 | eventRef = 'eventRef', 543 | udfName = 'udfName', 544 | serverName = 'serverName', 545 | serverRef = 'serverRef', 546 | engineRef = 'engineRef', 547 | tableName = 'tableName', 548 | filterTableRef = 'filterTableRef', 549 | tableRefWithWildcard = 'tableRefWithWildcard', 550 | tableRef = 'tableRef', 551 | tableRefList = 'tableRefList', 552 | tableAliasRefList = 'tableAliasRefList', 553 | parameterName = 'parameterName', 554 | labelIdentifier = 'labelIdentifier', 555 | labelRef = 'labelRef', 556 | roleIdentifier = 'roleIdentifier', 557 | roleRef = 'roleRef', 558 | pluginRef = 'pluginRef', 559 | componentRef = 'componentRef', 560 | resourceGroupRef = 'resourceGroupRef', 561 | windowName = 'windowName', 562 | pureIdentifier = 'pureIdentifier', 563 | identifier = 'identifier', 564 | identifierList = 'identifierList', 565 | identifierListWithParentheses = 'identifierListWithParentheses', 566 | qualifiedIdentifier = 'qualifiedIdentifier', 567 | simpleIdentifier = 'simpleIdentifier', 568 | dotIdentifier = 'dotIdentifier', 569 | ulong_number = 'ulong_number', 570 | real_ulong_number = 'real_ulong_number', 571 | ulonglong_number = 'ulonglong_number', 572 | real_ulonglong_number = 'real_ulonglong_number', 573 | literal = 'literal', 574 | signedLiteral = 'signedLiteral', 575 | stringList = 'stringList', 576 | textStringLiteral = 'textStringLiteral', 577 | textString = 'textString', 578 | textStringHash = 'textStringHash', 579 | textLiteral = 'textLiteral', 580 | textStringNoLinebreak = 'textStringNoLinebreak', 581 | textStringLiteralList = 'textStringLiteralList', 582 | numLiteral = 'numLiteral', 583 | boolLiteral = 'boolLiteral', 584 | nullLiteral = 'nullLiteral', 585 | temporalLiteral = 'temporalLiteral', 586 | floatOptions = 'floatOptions', 587 | standardFloatOptions = 'standardFloatOptions', 588 | precision = 'precision', 589 | textOrIdentifier = 'textOrIdentifier', 590 | lValueIdentifier = 'lValueIdentifier', 591 | roleIdentifierOrText = 'roleIdentifierOrText', 592 | sizeNumber = 'sizeNumber', 593 | parentheses = 'parentheses', 594 | equal = 'equal', 595 | optionType = 'optionType', 596 | varIdentType = 'varIdentType', 597 | setVarIdentType = 'setVarIdentType', 598 | identifierKeyword = 'identifierKeyword', 599 | identifierKeywordsAmbiguous1RolesAndLabels = 'identifierKeywordsAmbiguous1RolesAndLabels', 600 | identifierKeywordsAmbiguous2Labels = 'identifierKeywordsAmbiguous2Labels', 601 | labelKeyword = 'labelKeyword', 602 | identifierKeywordsAmbiguous3Roles = 'identifierKeywordsAmbiguous3Roles', 603 | identifierKeywordsUnambiguous = 'identifierKeywordsUnambiguous', 604 | roleKeyword = 'roleKeyword', 605 | lValueKeyword = 'lValueKeyword', 606 | identifierKeywordsAmbiguous4SystemVariables = 'identifierKeywordsAmbiguous4SystemVariables', 607 | roleOrIdentifierKeyword = 'roleOrIdentifierKeyword', 608 | roleOrLabelKeyword = 'roleOrLabelKeyword' 609 | } 610 | -------------------------------------------------------------------------------- /src/lib/skip-leading-whitespace.ts: -------------------------------------------------------------------------------- 1 | export function skipLeadingWhitespace(text: string, head: number, tail: number): number { 2 | while (head < tail && text[head] <= ' ') { 3 | head++ 4 | } 5 | return head 6 | } 7 | -------------------------------------------------------------------------------- /src/lib/unquote.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Remove quotes from a string. Useful during the parsing process 3 | * when we need to extract identifiers. 4 | * 5 | * e.g. '"1"' => '1' 6 | * 7 | * @param text 8 | */ 9 | export function unquote(text?: string): string { 10 | if (!text) { 11 | return '' 12 | } 13 | 14 | if (text.length < 2) { 15 | return text 16 | } 17 | 18 | if ( 19 | text.startsWith('"') || 20 | text.startsWith('`') || 21 | (text.startsWith("'") && text.startsWith(text[text.length - 1])) 22 | ) { 23 | return text.substr(1, text.length - 2) 24 | } 25 | 26 | return text 27 | } 28 | -------------------------------------------------------------------------------- /src/lib/version.ts: -------------------------------------------------------------------------------- 1 | import { keywords56, keywords57, keywords80 } from '../grammar/keywords' 2 | 3 | export enum MySQLVersion { 4 | Unknown, 5 | MySQL56, 6 | MySQL57, 7 | MySQL80 8 | } 9 | 10 | export function versionToNumber(version: string): number { 11 | const [major, minor, patch] = version.split('.') 12 | 13 | const majorMinor = `${major}0${minor}` 14 | 15 | if (String(patch).length === 2) { 16 | return Number(`${majorMinor}${patch}`) 17 | } 18 | 19 | return Number(`${majorMinor}0${patch}`) 20 | } 21 | 22 | export function numberToVersion(version: number): MySQLVersion { 23 | const major = Math.floor(version / 10000) 24 | const minor = Math.floor((version / 100) % 100) 25 | 26 | if (major < 5 || major > 8) { 27 | return MySQLVersion.Unknown 28 | } 29 | 30 | if (major === 8) { 31 | return MySQLVersion.MySQL80 32 | } 33 | 34 | if (major != 5) { 35 | return MySQLVersion.Unknown 36 | } 37 | 38 | switch (minor) { 39 | case 6: 40 | return MySQLVersion.MySQL56 41 | case 7: 42 | return MySQLVersion.MySQL57 43 | default: 44 | return MySQLVersion.Unknown 45 | } 46 | } 47 | 48 | export function keywordsForVersion(version: number): string[] { 49 | const mySQLVersion = numberToVersion(version) 50 | 51 | switch (mySQLVersion) { 52 | case MySQLVersion.MySQL56: 53 | return keywords56.map(keyword => keyword.word) 54 | case MySQLVersion.MySQL57: 55 | return keywords57.map(keyword => keyword.word) 56 | case MySQLVersion.MySQL80: 57 | return keywords80.map(keyword => keyword.word) 58 | default: 59 | return [] 60 | } 61 | } 62 | 63 | export function reservedKeywordsForVersion(version: number): string[] { 64 | const mySQLVersion = numberToVersion(version) 65 | 66 | switch (mySQLVersion) { 67 | case MySQLVersion.MySQL56: { 68 | const reserved = keywords56.filter(({ isReserved }) => isReserved) 69 | return reserved.map(keyword => keyword.word) 70 | } 71 | case MySQLVersion.MySQL57: { 72 | const reserved = keywords57.filter(({ isReserved }) => isReserved) 73 | return reserved.map(keyword => keyword.word) 74 | } 75 | case MySQLVersion.MySQL80: { 76 | const reserved = keywords80.filter(({ isReserved }) => isReserved) 77 | return reserved.map(keyword => keyword.word) 78 | } 79 | default: 80 | return [] 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/listeners/errors.ts: -------------------------------------------------------------------------------- 1 | import { Token } from 'antlr4ts' 2 | 3 | class ListenerError extends Error { 4 | name: string 5 | code: number 6 | 7 | constructor() { 8 | super() 9 | 10 | if (Error.captureStackTrace) { 11 | Error.captureStackTrace(this, ListenerError) 12 | } 13 | 14 | this.name = 'ListenerError' 15 | this.code = 1000 16 | } 17 | } 18 | 19 | export interface LexerErrorData { 20 | offset?: number 21 | position: { 22 | character: number 23 | line: number 24 | } 25 | } 26 | 27 | export class LexerError extends ListenerError { 28 | data: LexerErrorData 29 | 30 | constructor(message: string, data: LexerErrorData) { 31 | super() 32 | this.name = 'LexerError' 33 | this.message = message 34 | this.data = data 35 | this.code = 1001 36 | } 37 | } 38 | 39 | export interface ParserErrorData { 40 | expectedTokens: string[] 41 | offendingToken: Token | null 42 | character: number 43 | line: number 44 | } 45 | 46 | export class ParserError extends ListenerError { 47 | data: ParserErrorData 48 | 49 | constructor(message: string, data: ParserErrorData) { 50 | super() 51 | this.name = 'ParserError' 52 | this.message = message 53 | this.data = data 54 | this.code = 1002 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/listeners/lexer-error-listener.ts: -------------------------------------------------------------------------------- 1 | import { ANTLRErrorListener } from 'antlr4ts' 2 | import { LexerError } from './errors' 3 | import { MySQLLexer } from '../grammar/MySQLLexer' 4 | import { Interval } from 'antlr4ts/misc/Interval' 5 | 6 | export class LexerErrorListener implements ANTLRErrorListener { 7 | error?: LexerError 8 | lexer: MySQLLexer 9 | 10 | constructor(lexer: MySQLLexer) { 11 | this.lexer = lexer 12 | } 13 | 14 | syntaxError( 15 | // eslint-disable-next-line 16 | // @ts-ignore 17 | _, 18 | offendingToken: T | undefined, 19 | line: number, 20 | character: number, 21 | message: string 22 | ): void { 23 | // offendingToken is only defined for parser error listeners, so its safe to return here 24 | if (offendingToken) { 25 | return 26 | } 27 | 28 | const input = this.lexer.inputStream 29 | const interval = new Interval(this.lexer._tokenStartCharIndex, input.index) 30 | const text = this.lexer.getErrorDisplay(input.getText(interval)) || ' ' 31 | 32 | switch (text[0]) { 33 | case '/': 34 | message = 'Unfinished multiline comment' 35 | break 36 | case '"': 37 | message = 'Unfinished double quoted string literal' 38 | break 39 | case "'": 40 | message = 'Unfinished single quoted string literal' 41 | break 42 | case '`': 43 | message = 'Unfinished back tick quoted string literal' 44 | break 45 | default: 46 | // Hex or bin string? 47 | if (text.length > 1 && text[1] === "'" && (text.startsWith('x') || text.startsWith('b'))) { 48 | message = 'Unfinished ' + (text.startsWith('x') ? 'hex' : 'binary') + ' string literal' 49 | } else { 50 | // Something else the lexer couldn't make sense of (likely there is no rule that accepts this input). 51 | message = '"' + text + '" is no valid input at all' 52 | } 53 | } 54 | 55 | const data = { 56 | offset: input.index, 57 | position: { 58 | character, 59 | line 60 | } 61 | } 62 | 63 | this.error = new LexerError(message, data) 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/listeners/parser-error-listener.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ANTLRErrorListener, 3 | FailedPredicateException, 4 | InputMismatchException, 5 | NoViableAltException, 6 | RecognitionException, 7 | Token, 8 | Recognizer 9 | } from 'antlr4ts' 10 | import { ParserError } from './errors' 11 | import { ATNSimulator } from 'antlr4ts/atn/ATNSimulator' 12 | import { intervalToArray } from '../lib/interval-to-array' 13 | 14 | function getErrorMessage( 15 | error: RecognitionException | undefined, 16 | message: string, 17 | expectedTokens: string[], 18 | offendingToken: Token 19 | ): string { 20 | let wrongText = offendingToken.text || '' 21 | if (!wrongText.startsWith('"') && !wrongText.startsWith("'") && !wrongText.startsWith('`')) { 22 | wrongText = '"' + wrongText + '"' 23 | } 24 | 25 | // only show 6 tokens in error message 26 | const expectedText = expectedTokens.slice(0, 5).join(', ') 27 | const isEof = offendingToken.type === Token.EOF 28 | 29 | if (!error) { 30 | if (message.includes('missing') && expectedTokens.length === 1) { 31 | return `Missing ${expectedText}` 32 | } else { 33 | return `Extraneous input ${wrongText} found, expecting ${expectedText}` 34 | } 35 | } else { 36 | if (error instanceof InputMismatchException || error instanceof NoViableAltException) { 37 | if (isEof) { 38 | return 'Statement is incomplete' 39 | } else { 40 | return `${wrongText} is not valid at this position` 41 | } 42 | } 43 | 44 | if (error instanceof FailedPredicateException) { 45 | // TODO 46 | } 47 | } 48 | 49 | return message 50 | } 51 | 52 | export class ParserErrorListener implements ANTLRErrorListener { 53 | error: ParserError | undefined 54 | 55 | syntaxError( 56 | recognizer: Recognizer, 57 | offendingToken: T | undefined, 58 | line: number, 59 | character: number, 60 | message: string, 61 | error: RecognitionException | undefined 62 | ): void { 63 | // offendingToken is only undefined for lexer error listeners, so its safe to return here 64 | if (!offendingToken) { 65 | return 66 | } 67 | 68 | const expected = recognizer.atn.getExpectedTokens(recognizer.state, error?.context) 69 | const expectedTokens = intervalToArray(expected, recognizer.vocabulary) 70 | const errorMessage = getErrorMessage(error, message, expectedTokens, offendingToken) 71 | 72 | this.error = new ParserError(errorMessage, { 73 | offendingToken: offendingToken ?? null, 74 | expectedTokens, 75 | character, 76 | line 77 | }) 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/listeners/parser-listener.ts: -------------------------------------------------------------------------------- 1 | import { 2 | BitExprContext, 3 | BoolLiteralContext, 4 | ColumnRefContext, 5 | IdentifierContext, 6 | NullLiteralContext, 7 | NumLiteralContext, 8 | PredicateContext, 9 | PrimaryExprCompareContext, 10 | SimpleExprLiteralContext, 11 | TableAliasContext, 12 | TableRefContext, 13 | TemporalLiteralContext, 14 | TextLiteralContext, 15 | QueryExpressionBodyContext, 16 | QueryExpressionContext, 17 | FunctionCallContext, 18 | PrimaryExprPredicateContext, 19 | WhereClauseContext, 20 | ValuesContext, 21 | FieldsContext, 22 | SelectAliasContext 23 | } from '../grammar/MySQLParser' 24 | import { MySQLParserListener } from '../grammar/MySQLParserListener' 25 | import { unquote } from '../lib/unquote' 26 | import { RuleContext } from 'antlr4ts' 27 | 28 | export enum ReferenceType { 29 | FunctionRef = 'FunctionRef', 30 | KeywordRef = 'KeywordRef', 31 | ColumnRef = 'ColumnRef', 32 | SchemaRef = 'SchemaRef', 33 | TableRef = 'TableRef', 34 | AliasRef = 'AliasRef', 35 | ValueRef = 'ValueRef' 36 | } 37 | 38 | export type Reference = 39 | | FunctionReference 40 | | KeywordReference 41 | | TableReference 42 | | ColumnReference 43 | | SchemaReference 44 | | AliasReference 45 | | ValueReference 46 | 47 | export interface KeywordReference { 48 | type: ReferenceType 49 | keyword: string 50 | start: number 51 | stop: number 52 | } 53 | 54 | export interface SchemaReference { 55 | type: ReferenceType 56 | schema: string 57 | start: number 58 | stop: number 59 | } 60 | 61 | export interface TableReference { 62 | type: ReferenceType 63 | schemaReference: SchemaReference | null 64 | aliasReference: AliasReference | null 65 | table: string 66 | start: number 67 | stop: number 68 | } 69 | 70 | export interface ColumnReference { 71 | type: ReferenceType 72 | context: ReferenceContext | null 73 | tableReference: TableReference | null 74 | aliasReference: AliasReference | null 75 | column: string 76 | start: number 77 | stop: number 78 | } 79 | 80 | export interface AliasReference { 81 | type: ReferenceType 82 | columnReference: ColumnReference | null 83 | tableReference: TableReference | null 84 | alias: string 85 | start: number 86 | stop: number 87 | } 88 | 89 | type DataType = 'string' | 'number' | 'boolean' | 'date' | 'null' 90 | 91 | export interface ValueReference { 92 | type: ReferenceType 93 | context: ReferenceContext | null 94 | columnReference: ColumnReference | null 95 | dataType: DataType 96 | value: string 97 | start: number 98 | stop: number 99 | } 100 | 101 | export interface FunctionReference { 102 | type: ReferenceType 103 | function: string 104 | start: number 105 | stop: number 106 | } 107 | 108 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 109 | function getParentRule(ctx: RuleContext, parentRule: any): any { 110 | if (ctx instanceof parentRule) { 111 | return ctx 112 | } 113 | 114 | const parent = ctx.parent 115 | if (parent) { 116 | return getParentRule(parent, parentRule) 117 | } 118 | 119 | return null 120 | } 121 | 122 | type ReferenceContext = 'valuesClause' | 'whereClause' | 'fieldsClause' 123 | 124 | function getReferenceContext(ctx: RuleContext): ReferenceContext | null { 125 | const whereClauseContext = getParentRule(ctx, WhereClauseContext) 126 | if (whereClauseContext) { 127 | return 'whereClause' 128 | } 129 | 130 | const valuesClauseContext = getParentRule(ctx, ValuesContext) 131 | if (valuesClauseContext) { 132 | return 'valuesClause' 133 | } 134 | 135 | const fieldsClauseContext = getParentRule(ctx, FieldsContext) 136 | if (fieldsClauseContext) { 137 | return 'fieldsClause' 138 | } 139 | 140 | return null 141 | } 142 | 143 | function getNestedColumnRef(ctx: RuleContext): ColumnRefContext | null { 144 | if (ctx instanceof ColumnRefContext) { 145 | return ctx 146 | } 147 | 148 | for (let i = 0; i < ctx.childCount; i++) { 149 | const child = ctx.getChild(i) 150 | if (child instanceof RuleContext) { 151 | return getNestedColumnRef(child) 152 | } 153 | } 154 | 155 | return null 156 | } 157 | 158 | function getDataType(predicate: PredicateContext): DataType | null { 159 | const literalContext = predicate 160 | .tryGetChild(0, BitExprContext) 161 | ?.tryGetChild(0, SimpleExprLiteralContext) 162 | ?.literal().children 163 | 164 | if (literalContext) { 165 | const literal = literalContext[0] 166 | switch (true) { 167 | case literal instanceof TextLiteralContext: 168 | return 'string' 169 | case literal instanceof NumLiteralContext: 170 | return 'number' 171 | case literal instanceof BoolLiteralContext: 172 | return 'boolean' 173 | case literal instanceof TemporalLiteralContext: 174 | return 'date' 175 | case literal instanceof NullLiteralContext: 176 | return 'null' 177 | } 178 | } 179 | 180 | return null 181 | } 182 | 183 | // Covers scenarios like top-level columns in WHERE clauses of JOINs + columns in ORDER BY 184 | function getTableRefContext(ctx: RuleContext): TableRefContext | null { 185 | const queryExpressionBody = getParentRule(ctx, QueryExpressionBodyContext) as QueryExpressionBodyContext 186 | const queryExpression = getParentRule(ctx, QueryExpressionContext) as QueryExpressionContext 187 | const context = queryExpressionBody ?? queryExpression?.queryExpressionBody() 188 | 189 | const tableRefContext = context 190 | ?.querySpecification() 191 | ?.fromClause() 192 | ?.tableReferenceList() 193 | ?.tableReference()[0] 194 | .tableFactor() 195 | ?.singleTable() 196 | ?.tableRef() 197 | 198 | return tableRefContext ?? null 199 | } 200 | 201 | function getTableReference(ctx: TableRefContext | null): TableReference | null { 202 | if (ctx === null) { 203 | return null 204 | } 205 | 206 | const qualifierIdentifier = ctx.qualifiedIdentifier() 207 | if (qualifierIdentifier) { 208 | const identifier = qualifierIdentifier.identifier() 209 | const first = unquote(identifier.text) 210 | const start = identifier.start.startIndex 211 | const stop = identifier.start.stopIndex 212 | 213 | const dotIdentifier = qualifierIdentifier.dotIdentifier() 214 | if (dotIdentifier) { 215 | return { 216 | type: ReferenceType.TableRef, 217 | table: unquote(dotIdentifier.identifier().text), 218 | aliasReference: null, 219 | schemaReference: { 220 | type: ReferenceType.SchemaRef, 221 | schema: first, 222 | start, 223 | stop 224 | }, 225 | start: dotIdentifier.identifier().start.startIndex, 226 | stop: dotIdentifier.identifier().start.stopIndex 227 | } 228 | } 229 | 230 | return { 231 | type: ReferenceType.TableRef, 232 | aliasReference: null, 233 | schemaReference: null, 234 | table: first, 235 | start: identifier.start.startIndex, 236 | stop: identifier.start.stopIndex 237 | } 238 | } 239 | 240 | const identifier = ctx.dotIdentifier()?.identifier() 241 | if (identifier) { 242 | return { 243 | type: ReferenceType.TableRef, 244 | aliasReference: null, 245 | schemaReference: null, 246 | table: unquote(identifier.text), 247 | start: identifier.start.startIndex, 248 | stop: identifier.start.stopIndex 249 | } 250 | } 251 | 252 | return null 253 | } 254 | 255 | function getParentTableReference(ctx: RuleContext): TableReference | null { 256 | const tableRefContext = getTableRefContext(ctx) 257 | 258 | if (!tableRefContext) { 259 | return null 260 | } 261 | 262 | return getTableReference(tableRefContext) 263 | } 264 | 265 | function getColumnReference(ctx: ColumnRefContext | null): ColumnReference | null { 266 | if (ctx === null) { 267 | return null 268 | } 269 | 270 | const context = ctx.fieldIdentifier() 271 | 272 | const qualifierIdentifier = context.qualifiedIdentifier() 273 | if (qualifierIdentifier) { 274 | const identifier = qualifierIdentifier.identifier() 275 | const first = unquote(identifier.text) 276 | const start = identifier.start.startIndex 277 | const stop = identifier.start.stopIndex 278 | 279 | const dotIdentifier = qualifierIdentifier.dotIdentifier() 280 | if (dotIdentifier) { 281 | return { 282 | type: ReferenceType.ColumnRef, 283 | context: getReferenceContext(ctx), 284 | column: unquote(dotIdentifier.identifier().text), 285 | aliasReference: null, 286 | tableReference: { 287 | type: ReferenceType.TableRef, 288 | aliasReference: null, 289 | schemaReference: null, 290 | table: first, 291 | start, 292 | stop 293 | }, 294 | start: dotIdentifier.identifier().start.startIndex, 295 | stop: dotIdentifier.identifier().start.stopIndex 296 | } 297 | } 298 | 299 | return { 300 | type: ReferenceType.ColumnRef, 301 | column: first, 302 | context: getReferenceContext(ctx), 303 | aliasReference: null, 304 | tableReference: getParentTableReference(context), 305 | start, 306 | stop 307 | } 308 | } 309 | 310 | const identifier = context.dotIdentifier()?.identifier() 311 | if (identifier) { 312 | return { 313 | type: ReferenceType.ColumnRef, 314 | column: unquote(identifier.text), 315 | context: getReferenceContext(ctx), 316 | aliasReference: null, 317 | tableReference: getParentTableReference(context), 318 | start: identifier.start.startIndex, 319 | stop: identifier.start.stopIndex 320 | } 321 | } 322 | 323 | return null 324 | } 325 | 326 | function getParentColumnRef(ctx: PredicateContext): ColumnRefContext | null { 327 | const parent = ctx.parent 328 | 329 | if (parent instanceof PrimaryExprCompareContext) { 330 | const columnRef = getNestedColumnRef(parent.boolPri()) 331 | return columnRef 332 | } 333 | 334 | if (parent instanceof PrimaryExprPredicateContext) { 335 | const columnRef = getNestedColumnRef(parent.predicate()) 336 | return columnRef 337 | } 338 | 339 | return null 340 | } 341 | 342 | export class ParserListener implements MySQLParserListener { 343 | functionReferences: FunctionReference[] 344 | keywordReferences: KeywordReference[] 345 | columnReferences: ColumnReference[] 346 | tableReferences: TableReference[] 347 | aliasReferences: AliasReference[] 348 | valueReferences: ValueReference[] 349 | 350 | constructor() { 351 | this.functionReferences = [] 352 | this.keywordReferences = [] 353 | this.columnReferences = [] 354 | this.tableReferences = [] 355 | this.aliasReferences = [] 356 | this.valueReferences = [] 357 | } 358 | 359 | exitColumnRef(ctx: ColumnRefContext): void { 360 | const reference = getColumnReference(ctx) 361 | if (!reference) { 362 | return 363 | } 364 | this.columnReferences.push(reference) 365 | } 366 | 367 | exitTableRef(ctx: TableRefContext): void { 368 | const reference = getTableReference(ctx) 369 | if (!reference) { 370 | return 371 | } 372 | this.tableReferences.push(reference) 373 | } 374 | 375 | exitTableAlias(ctx: TableAliasContext): void { 376 | if (!ctx.parent) { 377 | return 378 | } 379 | 380 | const siblingCount = ctx.parent.childCount 381 | if (siblingCount < 1) { 382 | return 383 | } 384 | 385 | const tableChild = ctx.parent.tryGetChild(0, TableRefContext) 386 | if (!tableChild) { 387 | return 388 | } 389 | 390 | const tableReference: TableReference = { 391 | type: ReferenceType.TableRef, 392 | aliasReference: null, 393 | schemaReference: null, 394 | table: unquote(tableChild.text), 395 | start: tableChild.start.startIndex, 396 | stop: tableChild.start.stopIndex 397 | } 398 | 399 | const aliasChild = ctx.tryGetChild(0, IdentifierContext) 400 | if (!aliasChild) { 401 | return 402 | } 403 | 404 | const aliasReference: AliasReference = { 405 | type: ReferenceType.AliasRef, 406 | columnReference: null, 407 | tableReference, 408 | alias: unquote(aliasChild.text), 409 | start: aliasChild.start.startIndex, 410 | stop: aliasChild.start.stopIndex 411 | } 412 | 413 | this.aliasReferences.push(aliasReference) 414 | } 415 | 416 | exitSelectAlias(ctx: SelectAliasContext): void { 417 | if (!ctx.parent) { 418 | return 419 | } 420 | 421 | const predicate = ctx.parent 422 | .getChild(0) 423 | .getChild(0) 424 | .getChild(0) as PredicateContext 425 | 426 | if (!predicate) { 427 | return 428 | } 429 | 430 | const columnRef = getParentColumnRef(predicate) 431 | 432 | const aliasChild = ctx.tryGetChild(0, IdentifierContext) 433 | if (!aliasChild) { 434 | return 435 | } 436 | 437 | const aliasReference: AliasReference = { 438 | type: ReferenceType.AliasRef, 439 | columnReference: getColumnReference(columnRef), 440 | tableReference: null, 441 | alias: unquote(aliasChild.text), 442 | start: aliasChild.start.startIndex, 443 | stop: aliasChild.start.stopIndex 444 | } 445 | 446 | this.aliasReferences.push(aliasReference) 447 | } 448 | 449 | exitPredicate(ctx: PredicateContext): void { 450 | const dataType = getDataType(ctx) 451 | if (!dataType) { 452 | return 453 | } 454 | 455 | const columnRef = getParentColumnRef(ctx) 456 | 457 | const valueReference: ValueReference = { 458 | type: ReferenceType.ValueRef, 459 | context: getReferenceContext(ctx), 460 | columnReference: getColumnReference(columnRef), 461 | dataType, 462 | value: unquote(ctx.text), 463 | start: ctx.start.startIndex, 464 | stop: ctx.start.stopIndex 465 | } 466 | 467 | this.valueReferences.push(valueReference) 468 | } 469 | 470 | exitFunctionCall(ctx: FunctionCallContext): void { 471 | const context = ctx.pureIdentifier() 472 | if (!context) { 473 | return 474 | } 475 | 476 | this.functionReferences.push({ 477 | type: ReferenceType.FunctionRef, 478 | function: unquote(context.text), 479 | start: context.start.startIndex, 480 | stop: context.start.stopIndex 481 | }) 482 | } 483 | 484 | exitSubquery(): void { 485 | // ... TODO: figure out how to reset for subqueries 486 | } 487 | 488 | exitEveryRule(): void { 489 | // noop 490 | } 491 | } 492 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es2019", 5 | "moduleResolution": "node", 6 | "esModuleInterop": true, 7 | "resolveJsonModule": true, 8 | "strict": true, 9 | "sourceMap": true, 10 | "incremental": true, 11 | "declaration": true, 12 | "outDir": "dist", 13 | "noUnusedLocals": true, 14 | "noUnusedParameters": true, 15 | "strictPropertyInitialization": true, 16 | "experimentalDecorators": true, 17 | "baseUrl": "./src", 18 | "paths": { 19 | "@/*": ["./*"] 20 | } 21 | }, 22 | "include": ["**/*.ts"], 23 | "exclude": ["node_modules", "dist", "examples", "scripts"] 24 | } 25 | --------------------------------------------------------------------------------