// Generated from dt-sql-parser/src/grammar/mysql/MySqlParser.g4 by ANTLR 4.13.1

// @ts-nocheck

import * as antlr from "antlr4ng";
import { Token } from "antlr4ng";

import { MySqlParserListener } from "./MySqlParserListener.js";
import { MySqlParserVisitor } from "./MySqlParserVisitor.js";

// for running tests with parameters, TODO: discuss strategy for typed parameters in CI
// eslint-disable-next-line no-unused-vars
type int = number;


import { SQLParserBase } from '../SQLParserBase';


export class MySqlParser extends SQLParserBase {
    public static readonly SPACE = 1;
    public static readonly SPEC_MYSQL_COMMENT = 2;
    public static readonly COMMENT_INPUT = 3;
    public static readonly LINE_COMMENT = 4;
    public static readonly KW_ACTIVE = 5;
    public static readonly KW_ADD = 6;
    public static readonly KW_ALL = 7;
    public static readonly KW_ALTER = 8;
    public static readonly KW_ALWAYS = 9;
    public static readonly KW_ANALYZE = 10;
    public static readonly KW_AND = 11;
    public static readonly KW_ARRAY = 12;
    public static readonly KW_AS = 13;
    public static readonly KW_ASC = 14;
    public static readonly KW_ATTRIBUTE = 15;
    public static readonly KW_BEFORE = 16;
    public static readonly KW_BETWEEN = 17;
    public static readonly KW_BOTH = 18;
    public static readonly KW_BUCKETS = 19;
    public static readonly KW_BY = 20;
    public static readonly KW_CALL = 21;
    public static readonly KW_CASCADE = 22;
    public static readonly KW_CASE = 23;
    public static readonly KW_CAST = 24;
    public static readonly KW_CHANGE = 25;
    public static readonly KW_CHARACTER = 26;
    public static readonly KW_CHECK = 27;
    public static readonly KW_COLLATE = 28;
    public static readonly KW_COLUMN = 29;
    public static readonly KW_CONDITION = 30;
    public static readonly KW_CONSTRAINT = 31;
    public static readonly KW_CONTINUE = 32;
    public static readonly KW_CONVERT = 33;
    public static readonly KW_CREATE = 34;
    public static readonly KW_CROSS = 35;
    public static readonly KW_CURRENT = 36;
    public static readonly KW_CURRENT_USER = 37;
    public static readonly KW_CURSOR = 38;
    public static readonly KW_DATABASE = 39;
    public static readonly KW_DATABASES = 40;
    public static readonly KW_DECLARE = 41;
    public static readonly KW_DEFAULT = 42;
    public static readonly KW_DELAYED = 43;
    public static readonly KW_DELETE = 44;
    public static readonly KW_DESC = 45;
    public static readonly KW_DESCRIBE = 46;
    public static readonly KW_DETERMINISTIC = 47;
    public static readonly KW_DIAGNOSTICS = 48;
    public static readonly KW_DISTINCT = 49;
    public static readonly KW_DISTINCTROW = 50;
    public static readonly KW_DROP = 51;
    public static readonly KW_EACH = 52;
    public static readonly KW_ELSE = 53;
    public static readonly KW_ELSEIF = 54;
    public static readonly KW_EMPTY = 55;
    public static readonly KW_ENCLOSED = 56;
    public static readonly KW_ENFORCED = 57;
    public static readonly KW_ESCAPED = 58;
    public static readonly KW_EXCEPT = 59;
    public static readonly KW_EXISTS = 60;
    public static readonly KW_EXIT = 61;
    public static readonly KW_EXPLAIN = 62;
    public static readonly KW_FALSE = 63;
    public static readonly KW_FETCH = 64;
    public static readonly KW_FOR = 65;
    public static readonly KW_FORCE = 66;
    public static readonly KW_FOREIGN = 67;
    public static readonly KW_FROM = 68;
    public static readonly KW_FULLTEXT = 69;
    public static readonly KW_GENERATE = 70;
    public static readonly KW_GENERATED = 71;
    public static readonly KW_GET = 72;
    public static readonly KW_GRANT = 73;
    public static readonly KW_GROUP = 74;
    public static readonly KW_HAVING = 75;
    public static readonly KW_HIGH_PRIORITY = 76;
    public static readonly KW_HISTOGRAM = 77;
    public static readonly KW_IF = 78;
    public static readonly KW_IGNORE = 79;
    public static readonly KW_IN = 80;
    public static readonly KW_INACTIVE = 81;
    public static readonly KW_INDEX = 82;
    public static readonly KW_INFILE = 83;
    public static readonly KW_INNER = 84;
    public static readonly KW_INOUT = 85;
    public static readonly KW_INSERT = 86;
    public static readonly KW_INTERVAL = 87;
    public static readonly KW_INTO = 88;
    public static readonly KW_IS = 89;
    public static readonly KW_ITERATE = 90;
    public static readonly KW_JOIN = 91;
    public static readonly KW_KEY = 92;
    public static readonly KW_KEYS = 93;
    public static readonly KW_KILL = 94;
    public static readonly KW_LATERAL = 95;
    public static readonly KW_LEADING = 96;
    public static readonly KW_LEAVE = 97;
    public static readonly KW_LEFT = 98;
    public static readonly KW_LIKE = 99;
    public static readonly KW_LIMIT = 100;
    public static readonly KW_LINEAR = 101;
    public static readonly KW_LINES = 102;
    public static readonly KW_LOAD = 103;
    public static readonly KW_LOCK = 104;
    public static readonly KW_LOCKED = 105;
    public static readonly KW_LOOP = 106;
    public static readonly KW_LOW_PRIORITY = 107;
    public static readonly KW_MASTER_BIND = 108;
    public static readonly KW_MASTER_SSL_VERIFY_SERVER_CERT = 109;
    public static readonly KW_MATCH = 110;
    public static readonly KW_MAXVALUE = 111;
    public static readonly KW_MODIFIES = 112;
    public static readonly KW_NATURAL = 113;
    public static readonly KW_NOT = 114;
    public static readonly KW_NO_WRITE_TO_BINLOG = 115;
    public static readonly KW_NULL_LITERAL = 116;
    public static readonly KW_NUMBER = 117;
    public static readonly KW_STREAM = 118;
    public static readonly KW_ON = 119;
    public static readonly KW_OPTIMIZE = 120;
    public static readonly KW_OPTION = 121;
    public static readonly KW_OPTIONAL = 122;
    public static readonly KW_OPTIONALLY = 123;
    public static readonly KW_OR = 124;
    public static readonly KW_ORDER = 125;
    public static readonly KW_OUT = 126;
    public static readonly KW_OUTER = 127;
    public static readonly KW_OUTFILE = 128;
    public static readonly KW_OVER = 129;
    public static readonly KW_PARTITION = 130;
    public static readonly KW_PRIMARY = 131;
    public static readonly KW_PROCEDURE = 132;
    public static readonly KW_PURGE = 133;
    public static readonly KW_RANGE = 134;
    public static readonly KW_READ = 135;
    public static readonly KW_READS = 136;
    public static readonly KW_REFERENCE = 137;
    public static readonly KW_REFERENCES = 138;
    public static readonly KW_REGEXP = 139;
    public static readonly KW_RELEASE = 140;
    public static readonly KW_RENAME = 141;
    public static readonly KW_REPEAT = 142;
    public static readonly KW_REPLACE = 143;
    public static readonly KW_REQUIRE = 144;
    public static readonly KW_RESIGNAL = 145;
    public static readonly KW_RESTRICT = 146;
    public static readonly KW_RETAIN = 147;
    public static readonly KW_RETURN = 148;
    public static readonly KW_REVOKE = 149;
    public static readonly KW_RIGHT = 150;
    public static readonly KW_RLIKE = 151;
    public static readonly KW_SCHEMA = 152;
    public static readonly KW_SCHEMAS = 153;
    public static readonly KW_SELECT = 154;
    public static readonly KW_SET = 155;
    public static readonly KW_SEPARATOR = 156;
    public static readonly KW_SHOW = 157;
    public static readonly KW_SIGNAL = 158;
    public static readonly KW_SKIP = 159;
    public static readonly KW_SKIP_QUERY_REWRITE = 160;
    public static readonly KW_SPATIAL = 161;
    public static readonly KW_SQL = 162;
    public static readonly KW_SQLEXCEPTION = 163;
    public static readonly KW_SQLSTATE = 164;
    public static readonly KW_SQLWARNING = 165;
    public static readonly KW_SQL_BIG_RESULT = 166;
    public static readonly KW_SQL_CALC_FOUND_ROWS = 167;
    public static readonly KW_SQL_SMALL_RESULT = 168;
    public static readonly KW_SSL = 169;
    public static readonly KW_STACKED = 170;
    public static readonly KW_STARTING = 171;
    public static readonly KW_STRAIGHT_JOIN = 172;
    public static readonly KW_TABLE = 173;
    public static readonly KW_TERMINATED = 174;
    public static readonly KW_THEN = 175;
    public static readonly KW_TO = 176;
    public static readonly KW_TRAILING = 177;
    public static readonly KW_TRIGGER = 178;
    public static readonly KW_TRUE = 179;
    public static readonly KW_UNDO = 180;
    public static readonly KW_UNION = 181;
    public static readonly KW_UNIQUE = 182;
    public static readonly KW_UNLOCK = 183;
    public static readonly KW_UNSIGNED = 184;
    public static readonly KW_UPDATE = 185;
    public static readonly KW_USAGE = 186;
    public static readonly KW_USE = 187;
    public static readonly KW_USING = 188;
    public static readonly KW_VALUES = 189;
    public static readonly KW_VCPU = 190;
    public static readonly KW_WHEN = 191;
    public static readonly KW_WHERE = 192;
    public static readonly KW_WHILE = 193;
    public static readonly KW_WITH = 194;
    public static readonly KW_WRITE = 195;
    public static readonly KW_XOR = 196;
    public static readonly KW_ZEROFILL = 197;
    public static readonly KW_TINYINT = 198;
    public static readonly KW_SMALLINT = 199;
    public static readonly KW_MEDIUMINT = 200;
    public static readonly KW_MIDDLEINT = 201;
    public static readonly KW_INT = 202;
    public static readonly KW_INT1 = 203;
    public static readonly KW_INT2 = 204;
    public static readonly KW_INT3 = 205;
    public static readonly KW_INT4 = 206;
    public static readonly KW_INT8 = 207;
    public static readonly KW_INTEGER = 208;
    public static readonly KW_BIGINT = 209;
    public static readonly KW_REAL = 210;
    public static readonly KW_DOUBLE = 211;
    public static readonly KW_PRECISION = 212;
    public static readonly KW_FLOAT = 213;
    public static readonly KW_FLOAT4 = 214;
    public static readonly KW_FLOAT8 = 215;
    public static readonly KW_DECIMAL = 216;
    public static readonly KW_DEC = 217;
    public static readonly KW_NUMERIC = 218;
    public static readonly KW_DATE = 219;
    public static readonly KW_TIME = 220;
    public static readonly KW_TIMESTAMP = 221;
    public static readonly KW_DATETIME = 222;
    public static readonly KW_YEAR = 223;
    public static readonly KW_CHAR = 224;
    public static readonly KW_VARCHAR = 225;
    public static readonly KW_NVARCHAR = 226;
    public static readonly KW_NATIONAL = 227;
    public static readonly KW_BINARY = 228;
    public static readonly KW_VARBINARY = 229;
    public static readonly KW_TINYBLOB = 230;
    public static readonly KW_BLOB = 231;
    public static readonly KW_MEDIUMBLOB = 232;
    public static readonly KW_LONG = 233;
    public static readonly KW_LONGBLOB = 234;
    public static readonly KW_TINYTEXT = 235;
    public static readonly KW_TEXT = 236;
    public static readonly KW_MEDIUMTEXT = 237;
    public static readonly KW_LONGTEXT = 238;
    public static readonly KW_ENUM = 239;
    public static readonly KW_VARYING = 240;
    public static readonly KW_SERIAL = 241;
    public static readonly KW_YEAR_MONTH = 242;
    public static readonly KW_DAY_HOUR = 243;
    public static readonly KW_DAY_MINUTE = 244;
    public static readonly KW_DAY_SECOND = 245;
    public static readonly KW_HOUR_MINUTE = 246;
    public static readonly KW_HOUR_SECOND = 247;
    public static readonly KW_MINUTE_SECOND = 248;
    public static readonly KW_SECOND_MICROSECOND = 249;
    public static readonly KW_MINUTE_MICROSECOND = 250;
    public static readonly KW_HOUR_MICROSECOND = 251;
    public static readonly KW_DAY_MICROSECOND = 252;
    public static readonly KW_JSON_TABLE = 253;
    public static readonly KW_JSON_VALUE = 254;
    public static readonly KW_NESTED = 255;
    public static readonly KW_ORDINALITY = 256;
    public static readonly KW_PATH = 257;
    public static readonly KW_AVG = 258;
    public static readonly KW_BIT_AND = 259;
    public static readonly KW_BIT_OR = 260;
    public static readonly KW_BIT_XOR = 261;
    public static readonly KW_COUNT = 262;
    public static readonly KW_CUME_DIST = 263;
    public static readonly KW_DENSE_RANK = 264;
    public static readonly KW_FIRST_VALUE = 265;
    public static readonly KW_GROUP_CONCAT = 266;
    public static readonly KW_LAG = 267;
    public static readonly KW_LAST_VALUE = 268;
    public static readonly KW_LEAD = 269;
    public static readonly KW_MAX = 270;
    public static readonly KW_MIN = 271;
    public static readonly KW_NTILE = 272;
    public static readonly KW_NTH_VALUE = 273;
    public static readonly KW_PERCENT_RANK = 274;
    public static readonly KW_RANK = 275;
    public static readonly KW_ROW_NUMBER = 276;
    public static readonly KW_STD = 277;
    public static readonly KW_STDDEV = 278;
    public static readonly KW_STDDEV_POP = 279;
    public static readonly KW_STDDEV_SAMP = 280;
    public static readonly KW_SUM = 281;
    public static readonly KW_VAR_POP = 282;
    public static readonly KW_VAR_SAMP = 283;
    public static readonly KW_VARIANCE = 284;
    public static readonly KW_CURRENT_DATE = 285;
    public static readonly KW_CURRENT_TIME = 286;
    public static readonly KW_CURRENT_TIMESTAMP = 287;
    public static readonly KW_LOCALTIME = 288;
    public static readonly KW_CURDATE = 289;
    public static readonly KW_CURTIME = 290;
    public static readonly KW_DATE_ADD = 291;
    public static readonly KW_DATE_SUB = 292;
    public static readonly KW_EXTRACT = 293;
    public static readonly KW_LOCALTIMESTAMP = 294;
    public static readonly KW_NOW = 295;
    public static readonly KW_POSITION = 296;
    public static readonly KW_SUBSTR = 297;
    public static readonly KW_SUBSTRING = 298;
    public static readonly KW_SYSDATE = 299;
    public static readonly KW_TRIM = 300;
    public static readonly KW_UTC_DATE = 301;
    public static readonly KW_UTC_TIME = 302;
    public static readonly KW_UTC_TIMESTAMP = 303;
    public static readonly KW_ACCOUNT = 304;
    public static readonly KW_ACTION = 305;
    public static readonly KW_AFTER = 306;
    public static readonly KW_AGGREGATE = 307;
    public static readonly KW_ALGORITHM = 308;
    public static readonly KW_ANY = 309;
    public static readonly KW_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = 310;
    public static readonly KW_AT = 311;
    public static readonly KW_AUTHORS = 312;
    public static readonly KW_AUTOCOMMIT = 313;
    public static readonly KW_AUTOEXTEND_SIZE = 314;
    public static readonly KW_AUTO_INCREMENT = 315;
    public static readonly KW_AVG_ROW_LENGTH = 316;
    public static readonly KW_BEGIN = 317;
    public static readonly KW_BINLOG = 318;
    public static readonly KW_BIT = 319;
    public static readonly KW_BLOCK = 320;
    public static readonly KW_BOOL = 321;
    public static readonly KW_BOOLEAN = 322;
    public static readonly KW_BTREE = 323;
    public static readonly KW_CACHE = 324;
    public static readonly KW_CASCADED = 325;
    public static readonly KW_CHAIN = 326;
    public static readonly KW_CHANGED = 327;
    public static readonly KW_CHANNEL = 328;
    public static readonly KW_CHECKSUM = 329;
    public static readonly KW_CHALLENGE_RESPONSE = 330;
    public static readonly KW_CIPHER = 331;
    public static readonly KW_CLASS_ORIGIN = 332;
    public static readonly KW_CLIENT = 333;
    public static readonly KW_CLOSE = 334;
    public static readonly KW_COALESCE = 335;
    public static readonly KW_CODE = 336;
    public static readonly KW_COLUMNS = 337;
    public static readonly KW_COLUMN_FORMAT = 338;
    public static readonly KW_COLUMN_NAME = 339;
    public static readonly KW_COMMENT = 340;
    public static readonly KW_COMMIT = 341;
    public static readonly KW_COMPACT = 342;
    public static readonly KW_COMPLETION = 343;
    public static readonly KW_COMPONENT = 344;
    public static readonly KW_COMPRESSED = 345;
    public static readonly KW_COMPRESSION = 346;
    public static readonly KW_CONCURRENT = 347;
    public static readonly KW_CONNECT = 348;
    public static readonly KW_CONNECTION = 349;
    public static readonly KW_CONSISTENT = 350;
    public static readonly KW_CONSTRAINT_CATALOG = 351;
    public static readonly KW_CONSTRAINT_SCHEMA = 352;
    public static readonly KW_CONSTRAINT_NAME = 353;
    public static readonly KW_CONTAINS = 354;
    public static readonly KW_CONTEXT = 355;
    public static readonly KW_CONTRIBUTORS = 356;
    public static readonly KW_COPY = 357;
    public static readonly KW_CPU = 358;
    public static readonly KW_CURSOR_NAME = 359;
    public static readonly KW_DATA = 360;
    public static readonly KW_DATAFILE = 361;
    public static readonly KW_DEALLOCATE = 362;
    public static readonly KW_DEFAULT_AUTH = 363;
    public static readonly KW_DEFINER = 364;
    public static readonly KW_DELAY_KEY_WRITE = 365;
    public static readonly KW_DES_KEY_FILE = 366;
    public static readonly KW_DIRECTORY = 367;
    public static readonly KW_DISABLE = 368;
    public static readonly KW_DISCARD = 369;
    public static readonly KW_DISK = 370;
    public static readonly KW_DO = 371;
    public static readonly KW_DUMPFILE = 372;
    public static readonly KW_DUPLICATE = 373;
    public static readonly KW_DYNAMIC = 374;
    public static readonly KW_ENABLE = 375;
    public static readonly KW_ENCRYPTION = 376;
    public static readonly KW_ENCRYPTION_KEY_ID = 377;
    public static readonly KW_END = 378;
    public static readonly KW_ENDS = 379;
    public static readonly KW_ENGINE = 380;
    public static readonly KW_ENGINES = 381;
    public static readonly KW_ERROR = 382;
    public static readonly KW_ERRORS = 383;
    public static readonly KW_ESCAPE = 384;
    public static readonly KW_EVENT = 385;
    public static readonly KW_EVENTS = 386;
    public static readonly KW_EVERY = 387;
    public static readonly KW_EXCHANGE = 388;
    public static readonly KW_EXCLUSIVE = 389;
    public static readonly KW_EXPIRE = 390;
    public static readonly KW_EXPORT = 391;
    public static readonly KW_EXTENDED = 392;
    public static readonly KW_EXTENT_SIZE = 393;
    public static readonly KW_FACTOR = 394;
    public static readonly KW_FAILED_LOGIN_ATTEMPTS = 395;
    public static readonly KW_FAST = 396;
    public static readonly KW_FAULTS = 397;
    public static readonly KW_FIELDS = 398;
    public static readonly KW_FILE_BLOCK_SIZE = 399;
    public static readonly KW_FILTER = 400;
    public static readonly KW_FINISH = 401;
    public static readonly KW_FIRST = 402;
    public static readonly KW_FIXED = 403;
    public static readonly KW_FLUSH = 404;
    public static readonly KW_FOLLOWING = 405;
    public static readonly KW_FOLLOWS = 406;
    public static readonly KW_FOUND = 407;
    public static readonly KW_FULL = 408;
    public static readonly KW_FUNCTION = 409;
    public static readonly KW_GENERAL = 410;
    public static readonly KW_GET_MASTER_PUBLIC_KEY = 411;
    public static readonly KW_GET_SOURCE_PUBLIC_KEY = 412;
    public static readonly KW_GLOBAL = 413;
    public static readonly KW_GRANTS = 414;
    public static readonly KW_GROUP_REPLICATION = 415;
    public static readonly KW_GTID_ONLY = 416;
    public static readonly KW_HANDLER = 417;
    public static readonly KW_HASH = 418;
    public static readonly KW_HELP = 419;
    public static readonly KW_HISTORY = 420;
    public static readonly KW_HOST = 421;
    public static readonly KW_HOSTS = 422;
    public static readonly KW_IDENTIFIED = 423;
    public static readonly KW_IGNORE_SERVER_IDS = 424;
    public static readonly KW_IMPORT = 425;
    public static readonly KW_INDEXES = 426;
    public static readonly KW_INITIAL = 427;
    public static readonly KW_INITIAL_SIZE = 428;
    public static readonly KW_INITIATE = 429;
    public static readonly KW_INPLACE = 430;
    public static readonly KW_INSERT_METHOD = 431;
    public static readonly KW_INSTALL = 432;
    public static readonly KW_INSTANCE = 433;
    public static readonly KW_INSTANT = 434;
    public static readonly KW_INVISIBLE = 435;
    public static readonly KW_INVOKER = 436;
    public static readonly KW_IO = 437;
    public static readonly KW_IO_THREAD = 438;
    public static readonly KW_IPC = 439;
    public static readonly KW_ISOLATION = 440;
    public static readonly KW_ISSUER = 441;
    public static readonly KW_JSON = 442;
    public static readonly KW_KEY_BLOCK_SIZE = 443;
    public static readonly KW_LANGUAGE = 444;
    public static readonly KW_LAST = 445;
    public static readonly KW_LEAVES = 446;
    public static readonly KW_LESS = 447;
    public static readonly KW_LEVEL = 448;
    public static readonly KW_LIST = 449;
    public static readonly KW_LOCAL = 450;
    public static readonly KW_LOGFILE = 451;
    public static readonly KW_LOGS = 452;
    public static readonly KW_MASTER = 453;
    public static readonly KW_MASTER_AUTO_POSITION = 454;
    public static readonly KW_MASTER_COMPRESSION_ALGORITHMS = 455;
    public static readonly KW_MASTER_CONNECT_RETRY = 456;
    public static readonly KW_MASTER_DELAY = 457;
    public static readonly KW_MASTER_HEARTBEAT_PERIOD = 458;
    public static readonly KW_MASTER_HOST = 459;
    public static readonly KW_MASTER_LOG_FILE = 460;
    public static readonly KW_MASTER_LOG_POS = 461;
    public static readonly KW_MASTER_PASSWORD = 462;
    public static readonly KW_MASTER_PORT = 463;
    public static readonly KW_MASTER_PUBLIC_KEY_PATH = 464;
    public static readonly KW_MASTER_RETRY_COUNT = 465;
    public static readonly KW_MASTER_SSL = 466;
    public static readonly KW_MASTER_SSL_CA = 467;
    public static readonly KW_MASTER_SSL_CAPATH = 468;
    public static readonly KW_MASTER_SSL_CERT = 469;
    public static readonly KW_MASTER_SSL_CIPHER = 470;
    public static readonly KW_MASTER_SSL_CRL = 471;
    public static readonly KW_MASTER_SSL_CRLPATH = 472;
    public static readonly KW_MASTER_SSL_KEY = 473;
    public static readonly KW_MASTER_TLS_CIPHERSUITES = 474;
    public static readonly KW_MASTER_TLS_VERSION = 475;
    public static readonly KW_MASTER_USER = 476;
    public static readonly KW_MASTER_ZSTD_COMPRESSION_LEVEL = 477;
    public static readonly KW_MAX_CONNECTIONS_PER_HOUR = 478;
    public static readonly KW_MAX_QUERIES_PER_HOUR = 479;
    public static readonly KW_MAX_ROWS = 480;
    public static readonly KW_MAX_SIZE = 481;
    public static readonly KW_MAX_UPDATES_PER_HOUR = 482;
    public static readonly KW_MAX_USER_CONNECTIONS = 483;
    public static readonly KW_MEDIUM = 484;
    public static readonly KW_MEMBER = 485;
    public static readonly KW_MERGE = 486;
    public static readonly KW_MESSAGE_TEXT = 487;
    public static readonly KW_MID = 488;
    public static readonly KW_MIGRATE = 489;
    public static readonly KW_MIN_ROWS = 490;
    public static readonly KW_MODE = 491;
    public static readonly KW_MODIFY = 492;
    public static readonly KW_MUTEX = 493;
    public static readonly KW_MYSQL = 494;
    public static readonly KW_MYSQL_ERRNO = 495;
    public static readonly KW_NAME = 496;
    public static readonly KW_NAMES = 497;
    public static readonly KW_NCHAR = 498;
    public static readonly KW_NETWORK_NAMESPACE = 499;
    public static readonly KW_NEVER = 500;
    public static readonly KW_NEXT = 501;
    public static readonly KW_NO = 502;
    public static readonly KW_NOWAIT = 503;
    public static readonly KW_NODEGROUP = 504;
    public static readonly KW_NONE = 505;
    public static readonly KW_ODBC = 506;
    public static readonly KW_OFF = 507;
    public static readonly KW_OFFLINE = 508;
    public static readonly KW_OFFSET = 509;
    public static readonly KW_OF = 510;
    public static readonly KW_OLD = 511;
    public static readonly KW_OLD_PASSWORD = 512;
    public static readonly KW_ONE = 513;
    public static readonly KW_ONLINE = 514;
    public static readonly KW_ONLY = 515;
    public static readonly KW_OPEN = 516;
    public static readonly KW_OPTIMIZER_COSTS = 517;
    public static readonly KW_OPTIONS = 518;
    public static readonly KW_OWNER = 519;
    public static readonly KW_PACK_KEYS = 520;
    public static readonly KW_PAGE = 521;
    public static readonly KW_PAGE_CHECKSUM = 522;
    public static readonly KW_PAGE_COMPRESSED = 523;
    public static readonly KW_PAGE_COMPRESSION_LEVEL = 524;
    public static readonly KW_PARSER = 525;
    public static readonly KW_PARTIAL = 526;
    public static readonly KW_PARTITIONING = 527;
    public static readonly KW_PARTITIONS = 528;
    public static readonly KW_PASSWORD = 529;
    public static readonly KW_PASSWORD_LOCK_TIME = 530;
    public static readonly KW_PERSIST = 531;
    public static readonly KW_PERSIST_ONLY = 532;
    public static readonly KW_PHASE = 533;
    public static readonly KW_PLUGIN = 534;
    public static readonly KW_PLUGIN_DIR = 535;
    public static readonly KW_PLUGINS = 536;
    public static readonly KW_PORT = 537;
    public static readonly KW_PRECEDES = 538;
    public static readonly KW_PRECEDING = 539;
    public static readonly KW_PREPARE = 540;
    public static readonly KW_PRESERVE = 541;
    public static readonly KW_PREV = 542;
    public static readonly KW_PRIVILEGE_CHECKS_USER = 543;
    public static readonly KW_PROCESSLIST = 544;
    public static readonly KW_PROFILE = 545;
    public static readonly KW_PROFILES = 546;
    public static readonly KW_PROXY = 547;
    public static readonly KW_QUERY = 548;
    public static readonly KW_QUICK = 549;
    public static readonly KW_REBUILD = 550;
    public static readonly KW_RECOVER = 551;
    public static readonly KW_RECURSIVE = 552;
    public static readonly KW_REDO_BUFFER_SIZE = 553;
    public static readonly KW_REDUNDANT = 554;
    public static readonly KW_REGISTRATION = 555;
    public static readonly KW_RELAY = 556;
    public static readonly KW_RELAY_LOG_FILE = 557;
    public static readonly KW_RELAY_LOG_POS = 558;
    public static readonly KW_RELAYLOG = 559;
    public static readonly KW_REMOVE = 560;
    public static readonly KW_REORGANIZE = 561;
    public static readonly KW_REPAIR = 562;
    public static readonly KW_REPLICA = 563;
    public static readonly KW_REPLICAS = 564;
    public static readonly KW_REPLICATE_DO_DB = 565;
    public static readonly KW_REPLICATE_DO_TABLE = 566;
    public static readonly KW_REPLICATE_IGNORE_DB = 567;
    public static readonly KW_REPLICATE_IGNORE_TABLE = 568;
    public static readonly KW_REPLICATE_REWRITE_DB = 569;
    public static readonly KW_REPLICATE_WILD_DO_TABLE = 570;
    public static readonly KW_REPLICATE_WILD_IGNORE_TABLE = 571;
    public static readonly KW_REPLICATION = 572;
    public static readonly KW_REQUIRE_ROW_FORMAT = 573;
    public static readonly KW_REQUIRE_TABLE_PRIMARY_KEY_CHECK = 574;
    public static readonly KW_RESET = 575;
    public static readonly KW_RESTART = 576;
    public static readonly KW_RESUME = 577;
    public static readonly KW_RETURNED_SQLSTATE = 578;
    public static readonly KW_RETURNING = 579;
    public static readonly KW_RETURNS = 580;
    public static readonly KW_REUSE = 581;
    public static readonly KW_ROLE = 582;
    public static readonly KW_ROLLBACK = 583;
    public static readonly KW_ROLLUP = 584;
    public static readonly KW_ROTATE = 585;
    public static readonly KW_ROW = 586;
    public static readonly KW_ROWS = 587;
    public static readonly KW_ROW_FORMAT = 588;
    public static readonly KW_SAVEPOINT = 589;
    public static readonly KW_SCHEDULE = 590;
    public static readonly KW_SECURITY = 591;
    public static readonly KW_SERVER = 592;
    public static readonly KW_SESSION = 593;
    public static readonly KW_SHARE = 594;
    public static readonly KW_SHARED = 595;
    public static readonly KW_SIGNED = 596;
    public static readonly KW_SIMPLE = 597;
    public static readonly KW_SLAVE = 598;
    public static readonly KW_SLOW = 599;
    public static readonly KW_SNAPSHOT = 600;
    public static readonly KW_SOCKET = 601;
    public static readonly KW_SOME = 602;
    public static readonly KW_SONAME = 603;
    public static readonly KW_SOUNDS = 604;
    public static readonly KW_SOURCE = 605;
    public static readonly KW_SOURCE_BIND = 606;
    public static readonly KW_SOURCE_HOST = 607;
    public static readonly KW_SOURCE_USER = 608;
    public static readonly KW_SOURCE_PASSWORD = 609;
    public static readonly KW_SOURCE_PORT = 610;
    public static readonly KW_SOURCE_LOG_FILE = 611;
    public static readonly KW_SOURCE_LOG_POS = 612;
    public static readonly KW_SOURCE_AUTO_POSITION = 613;
    public static readonly KW_SOURCE_HEARTBEAT_PERIOD = 614;
    public static readonly KW_SOURCE_CONNECT_RETRY = 615;
    public static readonly KW_SOURCE_RETRY_COUNT = 616;
    public static readonly KW_SOURCE_CONNECTION_AUTO_FAILOVER = 617;
    public static readonly KW_SOURCE_DELAY = 618;
    public static readonly KW_SOURCE_COMPRESSION_ALGORITHMS = 619;
    public static readonly KW_SOURCE_ZSTD_COMPRESSION_LEVEL = 620;
    public static readonly KW_SOURCE_SSL = 621;
    public static readonly KW_SOURCE_SSL_CA = 622;
    public static readonly KW_SOURCE_SSL_CAPATH = 623;
    public static readonly KW_SOURCE_SSL_CERT = 624;
    public static readonly KW_SOURCE_SSL_CRL = 625;
    public static readonly KW_SOURCE_SSL_CRLPATH = 626;
    public static readonly KW_SOURCE_SSL_KEY = 627;
    public static readonly KW_SOURCE_SSL_CIPHER = 628;
    public static readonly KW_SOURCE_SSL_VERIFY_SERVER_CERT = 629;
    public static readonly KW_SOURCE_TLS_VERSION = 630;
    public static readonly KW_SOURCE_TLS_CIPHERSUITES = 631;
    public static readonly KW_SOURCE_PUBLIC_KEY_PATH = 632;
    public static readonly KW_SQL_AFTER_GTIDS = 633;
    public static readonly KW_SQL_AFTER_MTS_GAPS = 634;
    public static readonly KW_SQL_BEFORE_GTIDS = 635;
    public static readonly KW_SQL_BUFFER_RESULT = 636;
    public static readonly KW_SQL_CACHE = 637;
    public static readonly KW_SQL_NO_CACHE = 638;
    public static readonly KW_SQL_THREAD = 639;
    public static readonly KW_START = 640;
    public static readonly KW_STARTS = 641;
    public static readonly KW_STATS_AUTO_RECALC = 642;
    public static readonly KW_STATS_PERSISTENT = 643;
    public static readonly KW_STATS_SAMPLE_PAGES = 644;
    public static readonly KW_STATUS = 645;
    public static readonly KW_STOP = 646;
    public static readonly KW_STORAGE = 647;
    public static readonly KW_STORED = 648;
    public static readonly KW_STRING = 649;
    public static readonly KW_SUBCLASS_ORIGIN = 650;
    public static readonly KW_SUBJECT = 651;
    public static readonly KW_SUBPARTITION = 652;
    public static readonly KW_SUBPARTITIONS = 653;
    public static readonly KW_SUSPEND = 654;
    public static readonly KW_SWAPS = 655;
    public static readonly KW_SWITCHES = 656;
    public static readonly KW_TABLE_NAME = 657;
    public static readonly KW_TABLESPACE = 658;
    public static readonly KW_TABLE_TYPE = 659;
    public static readonly KW_TEMPORARY = 660;
    public static readonly KW_TEMPTABLE = 661;
    public static readonly KW_THAN = 662;
    public static readonly KW_TRADITIONAL = 663;
    public static readonly KW_TRANSACTION = 664;
    public static readonly KW_TRANSACTIONAL = 665;
    public static readonly KW_TREE = 666;
    public static readonly KW_TRIGGERS = 667;
    public static readonly KW_TRUNCATE = 668;
    public static readonly KW_UNBOUNDED = 669;
    public static readonly KW_UNDEFINED = 670;
    public static readonly KW_UNDOFILE = 671;
    public static readonly KW_UNDO_BUFFER_SIZE = 672;
    public static readonly KW_UNINSTALL = 673;
    public static readonly KW_UNKNOWN = 674;
    public static readonly KW_UNREGISTER = 675;
    public static readonly KW_UNTIL = 676;
    public static readonly KW_UPGRADE = 677;
    public static readonly KW_USER = 678;
    public static readonly KW_USE_FRM = 679;
    public static readonly KW_USER_RESOURCES = 680;
    public static readonly KW_VALIDATION = 681;
    public static readonly KW_VALUE = 682;
    public static readonly KW_VARIABLES = 683;
    public static readonly KW_VIEW = 684;
    public static readonly KW_VIRTUAL = 685;
    public static readonly KW_VISIBLE = 686;
    public static readonly KW_WAIT = 687;
    public static readonly KW_WARNINGS = 688;
    public static readonly KW_WINDOW = 689;
    public static readonly KW_WITHOUT = 690;
    public static readonly KW_WORK = 691;
    public static readonly KW_WRAPPER = 692;
    public static readonly KW_X509 = 693;
    public static readonly KW_XA = 694;
    public static readonly KW_XML = 695;
    public static readonly KW_QUARTER = 696;
    public static readonly KW_MONTH = 697;
    public static readonly KW_DAY = 698;
    public static readonly KW_HOUR = 699;
    public static readonly KW_MINUTE = 700;
    public static readonly KW_WEEK = 701;
    public static readonly KW_SECOND = 702;
    public static readonly KW_MICROSECOND = 703;
    public static readonly KW_ADMIN = 704;
    public static readonly KW_APPLICATION_PASSWORD_ADMIN = 705;
    public static readonly KW_AUDIT_ABORT_EXEMPT = 706;
    public static readonly KW_AUDIT_ADMIN = 707;
    public static readonly KW_AUTHENTICATION = 708;
    public static readonly KW_AUTHENTICATION_POLICY_ADMIN = 709;
    public static readonly KW_BACKUP_ADMIN = 710;
    public static readonly KW_BINLOG_ADMIN = 711;
    public static readonly KW_BINLOG_ENCRYPTION_ADMIN = 712;
    public static readonly KW_CLONE = 713;
    public static readonly KW_CLONE_ADMIN = 714;
    public static readonly KW_CONNECTION_ADMIN = 715;
    public static readonly KW_ENCRYPTION_KEY_ADMIN = 716;
    public static readonly KW_EXECUTE = 717;
    public static readonly KW_FILE = 718;
    public static readonly KW_FIREWALL_ADMIN = 719;
    public static readonly KW_FIREWALL_EXEMPT = 720;
    public static readonly KW_FIREWALL_USER = 721;
    public static readonly KW_FLUSH_OPTIMIZER_COSTS = 722;
    public static readonly KW_FLUSH_STATUS = 723;
    public static readonly KW_FLUSH_TABLES = 724;
    public static readonly KW_FLUSH_USER_RESOURCES = 725;
    public static readonly KW_GROUP_REPLICATION_ADMIN = 726;
    public static readonly KW_INNODB_REDO_LOG_ARCHIVE = 727;
    public static readonly KW_INNODB_REDO_LOG_ENABLE = 728;
    public static readonly KW_INVOKE = 729;
    public static readonly KW_LAMBDA = 730;
    public static readonly KW_NDB_STORED_USER = 731;
    public static readonly KW_PASSWORDLESS_USER_ADMIN = 732;
    public static readonly KW_PERSIST_RO_VARIABLES_ADMIN = 733;
    public static readonly KW_PRIVILEGES = 734;
    public static readonly KW_PROCESS = 735;
    public static readonly KW_RELOAD = 736;
    public static readonly KW_REPLICATION_APPLIER = 737;
    public static readonly KW_REPLICATION_SLAVE_ADMIN = 738;
    public static readonly KW_RESOURCE = 739;
    public static readonly KW_RESOURCE_GROUP_ADMIN = 740;
    public static readonly KW_RESOURCE_GROUP_USER = 741;
    public static readonly KW_ROLE_ADMIN = 742;
    public static readonly KW_ROUTINE = 743;
    public static readonly KW_S3 = 744;
    public static readonly KW_SERVICE_CONNECTION_ADMIN = 745;
    public static readonly KW_SESSION_VARIABLES_ADMIN = 746;
    public static readonly KW_SET_USER_ID = 747;
    public static readonly KW_SHOW_ROUTINE = 748;
    public static readonly KW_SHUTDOWN = 749;
    public static readonly KW_SUPER = 750;
    public static readonly KW_SYSTEM_VARIABLES_ADMIN = 751;
    public static readonly KW_TABLES = 752;
    public static readonly KW_TABLE_ENCRYPTION_ADMIN = 753;
    public static readonly KW_VERSION_TOKEN_ADMIN = 754;
    public static readonly KW_XA_RECOVER_ADMIN = 755;
    public static readonly KW_ARMSCII8 = 756;
    public static readonly KW_ASCII = 757;
    public static readonly KW_BIG5 = 758;
    public static readonly KW_CP1250 = 759;
    public static readonly KW_CP1251 = 760;
    public static readonly KW_CP1256 = 761;
    public static readonly KW_CP1257 = 762;
    public static readonly KW_CP850 = 763;
    public static readonly KW_CP852 = 764;
    public static readonly KW_CP866 = 765;
    public static readonly KW_CP932 = 766;
    public static readonly KW_DEC8 = 767;
    public static readonly KW_EUCJPMS = 768;
    public static readonly KW_EUCKR = 769;
    public static readonly KW_GB18030 = 770;
    public static readonly KW_GB2312 = 771;
    public static readonly KW_GBK = 772;
    public static readonly KW_GEOSTD8 = 773;
    public static readonly KW_GREEK = 774;
    public static readonly KW_HEBREW = 775;
    public static readonly KW_HP8 = 776;
    public static readonly KW_KEYBCS2 = 777;
    public static readonly KW_KOI8R = 778;
    public static readonly KW_KOI8U = 779;
    public static readonly KW_LATIN1 = 780;
    public static readonly KW_LATIN2 = 781;
    public static readonly KW_LATIN5 = 782;
    public static readonly KW_LATIN7 = 783;
    public static readonly KW_MACCE = 784;
    public static readonly KW_MACROMAN = 785;
    public static readonly KW_SJIS = 786;
    public static readonly KW_SWE7 = 787;
    public static readonly KW_TIS620 = 788;
    public static readonly KW_UCS2 = 789;
    public static readonly KW_UJIS = 790;
    public static readonly KW_UTF16 = 791;
    public static readonly KW_UTF16LE = 792;
    public static readonly KW_UTF32 = 793;
    public static readonly KW_UTF8 = 794;
    public static readonly KW_UTF8MB3 = 795;
    public static readonly KW_UTF8MB4 = 796;
    public static readonly KW_ARCHIVE = 797;
    public static readonly KW_BLACKHOLE = 798;
    public static readonly KW_CSV = 799;
    public static readonly KW_FEDERATED = 800;
    public static readonly KW_INNODB = 801;
    public static readonly KW_MEMORY = 802;
    public static readonly KW_MRG_MYISAM = 803;
    public static readonly KW_MYISAM = 804;
    public static readonly KW_NDB = 805;
    public static readonly KW_NDBCLUSTER = 806;
    public static readonly KW_PERFORMANCE_SCHEMA = 807;
    public static readonly KW_TOKUDB = 808;
    public static readonly KW_REPEATABLE = 809;
    public static readonly KW_COMMITTED = 810;
    public static readonly KW_UNCOMMITTED = 811;
    public static readonly KW_SERIALIZABLE = 812;
    public static readonly KW_GEOMETRYCOLLECTION = 813;
    public static readonly KW_GEOMCOLLECTION = 814;
    public static readonly KW_GEOMETRY = 815;
    public static readonly KW_LINESTRING = 816;
    public static readonly KW_MULTILINESTRING = 817;
    public static readonly KW_MULTIPOINT = 818;
    public static readonly KW_MULTIPOLYGON = 819;
    public static readonly KW_POINT = 820;
    public static readonly KW_POLYGON = 821;
    public static readonly KW_CATALOG_NAME = 822;
    public static readonly KW_CHARSET = 823;
    public static readonly KW_COLLATION = 824;
    public static readonly KW_ENGINE_ATTRIBUTE = 825;
    public static readonly KW_FORMAT = 826;
    public static readonly KW_GET_FORMAT = 827;
    public static readonly KW_INTERSECT = 828;
    public static readonly KW_RANDOM = 829;
    public static readonly KW_REVERSE = 830;
    public static readonly KW_ROW_COUNT = 831;
    public static readonly KW_SCHEMA_NAME = 832;
    public static readonly KW_SECONDARY_ENGINE_ATTRIBUTE = 833;
    public static readonly KW_SRID = 834;
    public static readonly KW_SYSTEM = 835;
    public static readonly KW_SYSTEM_USER = 836;
    public static readonly KW_THREAD_PRIORITY = 837;
    public static readonly KW_TP_CONNECTION_ADMIN = 838;
    public static readonly KW_TYPE = 839;
    public static readonly KW_WEIGHT_STRING = 840;
    public static readonly VAR_ASSIGN = 841;
    public static readonly PLUS_ASSIGN = 842;
    public static readonly MINUS_ASSIGN = 843;
    public static readonly MULT_ASSIGN = 844;
    public static readonly DIV_ASSIGN = 845;
    public static readonly MOD_ASSIGN = 846;
    public static readonly AND_ASSIGN = 847;
    public static readonly XOR_ASSIGN = 848;
    public static readonly OR_ASSIGN = 849;
    public static readonly STAR = 850;
    public static readonly DIVIDE = 851;
    public static readonly MODULE = 852;
    public static readonly PLUS = 853;
    public static readonly MINUS = 854;
    public static readonly DIV = 855;
    public static readonly MOD = 856;
    public static readonly EQUAL_SYMBOL = 857;
    public static readonly GREATER_SYMBOL = 858;
    public static readonly LESS_SYMBOL = 859;
    public static readonly EXCLAMATION_SYMBOL = 860;
    public static readonly BIT_NOT_OP = 861;
    public static readonly BIT_OR_OP = 862;
    public static readonly BIT_AND_OP = 863;
    public static readonly BIT_XOR_OP = 864;
    public static readonly DOT = 865;
    public static readonly LR_BRACKET = 866;
    public static readonly RR_BRACKET = 867;
    public static readonly COMMA = 868;
    public static readonly SEMI = 869;
    public static readonly AT_SIGN = 870;
    public static readonly ZERO_DECIMAL = 871;
    public static readonly ONE_DECIMAL = 872;
    public static readonly TWO_DECIMAL = 873;
    public static readonly THREE_DECIMAL = 874;
    public static readonly SINGLE_QUOTE_SYMB = 875;
    public static readonly DOUBLE_QUOTE_SYMB = 876;
    public static readonly REVERSE_QUOTE_SYMB = 877;
    public static readonly COLON_SYMB = 878;
    public static readonly CHARSET_REVERSE_QOUTE_STRING = 879;
    public static readonly FILESIZE_LITERAL = 880;
    public static readonly START_NATIONAL_STRING_LITERAL = 881;
    public static readonly STRING_LITERAL = 882;
    public static readonly DECIMAL_LITERAL = 883;
    public static readonly HEXADECIMAL_LITERAL = 884;
    public static readonly REAL_LITERAL = 885;
    public static readonly NULL_SPEC_LITERAL = 886;
    public static readonly BIT_STRING = 887;
    public static readonly STRING_CHARSET_NAME = 888;
    public static readonly ID = 889;
    public static readonly REVERSE_QUOTE_ID = 890;
    public static readonly HOST_IP_ADDRESS = 891;
    public static readonly LOCAL_ID = 892;
    public static readonly GLOBAL_ID = 893;
    public static readonly PERSIST_ID = 894;
    public static readonly ERROR_RECONGNIGION = 895;
    public static readonly RULE_program = 0;
    public static readonly RULE_singleStatement = 1;
    public static readonly RULE_sqlStatement = 2;
    public static readonly RULE_emptyStatement_ = 3;
    public static readonly RULE_ddlStatement = 4;
    public static readonly RULE_dmlStatement = 5;
    public static readonly RULE_transactionStatement = 6;
    public static readonly RULE_replicationStatement = 7;
    public static readonly RULE_preparedStatement = 8;
    public static readonly RULE_compoundStatement = 9;
    public static readonly RULE_administrationStatement = 10;
    public static readonly RULE_utilityStatement = 11;
    public static readonly RULE_createDatabase = 12;
    public static readonly RULE_createEvent = 13;
    public static readonly RULE_createIndex = 14;
    public static readonly RULE_createLogfileGroup = 15;
    public static readonly RULE_createProcedure = 16;
    public static readonly RULE_createRole = 17;
    public static readonly RULE_createServer = 18;
    public static readonly RULE_createTable = 19;
    public static readonly RULE_createTablespaceInnodb = 20;
    public static readonly RULE_createTablespaceNdb = 21;
    public static readonly RULE_createTrigger = 22;
    public static readonly RULE_withClause = 23;
    public static readonly RULE_commonTableExpressions = 24;
    public static readonly RULE_createView = 25;
    public static readonly RULE_createDatabaseOption = 26;
    public static readonly RULE_charSet = 27;
    public static readonly RULE_currentUserExpression = 28;
    public static readonly RULE_ownerStatement = 29;
    public static readonly RULE_scheduleExpression = 30;
    public static readonly RULE_timestampValue = 31;
    public static readonly RULE_intervalExpr = 32;
    public static readonly RULE_intervalType = 33;
    public static readonly RULE_enableType = 34;
    public static readonly RULE_indexType = 35;
    public static readonly RULE_indexOption = 36;
    public static readonly RULE_procedureParameter = 37;
    public static readonly RULE_routineOption = 38;
    public static readonly RULE_serverOption = 39;
    public static readonly RULE_createDefinitions = 40;
    public static readonly RULE_createDefinition = 41;
    public static readonly RULE_checkConstraintDefinition = 42;
    public static readonly RULE_constraintSymbol = 43;
    public static readonly RULE_columnDefinition = 44;
    public static readonly RULE_columnConstraint = 45;
    public static readonly RULE_referenceDefinition = 46;
    public static readonly RULE_referenceAction = 47;
    public static readonly RULE_referenceControlType = 48;
    public static readonly RULE_tableOption = 49;
    public static readonly RULE_tableType = 50;
    public static readonly RULE_tablespaceStorage = 51;
    public static readonly RULE_partitionDefinitions = 52;
    public static readonly RULE_partitionFunctionDefinition = 53;
    public static readonly RULE_subpartitionFunctionDefinition = 54;
    public static readonly RULE_partitionDefinition = 55;
    public static readonly RULE_partitionDefinerAtom = 56;
    public static readonly RULE_partitionDefinerVector = 57;
    public static readonly RULE_subpartitionDefinition = 58;
    public static readonly RULE_partitionOption = 59;
    public static readonly RULE_alterDatabase = 60;
    public static readonly RULE_alterEvent = 61;
    public static readonly RULE_alterFunction = 62;
    public static readonly RULE_alterInstance = 63;
    public static readonly RULE_alterLogfileGroup = 64;
    public static readonly RULE_alterProcedure = 65;
    public static readonly RULE_alterServer = 66;
    public static readonly RULE_alterTable = 67;
    public static readonly RULE_alterTablespace = 68;
    public static readonly RULE_alterView = 69;
    public static readonly RULE_alterOption = 70;
    public static readonly RULE_alterPartitionSpecification = 71;
    public static readonly RULE_dropDatabase = 72;
    public static readonly RULE_dropEvent = 73;
    public static readonly RULE_dropIndex = 74;
    public static readonly RULE_dropLogfileGroup = 75;
    public static readonly RULE_dropProcedure = 76;
    public static readonly RULE_dropFunction = 77;
    public static readonly RULE_dropServer = 78;
    public static readonly RULE_dropSpatial = 79;
    public static readonly RULE_dropTable = 80;
    public static readonly RULE_dropTablespace = 81;
    public static readonly RULE_dropTrigger = 82;
    public static readonly RULE_dropView = 83;
    public static readonly RULE_dropRole = 84;
    public static readonly RULE_setRole = 85;
    public static readonly RULE_renameTable = 86;
    public static readonly RULE_renameTableClause = 87;
    public static readonly RULE_truncateTable = 88;
    public static readonly RULE_callStatement = 89;
    public static readonly RULE_deleteStatement = 90;
    public static readonly RULE_doStatement = 91;
    public static readonly RULE_handlerStatement = 92;
    public static readonly RULE_insertStatement = 93;
    public static readonly RULE_asRowAlias = 94;
    public static readonly RULE_selectOrTableOrValues = 95;
    public static readonly RULE_interSectStatement = 96;
    public static readonly RULE_interSectQuery = 97;
    public static readonly RULE_loadDataStatement = 98;
    public static readonly RULE_loadXmlStatement = 99;
    public static readonly RULE_parenthesizedQuery = 100;
    public static readonly RULE_replaceStatement = 101;
    public static readonly RULE_selectStatement = 102;
    public static readonly RULE_setOperations = 103;
    public static readonly RULE_queryExpressionBody = 104;
    public static readonly RULE_queryItem = 105;
    public static readonly RULE_queryPrimary = 106;
    public static readonly RULE_updateStatement = 107;
    public static readonly RULE_valuesStatement = 108;
    public static readonly RULE_parenthesizedQueryExpression = 109;
    public static readonly RULE_queryBlock = 110;
    public static readonly RULE_replaceStatementValuesOrSelectOrTable = 111;
    public static readonly RULE_rowValuesList = 112;
    public static readonly RULE_setAssignmentList = 113;
    public static readonly RULE_updatedElement = 114;
    public static readonly RULE_assignmentField = 115;
    public static readonly RULE_lockClause = 116;
    public static readonly RULE_singleDeleteStatement = 117;
    public static readonly RULE_multipleDeleteStatement = 118;
    public static readonly RULE_handlerOpenStatement = 119;
    public static readonly RULE_handlerReadIndexStatement = 120;
    public static readonly RULE_handlerReadStatement = 121;
    public static readonly RULE_handlerCloseStatement = 122;
    public static readonly RULE_importTableStatement = 123;
    public static readonly RULE_singleUpdateStatement = 124;
    public static readonly RULE_multipleUpdateStatement = 125;
    public static readonly RULE_orderByClause = 126;
    public static readonly RULE_orderByExpression = 127;
    public static readonly RULE_tableSources = 128;
    public static readonly RULE_tableSource = 129;
    public static readonly RULE_tableSourceItem = 130;
    public static readonly RULE_fullColumnNames = 131;
    public static readonly RULE_indexHint = 132;
    public static readonly RULE_indexHintType = 133;
    public static readonly RULE_joinPart = 134;
    public static readonly RULE_joinSpec = 135;
    public static readonly RULE_queryExpression = 136;
    public static readonly RULE_querySpecification = 137;
    public static readonly RULE_unionStatement = 138;
    public static readonly RULE_lateralStatement = 139;
    public static readonly RULE_jsonTable = 140;
    public static readonly RULE_jsonColumnList = 141;
    public static readonly RULE_jsonColumn = 142;
    public static readonly RULE_jsonOnEmpty = 143;
    public static readonly RULE_jsonOnError = 144;
    public static readonly RULE_selectSpec = 145;
    public static readonly RULE_selectElements = 146;
    public static readonly RULE_selectElement = 147;
    public static readonly RULE_intoClause = 148;
    public static readonly RULE_selectFieldsInto = 149;
    public static readonly RULE_selectLinesInto = 150;
    public static readonly RULE_fromClause = 151;
    public static readonly RULE_groupByClause = 152;
    public static readonly RULE_havingClause = 153;
    public static readonly RULE_windowClause = 154;
    public static readonly RULE_groupByItem = 155;
    public static readonly RULE_limitClause = 156;
    public static readonly RULE_limitClauseAtom = 157;
    public static readonly RULE_startTransaction = 158;
    public static readonly RULE_beginWork = 159;
    public static readonly RULE_commitWork = 160;
    public static readonly RULE_rollbackWork = 161;
    public static readonly RULE_savepointStatement = 162;
    public static readonly RULE_rollbackStatement = 163;
    public static readonly RULE_releaseStatement = 164;
    public static readonly RULE_lockTables = 165;
    public static readonly RULE_unlockTables = 166;
    public static readonly RULE_setAutocommitStatement = 167;
    public static readonly RULE_setTransactionStatement = 168;
    public static readonly RULE_transactionMode = 169;
    public static readonly RULE_lockTableElement = 170;
    public static readonly RULE_lockAction = 171;
    public static readonly RULE_transactionOption = 172;
    public static readonly RULE_transactionLevel = 173;
    public static readonly RULE_changeMaster = 174;
    public static readonly RULE_changeReplicationFilter = 175;
    public static readonly RULE_changeReplicationSource = 176;
    public static readonly RULE_purgeBinaryLogs = 177;
    public static readonly RULE_startSlaveOrReplica = 178;
    public static readonly RULE_stopSlaveOrReplica = 179;
    public static readonly RULE_startGroupReplication = 180;
    public static readonly RULE_stopGroupReplication = 181;
    public static readonly RULE_masterOption = 182;
    public static readonly RULE_stringMasterOption = 183;
    public static readonly RULE_decimalMasterOption = 184;
    public static readonly RULE_boolMasterOption = 185;
    public static readonly RULE_v8NewMasterOption = 186;
    public static readonly RULE_replicationSourceOption = 187;
    public static readonly RULE_stringSourceOption = 188;
    public static readonly RULE_decimalSourceOption = 189;
    public static readonly RULE_boolSourceOption = 190;
    public static readonly RULE_otherSourceOption = 191;
    public static readonly RULE_channelOption = 192;
    public static readonly RULE_replicationFilter = 193;
    public static readonly RULE_tablePair = 194;
    public static readonly RULE_threadType = 195;
    public static readonly RULE_untilOption = 196;
    public static readonly RULE_connectionOptions = 197;
    public static readonly RULE_gtuidSet = 198;
    public static readonly RULE_xaStartTransaction = 199;
    public static readonly RULE_xaEndTransaction = 200;
    public static readonly RULE_xaPrepareStatement = 201;
    public static readonly RULE_xaCommitWork = 202;
    public static readonly RULE_xaRollbackWork = 203;
    public static readonly RULE_xaRecoverWork = 204;
    public static readonly RULE_prepareStatement = 205;
    public static readonly RULE_executeStatement = 206;
    public static readonly RULE_deallocatePrepare = 207;
    public static readonly RULE_routineBody = 208;
    public static readonly RULE_blockStatement = 209;
    public static readonly RULE_caseStatement = 210;
    public static readonly RULE_ifStatement = 211;
    public static readonly RULE_iterateStatement = 212;
    public static readonly RULE_leaveStatement = 213;
    public static readonly RULE_loopStatement = 214;
    public static readonly RULE_repeatStatement = 215;
    public static readonly RULE_returnStatement = 216;
    public static readonly RULE_whileStatement = 217;
    public static readonly RULE_cursorStatement = 218;
    public static readonly RULE_declareVariable = 219;
    public static readonly RULE_declareCondition = 220;
    public static readonly RULE_declareCursor = 221;
    public static readonly RULE_declareHandler = 222;
    public static readonly RULE_handlerConditionValue = 223;
    public static readonly RULE_procedureSqlStatement = 224;
    public static readonly RULE_caseAlternative = 225;
    public static readonly RULE_elifAlternative = 226;
    public static readonly RULE_alterUser = 227;
    public static readonly RULE_createUser = 228;
    public static readonly RULE_dropUser = 229;
    public static readonly RULE_grantStatement = 230;
    public static readonly RULE_roleOption = 231;
    public static readonly RULE_grantProxy = 232;
    public static readonly RULE_alterResourceGroup = 233;
    public static readonly RULE_createResourceGroup = 234;
    public static readonly RULE_dropResourceGroup = 235;
    public static readonly RULE_setResourceGroup = 236;
    public static readonly RULE_resourceGroupVcpuSpec = 237;
    public static readonly RULE_renameUser = 238;
    public static readonly RULE_revokeStatement = 239;
    public static readonly RULE_ignoreUnknownUser = 240;
    public static readonly RULE_privilegeObjectType = 241;
    public static readonly RULE_setPasswordStatement = 242;
    public static readonly RULE_userSpecification = 243;
    public static readonly RULE_alterUserAuthOption = 244;
    public static readonly RULE_createUserAuthOption = 245;
    public static readonly RULE_createUserInitialAuthOption = 246;
    public static readonly RULE_userAuthOption = 247;
    public static readonly RULE_authOptionClause = 248;
    public static readonly RULE_authenticationRule = 249;
    public static readonly RULE_tlsOption = 250;
    public static readonly RULE_userResourceOption = 251;
    public static readonly RULE_userPasswordOption = 252;
    public static readonly RULE_userLockOption = 253;
    public static readonly RULE_factorAuthOption = 254;
    public static readonly RULE_registrationOption = 255;
    public static readonly RULE_factor = 256;
    public static readonly RULE_privelegeClause = 257;
    public static readonly RULE_privilege = 258;
    public static readonly RULE_privilegeLevel = 259;
    public static readonly RULE_renameUserClause = 260;
    public static readonly RULE_analyzeTable = 261;
    public static readonly RULE_checkTable = 262;
    public static readonly RULE_checksumTable = 263;
    public static readonly RULE_optimizeTable = 264;
    public static readonly RULE_repairTable = 265;
    public static readonly RULE_tableActionOption = 266;
    public static readonly RULE_checkTableOption = 267;
    public static readonly RULE_createFunction = 268;
    public static readonly RULE_installComponent = 269;
    public static readonly RULE_variableExpr = 270;
    public static readonly RULE_uninstallComponent = 271;
    public static readonly RULE_installPlugin = 272;
    public static readonly RULE_uninstallPlugin = 273;
    public static readonly RULE_cloneStatement = 274;
    public static readonly RULE_setStatement = 275;
    public static readonly RULE_showStatement = 276;
    public static readonly RULE_variableClause = 277;
    public static readonly RULE_showCommonEntity = 278;
    public static readonly RULE_showFilter = 279;
    public static readonly RULE_showGlobalInfoClause = 280;
    public static readonly RULE_showSchemaEntity = 281;
    public static readonly RULE_showProfileType = 282;
    public static readonly RULE_binlogStatement = 283;
    public static readonly RULE_cacheIndexStatement = 284;
    public static readonly RULE_flushStatement = 285;
    public static readonly RULE_killStatement = 286;
    public static readonly RULE_loadIndexIntoCache = 287;
    public static readonly RULE_resetStatement = 288;
    public static readonly RULE_resetOption = 289;
    public static readonly RULE_resetPersist = 290;
    public static readonly RULE_resetAllChannel = 291;
    public static readonly RULE_reStartStatement = 292;
    public static readonly RULE_shutdownStatement = 293;
    public static readonly RULE_tableIndex = 294;
    public static readonly RULE_flushOption = 295;
    public static readonly RULE_flushTableOption = 296;
    public static readonly RULE_loadedTableIndexes = 297;
    public static readonly RULE_simpleDescribeStatement = 298;
    public static readonly RULE_fullDescribeStatement = 299;
    public static readonly RULE_analyzeDescribeStatement = 300;
    public static readonly RULE_helpStatement = 301;
    public static readonly RULE_useStatement = 302;
    public static readonly RULE_signalStatement = 303;
    public static readonly RULE_resignalStatement = 304;
    public static readonly RULE_signalConditionInformation = 305;
    public static readonly RULE_withStatement = 306;
    public static readonly RULE_tableStatement = 307;
    public static readonly RULE_diagnosticsStatement = 308;
    public static readonly RULE_diagnosticsConditionInformationName = 309;
    public static readonly RULE_describeObjectClause = 310;
    public static readonly RULE_databaseNameCreate = 311;
    public static readonly RULE_databaseName = 312;
    public static readonly RULE_functionNameCreate = 313;
    public static readonly RULE_functionName = 314;
    public static readonly RULE_viewNameCreate = 315;
    public static readonly RULE_viewName = 316;
    public static readonly RULE_indexNameCreate = 317;
    public static readonly RULE_indexNames = 318;
    public static readonly RULE_indexName = 319;
    public static readonly RULE_groupNameCreate = 320;
    public static readonly RULE_groupName = 321;
    public static readonly RULE_tableNameCreate = 322;
    public static readonly RULE_tableNames = 323;
    public static readonly RULE_tableName = 324;
    public static readonly RULE_userOrRoleNames = 325;
    public static readonly RULE_userOrRoleName = 326;
    public static readonly RULE_columnNameCreate = 327;
    public static readonly RULE_columnNames = 328;
    public static readonly RULE_columnName = 329;
    public static readonly RULE_tablespaceNameCreate = 330;
    public static readonly RULE_tablespaceName = 331;
    public static readonly RULE_partitionNameCreate = 332;
    public static readonly RULE_partitionNames = 333;
    public static readonly RULE_partitionName = 334;
    public static readonly RULE_indexColumnName = 335;
    public static readonly RULE_userHostPort = 336;
    public static readonly RULE_userAtHost = 337;
    public static readonly RULE_simpleUserName = 338;
    public static readonly RULE_hostName = 339;
    public static readonly RULE_userName = 340;
    public static readonly RULE_mysqlVariable = 341;
    public static readonly RULE_charsetName = 342;
    public static readonly RULE_collationName = 343;
    public static readonly RULE_engineName = 344;
    public static readonly RULE_engineNameBase = 345;
    public static readonly RULE_uuidSet = 346;
    public static readonly RULE_xid = 347;
    public static readonly RULE_xuidStringId = 348;
    public static readonly RULE_fullId = 349;
    public static readonly RULE_uidList = 350;
    public static readonly RULE_uid = 351;
    public static readonly RULE_simpleId = 352;
    public static readonly RULE_dottedId = 353;
    public static readonly RULE_decimalLiteral = 354;
    public static readonly RULE_fileSizeLiteral = 355;
    public static readonly RULE_stringLiteral = 356;
    public static readonly RULE_booleanLiteral = 357;
    public static readonly RULE_hexadecimalLiteral = 358;
    public static readonly RULE_nullNotnull = 359;
    public static readonly RULE_constant = 360;
    public static readonly RULE_dataType = 361;
    public static readonly RULE_collectionOptions = 362;
    public static readonly RULE_convertedDataType = 363;
    public static readonly RULE_lengthOneDimension = 364;
    public static readonly RULE_lengthTwoDimension = 365;
    public static readonly RULE_lengthTwoOptionalDimension = 366;
    public static readonly RULE_indexColumnNames = 367;
    public static readonly RULE_expressions = 368;
    public static readonly RULE_valuesOrValueList = 369;
    public static readonly RULE_expressionsWithDefaults = 370;
    public static readonly RULE_expressionOrDefault = 371;
    public static readonly RULE_constants = 372;
    public static readonly RULE_simpleStrings = 373;
    public static readonly RULE_userVariables = 374;
    public static readonly RULE_defaultValue = 375;
    public static readonly RULE_currentTimestamp = 376;
    public static readonly RULE_ifExists = 377;
    public static readonly RULE_ifNotExists = 378;
    public static readonly RULE_orReplace = 379;
    public static readonly RULE_functionCall = 380;
    public static readonly RULE_specificFunction = 381;
    public static readonly RULE_caseFuncAlternative = 382;
    public static readonly RULE_levelsInWeightString = 383;
    public static readonly RULE_levelInWeightListElement = 384;
    public static readonly RULE_aggregateWindowedFunction = 385;
    public static readonly RULE_nonAggregateWindowedFunction = 386;
    public static readonly RULE_overClause = 387;
    public static readonly RULE_windowSpec = 388;
    public static readonly RULE_windowName = 389;
    public static readonly RULE_frameClause = 390;
    public static readonly RULE_frameUnits = 391;
    public static readonly RULE_frameExtent = 392;
    public static readonly RULE_frameBetween = 393;
    public static readonly RULE_frameRange = 394;
    public static readonly RULE_partitionClause = 395;
    public static readonly RULE_scalarFunctionName = 396;
    public static readonly RULE_passwordFunctionClause = 397;
    public static readonly RULE_functionArgs = 398;
    public static readonly RULE_functionArg = 399;
    public static readonly RULE_expression = 400;
    public static readonly RULE_predicate = 401;
    public static readonly RULE_expressionAtom = 402;
    public static readonly RULE_unaryOperator = 403;
    public static readonly RULE_comparisonOperator = 404;
    public static readonly RULE_comparisonBase = 405;
    public static readonly RULE_logicalOperator = 406;
    public static readonly RULE_bitOperator = 407;
    public static readonly RULE_mathOperator = 408;
    public static readonly RULE_jsonOperator = 409;
    public static readonly RULE_charsetNameBase = 410;
    public static readonly RULE_transactionLevelBase = 411;
    public static readonly RULE_privilegesBase = 412;
    public static readonly RULE_intervalTypeBase = 413;
    public static readonly RULE_dataTypeBase = 414;
    public static readonly RULE_keywordsCanBeId = 415;
    public static readonly RULE_functionNameBase = 416;

    public static readonly literalNames = [
        null, null, null, null, null, "'ACTIVE'", "'ADD'", "'ALL'", "'ALTER'", 
        "'ALWAYS'", "'ANALYZE'", "'AND'", "'ARRAY'", "'AS'", "'ASC'", "'ATTRIBUTE'", 
        "'BEFORE'", "'BETWEEN'", "'BOTH'", "'BUCKETS'", "'BY'", "'CALL'", 
        "'CASCADE'", "'CASE'", "'CAST'", "'CHANGE'", "'CHARACTER'", "'CHECK'", 
        "'COLLATE'", "'COLUMN'", "'CONDITION'", "'CONSTRAINT'", "'CONTINUE'", 
        "'CONVERT'", "'CREATE'", "'CROSS'", "'CURRENT'", "'CURRENT_USER'", 
        "'CURSOR'", "'DATABASE'", "'DATABASES'", "'DECLARE'", "'DEFAULT'", 
        "'DELAYED'", "'DELETE'", "'DESC'", "'DESCRIBE'", "'DETERMINISTIC'", 
        "'DIAGNOSTICS'", "'DISTINCT'", "'DISTINCTROW'", "'DROP'", "'EACH'", 
        "'ELSE'", "'ELSEIF'", "'EMPTY'", "'ENCLOSED'", "'ENFORCED'", "'ESCAPED'", 
        "'EXCEPT'", "'EXISTS'", "'EXIT'", "'EXPLAIN'", "'FALSE'", "'FETCH'", 
        "'FOR'", "'FORCE'", "'FOREIGN'", "'FROM'", "'FULLTEXT'", "'GENERATE'", 
        "'GENERATED'", "'GET'", "'GRANT'", "'GROUP'", "'HAVING'", "'HIGH_PRIORITY'", 
        "'HISTOGRAM'", "'IF'", "'IGNORE'", "'IN'", "'INACTIVE'", "'INDEX'", 
        "'INFILE'", "'INNER'", "'INOUT'", "'INSERT'", "'INTERVAL'", "'INTO'", 
        "'IS'", "'ITERATE'", "'JOIN'", "'KEY'", "'KEYS'", "'KILL'", "'LATERAL'", 
        "'LEADING'", "'LEAVE'", "'LEFT'", "'LIKE'", "'LIMIT'", "'LINEAR'", 
        "'LINES'", "'LOAD'", "'LOCK'", "'LOCKED'", "'LOOP'", "'LOW_PRIORITY'", 
        "'MASTER_BIND'", "'MASTER_SSL_VERIFY_SERVER_CERT'", "'MATCH'", "'MAXVALUE'", 
        "'MODIFIES'", "'NATURAL'", "'NOT'", "'NO_WRITE_TO_BINLOG'", "'NULL'", 
        "'NUMBER'", "'STREAM'", "'ON'", "'OPTIMIZE'", "'OPTION'", "'OPTIONAL'", 
        "'OPTIONALLY'", "'OR'", "'ORDER'", "'OUT'", "'OUTER'", "'OUTFILE'", 
        "'OVER'", "'PARTITION'", "'PRIMARY'", "'PROCEDURE'", "'PURGE'", 
        "'RANGE'", "'READ'", "'READS'", "'REFERENCE'", "'REFERENCES'", "'REGEXP'", 
        "'RELEASE'", "'RENAME'", "'REPEAT'", "'REPLACE'", "'REQUIRE'", "'RESIGNAL'", 
        "'RESTRICT'", "'RETAIN'", "'RETURN'", "'REVOKE'", "'RIGHT'", "'RLIKE'", 
        "'SCHEMA'", "'SCHEMAS'", "'SELECT'", "'SET'", "'SEPARATOR'", "'SHOW'", 
        "'SIGNAL'", "'SKIP'", "'SKIP_QUERY_REWRITE'", "'SPATIAL'", "'SQL'", 
        "'SQLEXCEPTION'", "'SQLSTATE'", "'SQLWARNING'", "'SQL_BIG_RESULT'", 
        "'SQL_CALC_FOUND_ROWS'", "'SQL_SMALL_RESULT'", "'SSL'", "'STACKED'", 
        "'STARTING'", "'STRAIGHT_JOIN'", "'TABLE'", "'TERMINATED'", "'THEN'", 
        "'TO'", "'TRAILING'", "'TRIGGER'", "'TRUE'", "'UNDO'", "'UNION'", 
        "'UNIQUE'", "'UNLOCK'", "'UNSIGNED'", "'UPDATE'", "'USAGE'", "'USE'", 
        "'USING'", "'VALUES'", "'VCPU'", "'WHEN'", "'WHERE'", "'WHILE'", 
        "'WITH'", "'WRITE'", "'XOR'", "'ZEROFILL'", "'TINYINT'", "'SMALLINT'", 
        "'MEDIUMINT'", "'MIDDLEINT'", "'INT'", "'INT1'", "'INT2'", "'INT3'", 
        "'INT4'", "'INT8'", "'INTEGER'", "'BIGINT'", "'REAL'", "'DOUBLE'", 
        "'PRECISION'", "'FLOAT'", "'FLOAT4'", "'FLOAT8'", "'DECIMAL'", "'DEC'", 
        "'NUMERIC'", "'DATE'", "'TIME'", "'TIMESTAMP'", "'DATETIME'", "'YEAR'", 
        "'CHAR'", "'VARCHAR'", "'NVARCHAR'", "'NATIONAL'", "'BINARY'", "'VARBINARY'", 
        "'TINYBLOB'", "'BLOB'", "'MEDIUMBLOB'", "'LONG'", "'LONGBLOB'", 
        "'TINYTEXT'", "'TEXT'", "'MEDIUMTEXT'", "'LONGTEXT'", "'ENUM'", 
        "'VARYING'", "'SERIAL'", "'YEAR_MONTH'", "'DAY_HOUR'", "'DAY_MINUTE'", 
        "'DAY_SECOND'", "'HOUR_MINUTE'", "'HOUR_SECOND'", "'MINUTE_SECOND'", 
        "'SECOND_MICROSECOND'", "'MINUTE_MICROSECOND'", "'HOUR_MICROSECOND'", 
        "'DAY_MICROSECOND'", "'JSON_TABLE'", "'JSON_VALUE'", "'NESTED'", 
        "'ORDINALITY'", "'PATH'", "'AVG'", "'BIT_AND'", "'BIT_OR'", "'BIT_XOR'", 
        "'COUNT'", "'CUME_DIST'", "'DENSE_RANK'", "'FIRST_VALUE'", "'GROUP_CONCAT'", 
        "'LAG'", "'LAST_VALUE'", "'LEAD'", "'MAX'", "'MIN'", "'NTILE'", 
        "'NTH_VALUE'", "'PERCENT_RANK'", "'RANK'", "'ROW_NUMBER'", "'STD'", 
        "'STDDEV'", "'STDDEV_POP'", "'STDDEV_SAMP'", "'SUM'", "'VAR_POP'", 
        "'VAR_SAMP'", "'VARIANCE'", "'CURRENT_DATE'", "'CURRENT_TIME'", 
        "'CURRENT_TIMESTAMP'", "'LOCALTIME'", "'CURDATE'", "'CURTIME'", 
        "'DATE_ADD'", "'DATE_SUB'", "'EXTRACT'", "'LOCALTIMESTAMP'", "'NOW'", 
        "'POSITION'", "'SUBSTR'", "'SUBSTRING'", "'SYSDATE'", "'TRIM'", 
        "'UTC_DATE'", "'UTC_TIME'", "'UTC_TIMESTAMP'", "'ACCOUNT'", "'ACTION'", 
        "'AFTER'", "'AGGREGATE'", "'ALGORITHM'", "'ANY'", "'ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS'", 
        "'AT'", "'AUTHORS'", "'AUTOCOMMIT'", "'AUTOEXTEND_SIZE'", "'AUTO_INCREMENT'", 
        "'AVG_ROW_LENGTH'", "'BEGIN'", "'BINLOG'", "'BIT'", "'BLOCK'", "'BOOL'", 
        "'BOOLEAN'", "'BTREE'", "'CACHE'", "'CASCADED'", "'CHAIN'", "'CHANGED'", 
        "'CHANNEL'", "'CHECKSUM'", "'CHALLENGE_RESPONSE'", "'CIPHER'", "'CLASS_ORIGIN'", 
        "'CLIENT'", "'CLOSE'", "'COALESCE'", "'CODE'", "'COLUMNS'", "'COLUMN_FORMAT'", 
        "'COLUMN_NAME'", "'COMMENT'", "'COMMIT'", "'COMPACT'", "'COMPLETION'", 
        "'COMPONENT'", "'COMPRESSED'", "'COMPRESSION'", "'CONCURRENT'", 
        "'CONNECT'", "'CONNECTION'", "'CONSISTENT'", "'CONSTRAINT_CATALOG'", 
        "'CONSTRAINT_SCHEMA'", "'CONSTRAINT_NAME'", "'CONTAINS'", "'CONTEXT'", 
        "'CONTRIBUTORS'", "'COPY'", "'CPU'", "'CURSOR_NAME'", "'DATA'", 
        "'DATAFILE'", "'DEALLOCATE'", "'DEFAULT_AUTH'", "'DEFINER'", "'DELAY_KEY_WRITE'", 
        "'DES_KEY_FILE'", "'DIRECTORY'", "'DISABLE'", "'DISCARD'", "'DISK'", 
        "'DO'", "'DUMPFILE'", "'DUPLICATE'", "'DYNAMIC'", "'ENABLE'", "'ENCRYPTION'", 
        "'ENCRYPTION_KEY_ID'", "'END'", "'ENDS'", "'ENGINE'", "'ENGINES'", 
        "'ERROR'", "'ERRORS'", "'ESCAPE'", "'EVENT'", "'EVENTS'", "'EVERY'", 
        "'EXCHANGE'", "'EXCLUSIVE'", "'EXPIRE'", "'EXPORT'", "'EXTENDED'", 
        "'EXTENT_SIZE'", "'FACTOR'", "'FAILED_LOGIN_ATTEMPTS'", "'FAST'", 
        "'FAULTS'", "'FIELDS'", "'FILE_BLOCK_SIZE'", "'FILTER'", "'FINISH'", 
        "'FIRST'", "'FIXED'", "'FLUSH'", "'FOLLOWING'", "'FOLLOWS'", "'FOUND'", 
        "'FULL'", "'FUNCTION'", "'GENERAL'", "'GET_MASTER_PUBLIC_KEY'", 
        "'GET_SOURCE_PUBLIC_KEY'", "'GLOBAL'", "'GRANTS'", "'GROUP_REPLICATION'", 
        "'GTID_ONLY'", "'HANDLER'", "'HASH'", "'HELP'", "'HISTORY'", "'HOST'", 
        "'HOSTS'", "'IDENTIFIED'", "'IGNORE_SERVER_IDS'", "'IMPORT'", "'INDEXES'", 
        "'INITIAL'", "'INITIAL_SIZE'", "'INITIATE'", "'INPLACE'", "'INSERT_METHOD'", 
        "'INSTALL'", "'INSTANCE'", "'INSTANT'", "'INVISIBLE'", "'INVOKER'", 
        "'IO'", "'IO_THREAD'", "'IPC'", "'ISOLATION'", "'ISSUER'", "'JSON'", 
        "'KEY_BLOCK_SIZE'", "'LANGUAGE'", "'LAST'", "'LEAVES'", "'LESS'", 
        "'LEVEL'", "'LIST'", "'LOCAL'", "'LOGFILE'", "'LOGS'", "'MASTER'", 
        "'MASTER_AUTO_POSITION'", "'MASTER_COMPRESSION_ALGORITHMS'", "'MASTER_CONNECT_RETRY'", 
        "'MASTER_DELAY'", "'MASTER_HEARTBEAT_PERIOD'", "'MASTER_HOST'", 
        "'MASTER_LOG_FILE'", "'MASTER_LOG_POS'", "'MASTER_PASSWORD'", "'MASTER_PORT'", 
        "'MASTER_PUBLIC_KEY_PATH'", "'MASTER_RETRY_COUNT'", "'MASTER_SSL'", 
        "'MASTER_SSL_CA'", "'MASTER_SSL_CAPATH'", "'MASTER_SSL_CERT'", "'MASTER_SSL_CIPHER'", 
        "'MASTER_SSL_CRL'", "'MASTER_SSL_CRLPATH'", "'MASTER_SSL_KEY'", 
        "'MASTER_TLS_CIPHERSUITES'", "'MASTER_TLS_VERSION'", "'MASTER_USER'", 
        "'MASTER_ZSTD_COMPRESSION_LEVEL'", "'MAX_CONNECTIONS_PER_HOUR'", 
        "'MAX_QUERIES_PER_HOUR'", "'MAX_ROWS'", "'MAX_SIZE'", "'MAX_UPDATES_PER_HOUR'", 
        "'MAX_USER_CONNECTIONS'", "'MEDIUM'", "'MEMBER'", "'MERGE'", "'MESSAGE_TEXT'", 
        "'MID'", "'MIGRATE'", "'MIN_ROWS'", "'MODE'", "'MODIFY'", "'MUTEX'", 
        "'MYSQL'", "'MYSQL_ERRNO'", "'NAME'", "'NAMES'", "'NCHAR'", "'NETWORK_NAMESPACE'", 
        "'NEVER'", "'NEXT'", "'NO'", "'NOWAIT'", "'NODEGROUP'", "'NONE'", 
        "'ODBC'", "'OFF'", "'OFFLINE'", "'OFFSET'", "'OF'", "'OLD'", "'OLD_PASSWORD'", 
        "'ONE'", "'ONLINE'", "'ONLY'", "'OPEN'", "'OPTIMIZER_COSTS'", "'OPTIONS'", 
        "'OWNER'", "'PACK_KEYS'", "'PAGE'", "'PAGE_CHECKSUM'", "'PAGE_COMPRESSED'", 
        "'PAGE_COMPRESSION_LEVEL'", "'PARSER'", "'PARTIAL'", "'PARTITIONING'", 
        "'PARTITIONS'", "'PASSWORD'", "'PASSWORD_LOCK_TIME'", "'PERSIST'", 
        "'PERSIST_ONLY'", "'PHASE'", "'PLUGIN'", "'PLUGIN_DIR'", "'PLUGINS'", 
        "'PORT'", "'PRECEDES'", "'PRECEDING'", "'PREPARE'", "'PRESERVE'", 
        "'PREV'", "'PRIVILEGE_CHECKS_USER'", "'PROCESSLIST'", "'PROFILE'", 
        "'PROFILES'", "'PROXY'", "'QUERY'", "'QUICK'", "'REBUILD'", "'RECOVER'", 
        "'RECURSIVE'", "'REDO_BUFFER_SIZE'", "'REDUNDANT'", "'REGISTRATION'", 
        "'RELAY'", "'RELAY_LOG_FILE'", "'RELAY_LOG_POS'", "'RELAYLOG'", 
        "'REMOVE'", "'REORGANIZE'", "'REPAIR'", "'REPLICA'", "'REPLICAS'", 
        "'REPLICATE_DO_DB'", "'REPLICATE_DO_TABLE'", "'REPLICATE_IGNORE_DB'", 
        "'REPLICATE_IGNORE_TABLE'", "'REPLICATE_REWRITE_DB'", "'REPLICATE_WILD_DO_TABLE'", 
        "'REPLICATE_WILD_IGNORE_TABLE'", "'REPLICATION'", "'REQUIRE_ROW_FORMAT'", 
        "'REQUIRE_TABLE_PRIMARY_KEY_CHECK'", "'RESET'", "'RESTART'", "'RESUME'", 
        "'RETURNED_SQLSTATE'", "'RETURNING'", "'RETURNS'", "'REUSE'", "'ROLE'", 
        "'ROLLBACK'", "'ROLLUP'", "'ROTATE'", "'ROW'", "'ROWS'", "'ROW_FORMAT'", 
        "'SAVEPOINT'", "'SCHEDULE'", "'SECURITY'", "'SERVER'", "'SESSION'", 
        "'SHARE'", "'SHARED'", "'SIGNED'", "'SIMPLE'", "'SLAVE'", "'SLOW'", 
        "'SNAPSHOT'", "'SOCKET'", "'SOME'", "'SONAME'", "'SOUNDS'", "'SOURCE'", 
        "'SOURCE_BIND'", "'SOURCE_HOST'", "'SOURCE_USER'", "'SOURCE_PASSWORD'", 
        "'SOURCE_PORT'", "'SOURCE_LOG_FILE'", "'SOURCE_LOG_POS'", "'SOURCE_AUTO_POSITION'", 
        "'SOURCE_HEARTBEAT_PERIOD'", "'SOURCE_CONNECT_RETRY'", "'SOURCE_RETRY_COUNT'", 
        "'SOURCE_CONNECTION_AUTO_FAILOVER'", "'SOURCE_DELAY'", "'SOURCE_COMPRESSION_ALGORITHMS'", 
        "'SOURCE_ZSTD_COMPRESSION_LEVEL'", "'SOURCE_SSL'", "'SOURCE_SSL_CA'", 
        "'SOURCE_SSL_CAPATH'", "'SOURCE_SSL_CERT'", "'SOURCE_SSL_CRL'", 
        "'SOURCE_SSL_CRLPATH'", "'SOURCE_SSL_KEY'", "'SOURCE_SSL_CIPHER'", 
        "'SOURCE_SSL_VERIFY_SERVER_CERT'", "'SOURCE_TLS_VERSION'", "'SOURCE_TLS_CIPHERSUITES'", 
        "'SOURCE_PUBLIC_KEY_PATH'", "'SQL_AFTER_GTIDS'", "'SQL_AFTER_MTS_GAPS'", 
        "'SQL_BEFORE_GTIDS'", "'SQL_BUFFER_RESULT'", "'SQL_CACHE'", "'SQL_NO_CACHE'", 
        "'SQL_THREAD'", "'START'", "'STARTS'", "'STATS_AUTO_RECALC'", "'STATS_PERSISTENT'", 
        "'STATS_SAMPLE_PAGES'", "'STATUS'", "'STOP'", "'STORAGE'", "'STORED'", 
        "'STRING'", "'SUBCLASS_ORIGIN'", "'SUBJECT'", "'SUBPARTITION'", 
        "'SUBPARTITIONS'", "'SUSPEND'", "'SWAPS'", "'SWITCHES'", "'TABLE_NAME'", 
        "'TABLESPACE'", "'TABLE_TYPE'", "'TEMPORARY'", "'TEMPTABLE'", "'THAN'", 
        "'TRADITIONAL'", "'TRANSACTION'", "'TRANSACTIONAL'", "'TREE'", "'TRIGGERS'", 
        "'TRUNCATE'", "'UNBOUNDED'", "'UNDEFINED'", "'UNDOFILE'", "'UNDO_BUFFER_SIZE'", 
        "'UNINSTALL'", "'UNKNOWN'", "'UNREGISTER'", "'UNTIL'", "'UPGRADE'", 
        "'USER'", "'USE_FRM'", "'USER_RESOURCES'", "'VALIDATION'", "'VALUE'", 
        "'VARIABLES'", "'VIEW'", "'VIRTUAL'", "'VISIBLE'", "'WAIT'", "'WARNINGS'", 
        "'WINDOW'", "'WITHOUT'", "'WORK'", "'WRAPPER'", "'X509'", "'XA'", 
        "'XML'", "'QUARTER'", "'MONTH'", "'DAY'", "'HOUR'", "'MINUTE'", 
        "'WEEK'", "'SECOND'", "'MICROSECOND'", "'ADMIN'", "'APPLICATION_PASSWORD_ADMIN'", 
        "'AUDIT_ABORT_EXEMPT'", "'AUDIT_ADMIN'", "'AUTHENTICATION'", "'AUTHENTICATION_POLICY_ADMIN'", 
        "'BACKUP_ADMIN'", "'BINLOG_ADMIN'", "'BINLOG_ENCRYPTION_ADMIN'", 
        "'CLONE'", "'CLONE_ADMIN'", "'CONNECTION_ADMIN'", "'ENCRYPTION_KEY_ADMIN'", 
        "'EXECUTE'", "'FILE'", "'FIREWALL_ADMIN'", "'FIREWALL_EXEMPT'", 
        "'FIREWALL_USER'", "'FLUSH_OPTIMIZER_COSTS'", "'FLUSH_STATUS'", 
        "'FLUSH_TABLES'", "'FLUSH_USER_RESOURCES'", "'GROUP_REPLICATION_ADMIN'", 
        "'INNODB_REDO_LOG_ARCHIVE'", "'INNODB_REDO_LOG_ENABLE'", "'INVOKE'", 
        "'LAMBDA'", "'NDB_STORED_USER'", "'PASSWORDLESS_USER_ADMIN'", "'PERSIST_RO_VARIABLES_ADMIN'", 
        "'PRIVILEGES'", "'PROCESS'", "'RELOAD'", "'REPLICATION_APPLIER'", 
        "'REPLICATION_SLAVE_ADMIN'", "'RESOURCE'", "'RESOURCE_GROUP_ADMIN'", 
        "'RESOURCE_GROUP_USER'", "'ROLE_ADMIN'", "'ROUTINE'", "'S3'", "'SERVICE_CONNECTION_ADMIN'", 
        null, "'SET_USER_ID'", "'SHOW_ROUTINE'", "'SHUTDOWN'", "'SUPER'", 
        "'SYSTEM_VARIABLES_ADMIN'", "'TABLES'", "'TABLE_ENCRYPTION_ADMIN'", 
        "'VERSION_TOKEN_ADMIN'", "'XA_RECOVER_ADMIN'", "'ARMSCII8'", "'ASCII'", 
        "'BIG5'", "'CP1250'", "'CP1251'", "'CP1256'", "'CP1257'", "'CP850'", 
        "'CP852'", "'CP866'", "'CP932'", "'DEC8'", "'EUCJPMS'", "'EUCKR'", 
        "'GB18030'", "'GB2312'", "'GBK'", "'GEOSTD8'", "'GREEK'", "'HEBREW'", 
        "'HP8'", "'KEYBCS2'", "'KOI8R'", "'KOI8U'", "'LATIN1'", "'LATIN2'", 
        "'LATIN5'", "'LATIN7'", "'MACCE'", "'MACROMAN'", "'SJIS'", "'SWE7'", 
        "'TIS620'", "'UCS2'", "'UJIS'", "'UTF16'", "'UTF16LE'", "'UTF32'", 
        "'UTF8'", "'UTF8MB3'", "'UTF8MB4'", "'ARCHIVE'", "'BLACKHOLE'", 
        "'CSV'", "'FEDERATED'", "'INNODB'", "'MEMORY'", "'MRG_MYISAM'", 
        "'MYISAM'", "'NDB'", "'NDBCLUSTER'", "'PERFORMANCE_SCHEMA'", "'TOKUDB'", 
        "'REPEATABLE'", "'COMMITTED'", "'UNCOMMITTED'", "'SERIALIZABLE'", 
        "'GEOMETRYCOLLECTION'", "'GEOMCOLLECTION'", "'GEOMETRY'", "'LINESTRING'", 
        "'MULTILINESTRING'", "'MULTIPOINT'", "'MULTIPOLYGON'", "'POINT'", 
        "'POLYGON'", "'CATALOG_NAME'", "'CHARSET'", "'COLLATION'", "'ENGINE_ATTRIBUTE'", 
        "'FORMAT'", "'GET_FORMAT'", "'INTERSECT'", "'RANDOM'", "'REVERSE'", 
        "'ROW_COUNT'", "'SCHEMA_NAME'", "'SECONDARY_ENGINE_ATTRIBUTE'", 
        "'SRID'", "'SYSTEM'", "'SYSTEM_USER'", "'THREAD_PRIORITY'", "'TP_CONNECTION_ADMIN'", 
        "'TYPE'", "'WEIGHT_STRING'", "':='", "'+='", "'-='", "'*='", "'/='", 
        "'%='", "'&='", "'^='", "'|='", "'*'", "'/'", "'%'", "'+'", "'-'", 
        "'DIV'", "'MOD'", "'='", "'>'", "'<'", "'!'", "'~'", "'|'", "'&'", 
        "'^'", "'.'", "'('", "')'", "','", "';'", "'@'", "'0'", "'1'", "'2'", 
        "'3'", "'''", "'\"'", "'`'", "':'"
    ];

    public static readonly symbolicNames = [
        null, "SPACE", "SPEC_MYSQL_COMMENT", "COMMENT_INPUT", "LINE_COMMENT", 
        "KW_ACTIVE", "KW_ADD", "KW_ALL", "KW_ALTER", "KW_ALWAYS", "KW_ANALYZE", 
        "KW_AND", "KW_ARRAY", "KW_AS", "KW_ASC", "KW_ATTRIBUTE", "KW_BEFORE", 
        "KW_BETWEEN", "KW_BOTH", "KW_BUCKETS", "KW_BY", "KW_CALL", "KW_CASCADE", 
        "KW_CASE", "KW_CAST", "KW_CHANGE", "KW_CHARACTER", "KW_CHECK", "KW_COLLATE", 
        "KW_COLUMN", "KW_CONDITION", "KW_CONSTRAINT", "KW_CONTINUE", "KW_CONVERT", 
        "KW_CREATE", "KW_CROSS", "KW_CURRENT", "KW_CURRENT_USER", "KW_CURSOR", 
        "KW_DATABASE", "KW_DATABASES", "KW_DECLARE", "KW_DEFAULT", "KW_DELAYED", 
        "KW_DELETE", "KW_DESC", "KW_DESCRIBE", "KW_DETERMINISTIC", "KW_DIAGNOSTICS", 
        "KW_DISTINCT", "KW_DISTINCTROW", "KW_DROP", "KW_EACH", "KW_ELSE", 
        "KW_ELSEIF", "KW_EMPTY", "KW_ENCLOSED", "KW_ENFORCED", "KW_ESCAPED", 
        "KW_EXCEPT", "KW_EXISTS", "KW_EXIT", "KW_EXPLAIN", "KW_FALSE", "KW_FETCH", 
        "KW_FOR", "KW_FORCE", "KW_FOREIGN", "KW_FROM", "KW_FULLTEXT", "KW_GENERATE", 
        "KW_GENERATED", "KW_GET", "KW_GRANT", "KW_GROUP", "KW_HAVING", "KW_HIGH_PRIORITY", 
        "KW_HISTOGRAM", "KW_IF", "KW_IGNORE", "KW_IN", "KW_INACTIVE", "KW_INDEX", 
        "KW_INFILE", "KW_INNER", "KW_INOUT", "KW_INSERT", "KW_INTERVAL", 
        "KW_INTO", "KW_IS", "KW_ITERATE", "KW_JOIN", "KW_KEY", "KW_KEYS", 
        "KW_KILL", "KW_LATERAL", "KW_LEADING", "KW_LEAVE", "KW_LEFT", "KW_LIKE", 
        "KW_LIMIT", "KW_LINEAR", "KW_LINES", "KW_LOAD", "KW_LOCK", "KW_LOCKED", 
        "KW_LOOP", "KW_LOW_PRIORITY", "KW_MASTER_BIND", "KW_MASTER_SSL_VERIFY_SERVER_CERT", 
        "KW_MATCH", "KW_MAXVALUE", "KW_MODIFIES", "KW_NATURAL", "KW_NOT", 
        "KW_NO_WRITE_TO_BINLOG", "KW_NULL_LITERAL", "KW_NUMBER", "KW_STREAM", 
        "KW_ON", "KW_OPTIMIZE", "KW_OPTION", "KW_OPTIONAL", "KW_OPTIONALLY", 
        "KW_OR", "KW_ORDER", "KW_OUT", "KW_OUTER", "KW_OUTFILE", "KW_OVER", 
        "KW_PARTITION", "KW_PRIMARY", "KW_PROCEDURE", "KW_PURGE", "KW_RANGE", 
        "KW_READ", "KW_READS", "KW_REFERENCE", "KW_REFERENCES", "KW_REGEXP", 
        "KW_RELEASE", "KW_RENAME", "KW_REPEAT", "KW_REPLACE", "KW_REQUIRE", 
        "KW_RESIGNAL", "KW_RESTRICT", "KW_RETAIN", "KW_RETURN", "KW_REVOKE", 
        "KW_RIGHT", "KW_RLIKE", "KW_SCHEMA", "KW_SCHEMAS", "KW_SELECT", 
        "KW_SET", "KW_SEPARATOR", "KW_SHOW", "KW_SIGNAL", "KW_SKIP", "KW_SKIP_QUERY_REWRITE", 
        "KW_SPATIAL", "KW_SQL", "KW_SQLEXCEPTION", "KW_SQLSTATE", "KW_SQLWARNING", 
        "KW_SQL_BIG_RESULT", "KW_SQL_CALC_FOUND_ROWS", "KW_SQL_SMALL_RESULT", 
        "KW_SSL", "KW_STACKED", "KW_STARTING", "KW_STRAIGHT_JOIN", "KW_TABLE", 
        "KW_TERMINATED", "KW_THEN", "KW_TO", "KW_TRAILING", "KW_TRIGGER", 
        "KW_TRUE", "KW_UNDO", "KW_UNION", "KW_UNIQUE", "KW_UNLOCK", "KW_UNSIGNED", 
        "KW_UPDATE", "KW_USAGE", "KW_USE", "KW_USING", "KW_VALUES", "KW_VCPU", 
        "KW_WHEN", "KW_WHERE", "KW_WHILE", "KW_WITH", "KW_WRITE", "KW_XOR", 
        "KW_ZEROFILL", "KW_TINYINT", "KW_SMALLINT", "KW_MEDIUMINT", "KW_MIDDLEINT", 
        "KW_INT", "KW_INT1", "KW_INT2", "KW_INT3", "KW_INT4", "KW_INT8", 
        "KW_INTEGER", "KW_BIGINT", "KW_REAL", "KW_DOUBLE", "KW_PRECISION", 
        "KW_FLOAT", "KW_FLOAT4", "KW_FLOAT8", "KW_DECIMAL", "KW_DEC", "KW_NUMERIC", 
        "KW_DATE", "KW_TIME", "KW_TIMESTAMP", "KW_DATETIME", "KW_YEAR", 
        "KW_CHAR", "KW_VARCHAR", "KW_NVARCHAR", "KW_NATIONAL", "KW_BINARY", 
        "KW_VARBINARY", "KW_TINYBLOB", "KW_BLOB", "KW_MEDIUMBLOB", "KW_LONG", 
        "KW_LONGBLOB", "KW_TINYTEXT", "KW_TEXT", "KW_MEDIUMTEXT", "KW_LONGTEXT", 
        "KW_ENUM", "KW_VARYING", "KW_SERIAL", "KW_YEAR_MONTH", "KW_DAY_HOUR", 
        "KW_DAY_MINUTE", "KW_DAY_SECOND", "KW_HOUR_MINUTE", "KW_HOUR_SECOND", 
        "KW_MINUTE_SECOND", "KW_SECOND_MICROSECOND", "KW_MINUTE_MICROSECOND", 
        "KW_HOUR_MICROSECOND", "KW_DAY_MICROSECOND", "KW_JSON_TABLE", "KW_JSON_VALUE", 
        "KW_NESTED", "KW_ORDINALITY", "KW_PATH", "KW_AVG", "KW_BIT_AND", 
        "KW_BIT_OR", "KW_BIT_XOR", "KW_COUNT", "KW_CUME_DIST", "KW_DENSE_RANK", 
        "KW_FIRST_VALUE", "KW_GROUP_CONCAT", "KW_LAG", "KW_LAST_VALUE", 
        "KW_LEAD", "KW_MAX", "KW_MIN", "KW_NTILE", "KW_NTH_VALUE", "KW_PERCENT_RANK", 
        "KW_RANK", "KW_ROW_NUMBER", "KW_STD", "KW_STDDEV", "KW_STDDEV_POP", 
        "KW_STDDEV_SAMP", "KW_SUM", "KW_VAR_POP", "KW_VAR_SAMP", "KW_VARIANCE", 
        "KW_CURRENT_DATE", "KW_CURRENT_TIME", "KW_CURRENT_TIMESTAMP", "KW_LOCALTIME", 
        "KW_CURDATE", "KW_CURTIME", "KW_DATE_ADD", "KW_DATE_SUB", "KW_EXTRACT", 
        "KW_LOCALTIMESTAMP", "KW_NOW", "KW_POSITION", "KW_SUBSTR", "KW_SUBSTRING", 
        "KW_SYSDATE", "KW_TRIM", "KW_UTC_DATE", "KW_UTC_TIME", "KW_UTC_TIMESTAMP", 
        "KW_ACCOUNT", "KW_ACTION", "KW_AFTER", "KW_AGGREGATE", "KW_ALGORITHM", 
        "KW_ANY", "KW_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS", "KW_AT", 
        "KW_AUTHORS", "KW_AUTOCOMMIT", "KW_AUTOEXTEND_SIZE", "KW_AUTO_INCREMENT", 
        "KW_AVG_ROW_LENGTH", "KW_BEGIN", "KW_BINLOG", "KW_BIT", "KW_BLOCK", 
        "KW_BOOL", "KW_BOOLEAN", "KW_BTREE", "KW_CACHE", "KW_CASCADED", 
        "KW_CHAIN", "KW_CHANGED", "KW_CHANNEL", "KW_CHECKSUM", "KW_CHALLENGE_RESPONSE", 
        "KW_CIPHER", "KW_CLASS_ORIGIN", "KW_CLIENT", "KW_CLOSE", "KW_COALESCE", 
        "KW_CODE", "KW_COLUMNS", "KW_COLUMN_FORMAT", "KW_COLUMN_NAME", "KW_COMMENT", 
        "KW_COMMIT", "KW_COMPACT", "KW_COMPLETION", "KW_COMPONENT", "KW_COMPRESSED", 
        "KW_COMPRESSION", "KW_CONCURRENT", "KW_CONNECT", "KW_CONNECTION", 
        "KW_CONSISTENT", "KW_CONSTRAINT_CATALOG", "KW_CONSTRAINT_SCHEMA", 
        "KW_CONSTRAINT_NAME", "KW_CONTAINS", "KW_CONTEXT", "KW_CONTRIBUTORS", 
        "KW_COPY", "KW_CPU", "KW_CURSOR_NAME", "KW_DATA", "KW_DATAFILE", 
        "KW_DEALLOCATE", "KW_DEFAULT_AUTH", "KW_DEFINER", "KW_DELAY_KEY_WRITE", 
        "KW_DES_KEY_FILE", "KW_DIRECTORY", "KW_DISABLE", "KW_DISCARD", "KW_DISK", 
        "KW_DO", "KW_DUMPFILE", "KW_DUPLICATE", "KW_DYNAMIC", "KW_ENABLE", 
        "KW_ENCRYPTION", "KW_ENCRYPTION_KEY_ID", "KW_END", "KW_ENDS", "KW_ENGINE", 
        "KW_ENGINES", "KW_ERROR", "KW_ERRORS", "KW_ESCAPE", "KW_EVENT", 
        "KW_EVENTS", "KW_EVERY", "KW_EXCHANGE", "KW_EXCLUSIVE", "KW_EXPIRE", 
        "KW_EXPORT", "KW_EXTENDED", "KW_EXTENT_SIZE", "KW_FACTOR", "KW_FAILED_LOGIN_ATTEMPTS", 
        "KW_FAST", "KW_FAULTS", "KW_FIELDS", "KW_FILE_BLOCK_SIZE", "KW_FILTER", 
        "KW_FINISH", "KW_FIRST", "KW_FIXED", "KW_FLUSH", "KW_FOLLOWING", 
        "KW_FOLLOWS", "KW_FOUND", "KW_FULL", "KW_FUNCTION", "KW_GENERAL", 
        "KW_GET_MASTER_PUBLIC_KEY", "KW_GET_SOURCE_PUBLIC_KEY", "KW_GLOBAL", 
        "KW_GRANTS", "KW_GROUP_REPLICATION", "KW_GTID_ONLY", "KW_HANDLER", 
        "KW_HASH", "KW_HELP", "KW_HISTORY", "KW_HOST", "KW_HOSTS", "KW_IDENTIFIED", 
        "KW_IGNORE_SERVER_IDS", "KW_IMPORT", "KW_INDEXES", "KW_INITIAL", 
        "KW_INITIAL_SIZE", "KW_INITIATE", "KW_INPLACE", "KW_INSERT_METHOD", 
        "KW_INSTALL", "KW_INSTANCE", "KW_INSTANT", "KW_INVISIBLE", "KW_INVOKER", 
        "KW_IO", "KW_IO_THREAD", "KW_IPC", "KW_ISOLATION", "KW_ISSUER", 
        "KW_JSON", "KW_KEY_BLOCK_SIZE", "KW_LANGUAGE", "KW_LAST", "KW_LEAVES", 
        "KW_LESS", "KW_LEVEL", "KW_LIST", "KW_LOCAL", "KW_LOGFILE", "KW_LOGS", 
        "KW_MASTER", "KW_MASTER_AUTO_POSITION", "KW_MASTER_COMPRESSION_ALGORITHMS", 
        "KW_MASTER_CONNECT_RETRY", "KW_MASTER_DELAY", "KW_MASTER_HEARTBEAT_PERIOD", 
        "KW_MASTER_HOST", "KW_MASTER_LOG_FILE", "KW_MASTER_LOG_POS", "KW_MASTER_PASSWORD", 
        "KW_MASTER_PORT", "KW_MASTER_PUBLIC_KEY_PATH", "KW_MASTER_RETRY_COUNT", 
        "KW_MASTER_SSL", "KW_MASTER_SSL_CA", "KW_MASTER_SSL_CAPATH", "KW_MASTER_SSL_CERT", 
        "KW_MASTER_SSL_CIPHER", "KW_MASTER_SSL_CRL", "KW_MASTER_SSL_CRLPATH", 
        "KW_MASTER_SSL_KEY", "KW_MASTER_TLS_CIPHERSUITES", "KW_MASTER_TLS_VERSION", 
        "KW_MASTER_USER", "KW_MASTER_ZSTD_COMPRESSION_LEVEL", "KW_MAX_CONNECTIONS_PER_HOUR", 
        "KW_MAX_QUERIES_PER_HOUR", "KW_MAX_ROWS", "KW_MAX_SIZE", "KW_MAX_UPDATES_PER_HOUR", 
        "KW_MAX_USER_CONNECTIONS", "KW_MEDIUM", "KW_MEMBER", "KW_MERGE", 
        "KW_MESSAGE_TEXT", "KW_MID", "KW_MIGRATE", "KW_MIN_ROWS", "KW_MODE", 
        "KW_MODIFY", "KW_MUTEX", "KW_MYSQL", "KW_MYSQL_ERRNO", "KW_NAME", 
        "KW_NAMES", "KW_NCHAR", "KW_NETWORK_NAMESPACE", "KW_NEVER", "KW_NEXT", 
        "KW_NO", "KW_NOWAIT", "KW_NODEGROUP", "KW_NONE", "KW_ODBC", "KW_OFF", 
        "KW_OFFLINE", "KW_OFFSET", "KW_OF", "KW_OLD", "KW_OLD_PASSWORD", 
        "KW_ONE", "KW_ONLINE", "KW_ONLY", "KW_OPEN", "KW_OPTIMIZER_COSTS", 
        "KW_OPTIONS", "KW_OWNER", "KW_PACK_KEYS", "KW_PAGE", "KW_PAGE_CHECKSUM", 
        "KW_PAGE_COMPRESSED", "KW_PAGE_COMPRESSION_LEVEL", "KW_PARSER", 
        "KW_PARTIAL", "KW_PARTITIONING", "KW_PARTITIONS", "KW_PASSWORD", 
        "KW_PASSWORD_LOCK_TIME", "KW_PERSIST", "KW_PERSIST_ONLY", "KW_PHASE", 
        "KW_PLUGIN", "KW_PLUGIN_DIR", "KW_PLUGINS", "KW_PORT", "KW_PRECEDES", 
        "KW_PRECEDING", "KW_PREPARE", "KW_PRESERVE", "KW_PREV", "KW_PRIVILEGE_CHECKS_USER", 
        "KW_PROCESSLIST", "KW_PROFILE", "KW_PROFILES", "KW_PROXY", "KW_QUERY", 
        "KW_QUICK", "KW_REBUILD", "KW_RECOVER", "KW_RECURSIVE", "KW_REDO_BUFFER_SIZE", 
        "KW_REDUNDANT", "KW_REGISTRATION", "KW_RELAY", "KW_RELAY_LOG_FILE", 
        "KW_RELAY_LOG_POS", "KW_RELAYLOG", "KW_REMOVE", "KW_REORGANIZE", 
        "KW_REPAIR", "KW_REPLICA", "KW_REPLICAS", "KW_REPLICATE_DO_DB", 
        "KW_REPLICATE_DO_TABLE", "KW_REPLICATE_IGNORE_DB", "KW_REPLICATE_IGNORE_TABLE", 
        "KW_REPLICATE_REWRITE_DB", "KW_REPLICATE_WILD_DO_TABLE", "KW_REPLICATE_WILD_IGNORE_TABLE", 
        "KW_REPLICATION", "KW_REQUIRE_ROW_FORMAT", "KW_REQUIRE_TABLE_PRIMARY_KEY_CHECK", 
        "KW_RESET", "KW_RESTART", "KW_RESUME", "KW_RETURNED_SQLSTATE", "KW_RETURNING", 
        "KW_RETURNS", "KW_REUSE", "KW_ROLE", "KW_ROLLBACK", "KW_ROLLUP", 
        "KW_ROTATE", "KW_ROW", "KW_ROWS", "KW_ROW_FORMAT", "KW_SAVEPOINT", 
        "KW_SCHEDULE", "KW_SECURITY", "KW_SERVER", "KW_SESSION", "KW_SHARE", 
        "KW_SHARED", "KW_SIGNED", "KW_SIMPLE", "KW_SLAVE", "KW_SLOW", "KW_SNAPSHOT", 
        "KW_SOCKET", "KW_SOME", "KW_SONAME", "KW_SOUNDS", "KW_SOURCE", "KW_SOURCE_BIND", 
        "KW_SOURCE_HOST", "KW_SOURCE_USER", "KW_SOURCE_PASSWORD", "KW_SOURCE_PORT", 
        "KW_SOURCE_LOG_FILE", "KW_SOURCE_LOG_POS", "KW_SOURCE_AUTO_POSITION", 
        "KW_SOURCE_HEARTBEAT_PERIOD", "KW_SOURCE_CONNECT_RETRY", "KW_SOURCE_RETRY_COUNT", 
        "KW_SOURCE_CONNECTION_AUTO_FAILOVER", "KW_SOURCE_DELAY", "KW_SOURCE_COMPRESSION_ALGORITHMS", 
        "KW_SOURCE_ZSTD_COMPRESSION_LEVEL", "KW_SOURCE_SSL", "KW_SOURCE_SSL_CA", 
        "KW_SOURCE_SSL_CAPATH", "KW_SOURCE_SSL_CERT", "KW_SOURCE_SSL_CRL", 
        "KW_SOURCE_SSL_CRLPATH", "KW_SOURCE_SSL_KEY", "KW_SOURCE_SSL_CIPHER", 
        "KW_SOURCE_SSL_VERIFY_SERVER_CERT", "KW_SOURCE_TLS_VERSION", "KW_SOURCE_TLS_CIPHERSUITES", 
        "KW_SOURCE_PUBLIC_KEY_PATH", "KW_SQL_AFTER_GTIDS", "KW_SQL_AFTER_MTS_GAPS", 
        "KW_SQL_BEFORE_GTIDS", "KW_SQL_BUFFER_RESULT", "KW_SQL_CACHE", "KW_SQL_NO_CACHE", 
        "KW_SQL_THREAD", "KW_START", "KW_STARTS", "KW_STATS_AUTO_RECALC", 
        "KW_STATS_PERSISTENT", "KW_STATS_SAMPLE_PAGES", "KW_STATUS", "KW_STOP", 
        "KW_STORAGE", "KW_STORED", "KW_STRING", "KW_SUBCLASS_ORIGIN", "KW_SUBJECT", 
        "KW_SUBPARTITION", "KW_SUBPARTITIONS", "KW_SUSPEND", "KW_SWAPS", 
        "KW_SWITCHES", "KW_TABLE_NAME", "KW_TABLESPACE", "KW_TABLE_TYPE", 
        "KW_TEMPORARY", "KW_TEMPTABLE", "KW_THAN", "KW_TRADITIONAL", "KW_TRANSACTION", 
        "KW_TRANSACTIONAL", "KW_TREE", "KW_TRIGGERS", "KW_TRUNCATE", "KW_UNBOUNDED", 
        "KW_UNDEFINED", "KW_UNDOFILE", "KW_UNDO_BUFFER_SIZE", "KW_UNINSTALL", 
        "KW_UNKNOWN", "KW_UNREGISTER", "KW_UNTIL", "KW_UPGRADE", "KW_USER", 
        "KW_USE_FRM", "KW_USER_RESOURCES", "KW_VALIDATION", "KW_VALUE", 
        "KW_VARIABLES", "KW_VIEW", "KW_VIRTUAL", "KW_VISIBLE", "KW_WAIT", 
        "KW_WARNINGS", "KW_WINDOW", "KW_WITHOUT", "KW_WORK", "KW_WRAPPER", 
        "KW_X509", "KW_XA", "KW_XML", "KW_QUARTER", "KW_MONTH", "KW_DAY", 
        "KW_HOUR", "KW_MINUTE", "KW_WEEK", "KW_SECOND", "KW_MICROSECOND", 
        "KW_ADMIN", "KW_APPLICATION_PASSWORD_ADMIN", "KW_AUDIT_ABORT_EXEMPT", 
        "KW_AUDIT_ADMIN", "KW_AUTHENTICATION", "KW_AUTHENTICATION_POLICY_ADMIN", 
        "KW_BACKUP_ADMIN", "KW_BINLOG_ADMIN", "KW_BINLOG_ENCRYPTION_ADMIN", 
        "KW_CLONE", "KW_CLONE_ADMIN", "KW_CONNECTION_ADMIN", "KW_ENCRYPTION_KEY_ADMIN", 
        "KW_EXECUTE", "KW_FILE", "KW_FIREWALL_ADMIN", "KW_FIREWALL_EXEMPT", 
        "KW_FIREWALL_USER", "KW_FLUSH_OPTIMIZER_COSTS", "KW_FLUSH_STATUS", 
        "KW_FLUSH_TABLES", "KW_FLUSH_USER_RESOURCES", "KW_GROUP_REPLICATION_ADMIN", 
        "KW_INNODB_REDO_LOG_ARCHIVE", "KW_INNODB_REDO_LOG_ENABLE", "KW_INVOKE", 
        "KW_LAMBDA", "KW_NDB_STORED_USER", "KW_PASSWORDLESS_USER_ADMIN", 
        "KW_PERSIST_RO_VARIABLES_ADMIN", "KW_PRIVILEGES", "KW_PROCESS", 
        "KW_RELOAD", "KW_REPLICATION_APPLIER", "KW_REPLICATION_SLAVE_ADMIN", 
        "KW_RESOURCE", "KW_RESOURCE_GROUP_ADMIN", "KW_RESOURCE_GROUP_USER", 
        "KW_ROLE_ADMIN", "KW_ROUTINE", "KW_S3", "KW_SERVICE_CONNECTION_ADMIN", 
        "KW_SESSION_VARIABLES_ADMIN", "KW_SET_USER_ID", "KW_SHOW_ROUTINE", 
        "KW_SHUTDOWN", "KW_SUPER", "KW_SYSTEM_VARIABLES_ADMIN", "KW_TABLES", 
        "KW_TABLE_ENCRYPTION_ADMIN", "KW_VERSION_TOKEN_ADMIN", "KW_XA_RECOVER_ADMIN", 
        "KW_ARMSCII8", "KW_ASCII", "KW_BIG5", "KW_CP1250", "KW_CP1251", 
        "KW_CP1256", "KW_CP1257", "KW_CP850", "KW_CP852", "KW_CP866", "KW_CP932", 
        "KW_DEC8", "KW_EUCJPMS", "KW_EUCKR", "KW_GB18030", "KW_GB2312", 
        "KW_GBK", "KW_GEOSTD8", "KW_GREEK", "KW_HEBREW", "KW_HP8", "KW_KEYBCS2", 
        "KW_KOI8R", "KW_KOI8U", "KW_LATIN1", "KW_LATIN2", "KW_LATIN5", "KW_LATIN7", 
        "KW_MACCE", "KW_MACROMAN", "KW_SJIS", "KW_SWE7", "KW_TIS620", "KW_UCS2", 
        "KW_UJIS", "KW_UTF16", "KW_UTF16LE", "KW_UTF32", "KW_UTF8", "KW_UTF8MB3", 
        "KW_UTF8MB4", "KW_ARCHIVE", "KW_BLACKHOLE", "KW_CSV", "KW_FEDERATED", 
        "KW_INNODB", "KW_MEMORY", "KW_MRG_MYISAM", "KW_MYISAM", "KW_NDB", 
        "KW_NDBCLUSTER", "KW_PERFORMANCE_SCHEMA", "KW_TOKUDB", "KW_REPEATABLE", 
        "KW_COMMITTED", "KW_UNCOMMITTED", "KW_SERIALIZABLE", "KW_GEOMETRYCOLLECTION", 
        "KW_GEOMCOLLECTION", "KW_GEOMETRY", "KW_LINESTRING", "KW_MULTILINESTRING", 
        "KW_MULTIPOINT", "KW_MULTIPOLYGON", "KW_POINT", "KW_POLYGON", "KW_CATALOG_NAME", 
        "KW_CHARSET", "KW_COLLATION", "KW_ENGINE_ATTRIBUTE", "KW_FORMAT", 
        "KW_GET_FORMAT", "KW_INTERSECT", "KW_RANDOM", "KW_REVERSE", "KW_ROW_COUNT", 
        "KW_SCHEMA_NAME", "KW_SECONDARY_ENGINE_ATTRIBUTE", "KW_SRID", "KW_SYSTEM", 
        "KW_SYSTEM_USER", "KW_THREAD_PRIORITY", "KW_TP_CONNECTION_ADMIN", 
        "KW_TYPE", "KW_WEIGHT_STRING", "VAR_ASSIGN", "PLUS_ASSIGN", "MINUS_ASSIGN", 
        "MULT_ASSIGN", "DIV_ASSIGN", "MOD_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN", 
        "OR_ASSIGN", "STAR", "DIVIDE", "MODULE", "PLUS", "MINUS", "DIV", 
        "MOD", "EQUAL_SYMBOL", "GREATER_SYMBOL", "LESS_SYMBOL", "EXCLAMATION_SYMBOL", 
        "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", "DOT", "LR_BRACKET", 
        "RR_BRACKET", "COMMA", "SEMI", "AT_SIGN", "ZERO_DECIMAL", "ONE_DECIMAL", 
        "TWO_DECIMAL", "THREE_DECIMAL", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", 
        "REVERSE_QUOTE_SYMB", "COLON_SYMB", "CHARSET_REVERSE_QOUTE_STRING", 
        "FILESIZE_LITERAL", "START_NATIONAL_STRING_LITERAL", "STRING_LITERAL", 
        "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "REAL_LITERAL", "NULL_SPEC_LITERAL", 
        "BIT_STRING", "STRING_CHARSET_NAME", "ID", "REVERSE_QUOTE_ID", "HOST_IP_ADDRESS", 
        "LOCAL_ID", "GLOBAL_ID", "PERSIST_ID", "ERROR_RECONGNIGION"
    ];
    public static readonly ruleNames = [
        "program", "singleStatement", "sqlStatement", "emptyStatement_", 
        "ddlStatement", "dmlStatement", "transactionStatement", "replicationStatement", 
        "preparedStatement", "compoundStatement", "administrationStatement", 
        "utilityStatement", "createDatabase", "createEvent", "createIndex", 
        "createLogfileGroup", "createProcedure", "createRole", "createServer", 
        "createTable", "createTablespaceInnodb", "createTablespaceNdb", 
        "createTrigger", "withClause", "commonTableExpressions", "createView", 
        "createDatabaseOption", "charSet", "currentUserExpression", "ownerStatement", 
        "scheduleExpression", "timestampValue", "intervalExpr", "intervalType", 
        "enableType", "indexType", "indexOption", "procedureParameter", 
        "routineOption", "serverOption", "createDefinitions", "createDefinition", 
        "checkConstraintDefinition", "constraintSymbol", "columnDefinition", 
        "columnConstraint", "referenceDefinition", "referenceAction", "referenceControlType", 
        "tableOption", "tableType", "tablespaceStorage", "partitionDefinitions", 
        "partitionFunctionDefinition", "subpartitionFunctionDefinition", 
        "partitionDefinition", "partitionDefinerAtom", "partitionDefinerVector", 
        "subpartitionDefinition", "partitionOption", "alterDatabase", "alterEvent", 
        "alterFunction", "alterInstance", "alterLogfileGroup", "alterProcedure", 
        "alterServer", "alterTable", "alterTablespace", "alterView", "alterOption", 
        "alterPartitionSpecification", "dropDatabase", "dropEvent", "dropIndex", 
        "dropLogfileGroup", "dropProcedure", "dropFunction", "dropServer", 
        "dropSpatial", "dropTable", "dropTablespace", "dropTrigger", "dropView", 
        "dropRole", "setRole", "renameTable", "renameTableClause", "truncateTable", 
        "callStatement", "deleteStatement", "doStatement", "handlerStatement", 
        "insertStatement", "asRowAlias", "selectOrTableOrValues", "interSectStatement", 
        "interSectQuery", "loadDataStatement", "loadXmlStatement", "parenthesizedQuery", 
        "replaceStatement", "selectStatement", "setOperations", "queryExpressionBody", 
        "queryItem", "queryPrimary", "updateStatement", "valuesStatement", 
        "parenthesizedQueryExpression", "queryBlock", "replaceStatementValuesOrSelectOrTable", 
        "rowValuesList", "setAssignmentList", "updatedElement", "assignmentField", 
        "lockClause", "singleDeleteStatement", "multipleDeleteStatement", 
        "handlerOpenStatement", "handlerReadIndexStatement", "handlerReadStatement", 
        "handlerCloseStatement", "importTableStatement", "singleUpdateStatement", 
        "multipleUpdateStatement", "orderByClause", "orderByExpression", 
        "tableSources", "tableSource", "tableSourceItem", "fullColumnNames", 
        "indexHint", "indexHintType", "joinPart", "joinSpec", "queryExpression", 
        "querySpecification", "unionStatement", "lateralStatement", "jsonTable", 
        "jsonColumnList", "jsonColumn", "jsonOnEmpty", "jsonOnError", "selectSpec", 
        "selectElements", "selectElement", "intoClause", "selectFieldsInto", 
        "selectLinesInto", "fromClause", "groupByClause", "havingClause", 
        "windowClause", "groupByItem", "limitClause", "limitClauseAtom", 
        "startTransaction", "beginWork", "commitWork", "rollbackWork", "savepointStatement", 
        "rollbackStatement", "releaseStatement", "lockTables", "unlockTables", 
        "setAutocommitStatement", "setTransactionStatement", "transactionMode", 
        "lockTableElement", "lockAction", "transactionOption", "transactionLevel", 
        "changeMaster", "changeReplicationFilter", "changeReplicationSource", 
        "purgeBinaryLogs", "startSlaveOrReplica", "stopSlaveOrReplica", 
        "startGroupReplication", "stopGroupReplication", "masterOption", 
        "stringMasterOption", "decimalMasterOption", "boolMasterOption", 
        "v8NewMasterOption", "replicationSourceOption", "stringSourceOption", 
        "decimalSourceOption", "boolSourceOption", "otherSourceOption", 
        "channelOption", "replicationFilter", "tablePair", "threadType", 
        "untilOption", "connectionOptions", "gtuidSet", "xaStartTransaction", 
        "xaEndTransaction", "xaPrepareStatement", "xaCommitWork", "xaRollbackWork", 
        "xaRecoverWork", "prepareStatement", "executeStatement", "deallocatePrepare", 
        "routineBody", "blockStatement", "caseStatement", "ifStatement", 
        "iterateStatement", "leaveStatement", "loopStatement", "repeatStatement", 
        "returnStatement", "whileStatement", "cursorStatement", "declareVariable", 
        "declareCondition", "declareCursor", "declareHandler", "handlerConditionValue", 
        "procedureSqlStatement", "caseAlternative", "elifAlternative", "alterUser", 
        "createUser", "dropUser", "grantStatement", "roleOption", "grantProxy", 
        "alterResourceGroup", "createResourceGroup", "dropResourceGroup", 
        "setResourceGroup", "resourceGroupVcpuSpec", "renameUser", "revokeStatement", 
        "ignoreUnknownUser", "privilegeObjectType", "setPasswordStatement", 
        "userSpecification", "alterUserAuthOption", "createUserAuthOption", 
        "createUserInitialAuthOption", "userAuthOption", "authOptionClause", 
        "authenticationRule", "tlsOption", "userResourceOption", "userPasswordOption", 
        "userLockOption", "factorAuthOption", "registrationOption", "factor", 
        "privelegeClause", "privilege", "privilegeLevel", "renameUserClause", 
        "analyzeTable", "checkTable", "checksumTable", "optimizeTable", 
        "repairTable", "tableActionOption", "checkTableOption", "createFunction", 
        "installComponent", "variableExpr", "uninstallComponent", "installPlugin", 
        "uninstallPlugin", "cloneStatement", "setStatement", "showStatement", 
        "variableClause", "showCommonEntity", "showFilter", "showGlobalInfoClause", 
        "showSchemaEntity", "showProfileType", "binlogStatement", "cacheIndexStatement", 
        "flushStatement", "killStatement", "loadIndexIntoCache", "resetStatement", 
        "resetOption", "resetPersist", "resetAllChannel", "reStartStatement", 
        "shutdownStatement", "tableIndex", "flushOption", "flushTableOption", 
        "loadedTableIndexes", "simpleDescribeStatement", "fullDescribeStatement", 
        "analyzeDescribeStatement", "helpStatement", "useStatement", "signalStatement", 
        "resignalStatement", "signalConditionInformation", "withStatement", 
        "tableStatement", "diagnosticsStatement", "diagnosticsConditionInformationName", 
        "describeObjectClause", "databaseNameCreate", "databaseName", "functionNameCreate", 
        "functionName", "viewNameCreate", "viewName", "indexNameCreate", 
        "indexNames", "indexName", "groupNameCreate", "groupName", "tableNameCreate", 
        "tableNames", "tableName", "userOrRoleNames", "userOrRoleName", 
        "columnNameCreate", "columnNames", "columnName", "tablespaceNameCreate", 
        "tablespaceName", "partitionNameCreate", "partitionNames", "partitionName", 
        "indexColumnName", "userHostPort", "userAtHost", "simpleUserName", 
        "hostName", "userName", "mysqlVariable", "charsetName", "collationName", 
        "engineName", "engineNameBase", "uuidSet", "xid", "xuidStringId", 
        "fullId", "uidList", "uid", "simpleId", "dottedId", "decimalLiteral", 
        "fileSizeLiteral", "stringLiteral", "booleanLiteral", "hexadecimalLiteral", 
        "nullNotnull", "constant", "dataType", "collectionOptions", "convertedDataType", 
        "lengthOneDimension", "lengthTwoDimension", "lengthTwoOptionalDimension", 
        "indexColumnNames", "expressions", "valuesOrValueList", "expressionsWithDefaults", 
        "expressionOrDefault", "constants", "simpleStrings", "userVariables", 
        "defaultValue", "currentTimestamp", "ifExists", "ifNotExists", "orReplace", 
        "functionCall", "specificFunction", "caseFuncAlternative", "levelsInWeightString", 
        "levelInWeightListElement", "aggregateWindowedFunction", "nonAggregateWindowedFunction", 
        "overClause", "windowSpec", "windowName", "frameClause", "frameUnits", 
        "frameExtent", "frameBetween", "frameRange", "partitionClause", 
        "scalarFunctionName", "passwordFunctionClause", "functionArgs", 
        "functionArg", "expression", "predicate", "expressionAtom", "unaryOperator", 
        "comparisonOperator", "comparisonBase", "logicalOperator", "bitOperator", 
        "mathOperator", "jsonOperator", "charsetNameBase", "transactionLevelBase", 
        "privilegesBase", "intervalTypeBase", "dataTypeBase", "keywordsCanBeId", 
        "functionNameBase",
    ];

    public get grammarFileName(): string { return "MySqlParser.g4"; }
    public get literalNames(): (string | null)[] { return MySqlParser.literalNames; }
    public get symbolicNames(): (string | null)[] { return MySqlParser.symbolicNames; }
    public get ruleNames(): string[] { return MySqlParser.ruleNames; }
    public get serializedATN(): number[] { return MySqlParser._serializedATN; }

    protected createFailedPredicateException(predicate?: string, message?: string): antlr.FailedPredicateException {
        return new antlr.FailedPredicateException(this, predicate, message);
    }

    public constructor(input: antlr.TokenStream) {
        super(input);
        this.interpreter = new antlr.ParserATNSimulator(this, MySqlParser._ATN, MySqlParser.decisionsToDFA, new antlr.PredictionContextCache());
    }
    public program(): ProgramContext {
        let localContext = new ProgramContext(this.context, this.state);
        this.enterRule(localContext, 0, MySqlParser.RULE_program);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 837;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while ((((_la) & ~0x1F) === 0 && ((1 << _la) & 169870592) !== 0) || ((((_la - 34)) & ~0x1F) === 0 && ((1 << (_la - 34)) & 268573697) !== 0) || ((((_la - 72)) & ~0x1F) === 0 && ((1 << (_la - 72)) & 2151694339) !== 0) || ((((_la - 104)) & ~0x1F) === 0 && ((1 << (_la - 104)) & 536936449) !== 0) || ((((_la - 140)) & ~0x1F) === 0 && ((1 << (_la - 140)) & 442923) !== 0) || ((((_la - 173)) & ~0x1F) === 0 && ((1 << (_la - 173)) & 2184193) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 16781443) !== 0) || _la === 362 || _la === 371 || ((((_la - 404)) & ~0x1F) === 0 && ((1 << (_la - 404)) & 270573569) !== 0) || _la === 540 || _la === 562 || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 16643) !== 0) || ((((_la - 640)) & ~0x1F) === 0 && ((1 << (_la - 640)) & 268435521) !== 0) || _la === 673 || _la === 694 || _la === 713 || _la === 717 || _la === 749 || _la === 866 || _la === 869) {
                {
                {
                this.state = 834;
                this.singleStatement();
                }
                }
                this.state = 839;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 840;
            this.match(MySqlParser.EOF);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public singleStatement(): SingleStatementContext {
        let localContext = new SingleStatementContext(this.context, this.state);
        this.enterRule(localContext, 2, MySqlParser.RULE_singleStatement);
        try {
            this.state = 847;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_ALTER:
            case MySqlParser.KW_ANALYZE:
            case MySqlParser.KW_CALL:
            case MySqlParser.KW_CHANGE:
            case MySqlParser.KW_CHECK:
            case MySqlParser.KW_CREATE:
            case MySqlParser.KW_DELETE:
            case MySqlParser.KW_DESC:
            case MySqlParser.KW_DESCRIBE:
            case MySqlParser.KW_DROP:
            case MySqlParser.KW_EXPLAIN:
            case MySqlParser.KW_GET:
            case MySqlParser.KW_GRANT:
            case MySqlParser.KW_INSERT:
            case MySqlParser.KW_KILL:
            case MySqlParser.KW_LOAD:
            case MySqlParser.KW_LOCK:
            case MySqlParser.KW_OPTIMIZE:
            case MySqlParser.KW_PURGE:
            case MySqlParser.KW_RELEASE:
            case MySqlParser.KW_RENAME:
            case MySqlParser.KW_REPLACE:
            case MySqlParser.KW_RESIGNAL:
            case MySqlParser.KW_REVOKE:
            case MySqlParser.KW_SELECT:
            case MySqlParser.KW_SET:
            case MySqlParser.KW_SHOW:
            case MySqlParser.KW_SIGNAL:
            case MySqlParser.KW_TABLE:
            case MySqlParser.KW_UNLOCK:
            case MySqlParser.KW_UPDATE:
            case MySqlParser.KW_USE:
            case MySqlParser.KW_VALUES:
            case MySqlParser.KW_WITH:
            case MySqlParser.KW_BEGIN:
            case MySqlParser.KW_BINLOG:
            case MySqlParser.KW_CACHE:
            case MySqlParser.KW_CHECKSUM:
            case MySqlParser.KW_COMMIT:
            case MySqlParser.KW_DEALLOCATE:
            case MySqlParser.KW_DO:
            case MySqlParser.KW_FLUSH:
            case MySqlParser.KW_HANDLER:
            case MySqlParser.KW_HELP:
            case MySqlParser.KW_IMPORT:
            case MySqlParser.KW_INSTALL:
            case MySqlParser.KW_PREPARE:
            case MySqlParser.KW_REPAIR:
            case MySqlParser.KW_RESET:
            case MySqlParser.KW_RESTART:
            case MySqlParser.KW_ROLLBACK:
            case MySqlParser.KW_SAVEPOINT:
            case MySqlParser.KW_START:
            case MySqlParser.KW_STOP:
            case MySqlParser.KW_TRUNCATE:
            case MySqlParser.KW_UNINSTALL:
            case MySqlParser.KW_XA:
            case MySqlParser.KW_CLONE:
            case MySqlParser.KW_EXECUTE:
            case MySqlParser.KW_SHUTDOWN:
            case MySqlParser.LR_BRACKET:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 842;
                this.sqlStatement();
                this.state = 844;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1, this.context) ) {
                case 1:
                    {
                    this.state = 843;
                    this.match(MySqlParser.SEMI);
                    }
                    break;
                }
                }
                break;
            case MySqlParser.SEMI:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 846;
                this.emptyStatement_();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public sqlStatement(): SqlStatementContext {
        let localContext = new SqlStatementContext(this.context, this.state);
        this.enterRule(localContext, 4, MySqlParser.RULE_sqlStatement);
        try {
            this.state = 856;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 3, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 849;
                this.ddlStatement();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 850;
                this.dmlStatement();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 851;
                this.transactionStatement();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 852;
                this.replicationStatement();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 853;
                this.preparedStatement();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 854;
                this.administrationStatement();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 855;
                this.utilityStatement();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public emptyStatement_(): EmptyStatement_Context {
        let localContext = new EmptyStatement_Context(this.context, this.state);
        this.enterRule(localContext, 6, MySqlParser.RULE_emptyStatement_);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 858;
            this.match(MySqlParser.SEMI);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public ddlStatement(): DdlStatementContext {
        let localContext = new DdlStatementContext(this.context, this.state);
        this.enterRule(localContext, 8, MySqlParser.RULE_ddlStatement);
        try {
            this.state = 899;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 4, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 860;
                this.createDatabase();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 861;
                this.createEvent();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 862;
                this.createIndex();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 863;
                this.createLogfileGroup();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 864;
                this.createProcedure();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 865;
                this.createFunction();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 866;
                this.createServer();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 867;
                this.createTable();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 868;
                this.createTablespaceInnodb();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 869;
                this.createTablespaceNdb();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 870;
                this.createTrigger();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 871;
                this.createView();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 872;
                this.createRole();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 873;
                this.alterDatabase();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 874;
                this.alterEvent();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 875;
                this.alterFunction();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 876;
                this.alterInstance();
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 877;
                this.alterLogfileGroup();
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 878;
                this.alterProcedure();
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 879;
                this.alterServer();
                }
                break;
            case 21:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 880;
                this.alterTable();
                }
                break;
            case 22:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 881;
                this.alterTablespace();
                }
                break;
            case 23:
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 882;
                this.alterView();
                }
                break;
            case 24:
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 883;
                this.dropDatabase();
                }
                break;
            case 25:
                this.enterOuterAlt(localContext, 25);
                {
                this.state = 884;
                this.dropEvent();
                }
                break;
            case 26:
                this.enterOuterAlt(localContext, 26);
                {
                this.state = 885;
                this.dropIndex();
                }
                break;
            case 27:
                this.enterOuterAlt(localContext, 27);
                {
                this.state = 886;
                this.dropLogfileGroup();
                }
                break;
            case 28:
                this.enterOuterAlt(localContext, 28);
                {
                this.state = 887;
                this.dropProcedure();
                }
                break;
            case 29:
                this.enterOuterAlt(localContext, 29);
                {
                this.state = 888;
                this.dropFunction();
                }
                break;
            case 30:
                this.enterOuterAlt(localContext, 30);
                {
                this.state = 889;
                this.dropServer();
                }
                break;
            case 31:
                this.enterOuterAlt(localContext, 31);
                {
                this.state = 890;
                this.dropSpatial();
                }
                break;
            case 32:
                this.enterOuterAlt(localContext, 32);
                {
                this.state = 891;
                this.dropTable();
                }
                break;
            case 33:
                this.enterOuterAlt(localContext, 33);
                {
                this.state = 892;
                this.dropTablespace();
                }
                break;
            case 34:
                this.enterOuterAlt(localContext, 34);
                {
                this.state = 893;
                this.dropTrigger();
                }
                break;
            case 35:
                this.enterOuterAlt(localContext, 35);
                {
                this.state = 894;
                this.dropView();
                }
                break;
            case 36:
                this.enterOuterAlt(localContext, 36);
                {
                this.state = 895;
                this.dropRole();
                }
                break;
            case 37:
                this.enterOuterAlt(localContext, 37);
                {
                this.state = 896;
                this.setRole();
                }
                break;
            case 38:
                this.enterOuterAlt(localContext, 38);
                {
                this.state = 897;
                this.renameTable();
                }
                break;
            case 39:
                this.enterOuterAlt(localContext, 39);
                {
                this.state = 898;
                this.truncateTable();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dmlStatement(): DmlStatementContext {
        let localContext = new DmlStatementContext(this.context, this.state);
        this.enterRule(localContext, 10, MySqlParser.RULE_dmlStatement);
        try {
            this.state = 918;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 5, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 901;
                this.selectStatement();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 902;
                this.setOperations();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 903;
                this.insertStatement();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 904;
                this.updateStatement();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 905;
                this.deleteStatement();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 906;
                this.replaceStatement();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 907;
                this.callStatement();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 908;
                this.interSectStatement();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 909;
                this.loadDataStatement();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 910;
                this.loadXmlStatement();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 911;
                this.parenthesizedQuery();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 912;
                this.doStatement();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 913;
                this.handlerStatement();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 914;
                this.importTableStatement();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 915;
                this.valuesStatement();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 916;
                this.withStatement();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 917;
                this.tableStatement();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public transactionStatement(): TransactionStatementContext {
        let localContext = new TransactionStatementContext(this.context, this.state);
        this.enterRule(localContext, 12, MySqlParser.RULE_transactionStatement);
        try {
            this.state = 929;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 6, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 920;
                this.startTransaction();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 921;
                this.beginWork();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 922;
                this.commitWork();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 923;
                this.rollbackWork();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 924;
                this.savepointStatement();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 925;
                this.rollbackStatement();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 926;
                this.releaseStatement();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 927;
                this.lockTables();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 928;
                this.unlockTables();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public replicationStatement(): ReplicationStatementContext {
        let localContext = new ReplicationStatementContext(this.context, this.state);
        this.enterRule(localContext, 14, MySqlParser.RULE_replicationStatement);
        try {
            this.state = 945;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 7, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 931;
                this.changeMaster();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 932;
                this.changeReplicationFilter();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 933;
                this.changeReplicationSource();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 934;
                this.purgeBinaryLogs();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 935;
                this.startSlaveOrReplica();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 936;
                this.stopSlaveOrReplica();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 937;
                this.startGroupReplication();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 938;
                this.stopGroupReplication();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 939;
                this.xaStartTransaction();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 940;
                this.xaEndTransaction();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 941;
                this.xaPrepareStatement();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 942;
                this.xaCommitWork();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 943;
                this.xaRollbackWork();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 944;
                this.xaRecoverWork();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public preparedStatement(): PreparedStatementContext {
        let localContext = new PreparedStatementContext(this.context, this.state);
        this.enterRule(localContext, 16, MySqlParser.RULE_preparedStatement);
        try {
            this.state = 950;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_PREPARE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 947;
                this.prepareStatement();
                }
                break;
            case MySqlParser.KW_EXECUTE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 948;
                this.executeStatement();
                }
                break;
            case MySqlParser.KW_DROP:
            case MySqlParser.KW_DEALLOCATE:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 949;
                this.deallocatePrepare();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public compoundStatement(): CompoundStatementContext {
        let localContext = new CompoundStatementContext(this.context, this.state);
        this.enterRule(localContext, 18, MySqlParser.RULE_compoundStatement);
        try {
            this.state = 962;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 9, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 952;
                this.blockStatement();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 953;
                this.caseStatement();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 954;
                this.ifStatement();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 955;
                this.leaveStatement();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 956;
                this.loopStatement();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 957;
                this.repeatStatement();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 958;
                this.whileStatement();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 959;
                this.iterateStatement();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 960;
                this.returnStatement();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 961;
                this.cursorStatement();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public administrationStatement(): AdministrationStatementContext {
        let localContext = new AdministrationStatementContext(this.context, this.state);
        this.enterRule(localContext, 20, MySqlParser.RULE_administrationStatement);
        try {
            this.state = 997;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 10, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 964;
                this.alterUser();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 965;
                this.createUser();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 966;
                this.dropUser();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 967;
                this.grantStatement();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 968;
                this.grantProxy();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 969;
                this.renameUser();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 970;
                this.revokeStatement();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 971;
                this.alterResourceGroup();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 972;
                this.createResourceGroup();
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 973;
                this.dropResourceGroup();
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 974;
                this.setResourceGroup();
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 975;
                this.analyzeTable();
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 976;
                this.checkTable();
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 977;
                this.checksumTable();
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 978;
                this.optimizeTable();
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 979;
                this.repairTable();
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 980;
                this.installComponent();
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 981;
                this.uninstallComponent();
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 982;
                this.installPlugin();
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 983;
                this.uninstallPlugin();
                }
                break;
            case 21:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 984;
                this.cloneStatement();
                }
                break;
            case 22:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 985;
                this.setStatement();
                }
                break;
            case 23:
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 986;
                this.showStatement();
                }
                break;
            case 24:
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 987;
                this.binlogStatement();
                }
                break;
            case 25:
                this.enterOuterAlt(localContext, 25);
                {
                this.state = 988;
                this.cacheIndexStatement();
                }
                break;
            case 26:
                this.enterOuterAlt(localContext, 26);
                {
                this.state = 989;
                this.flushStatement();
                }
                break;
            case 27:
                this.enterOuterAlt(localContext, 27);
                {
                this.state = 990;
                this.killStatement();
                }
                break;
            case 28:
                this.enterOuterAlt(localContext, 28);
                {
                this.state = 991;
                this.loadIndexIntoCache();
                }
                break;
            case 29:
                this.enterOuterAlt(localContext, 29);
                {
                this.state = 992;
                this.resetStatement();
                }
                break;
            case 30:
                this.enterOuterAlt(localContext, 30);
                {
                this.state = 993;
                this.resetPersist();
                }
                break;
            case 31:
                this.enterOuterAlt(localContext, 31);
                {
                this.state = 994;
                this.resetAllChannel();
                }
                break;
            case 32:
                this.enterOuterAlt(localContext, 32);
                {
                this.state = 995;
                this.reStartStatement();
                }
                break;
            case 33:
                this.enterOuterAlt(localContext, 33);
                {
                this.state = 996;
                this.shutdownStatement();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public utilityStatement(): UtilityStatementContext {
        let localContext = new UtilityStatementContext(this.context, this.state);
        this.enterRule(localContext, 22, MySqlParser.RULE_utilityStatement);
        try {
            this.state = 1007;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 11, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 999;
                this.fullDescribeStatement();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1000;
                this.simpleDescribeStatement();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1001;
                this.analyzeDescribeStatement();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1002;
                this.helpStatement();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 1003;
                this.useStatement();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 1004;
                this.signalStatement();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 1005;
                this.resignalStatement();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 1006;
                this.diagnosticsStatement();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createDatabase(): CreateDatabaseContext {
        let localContext = new CreateDatabaseContext(this.context, this.state);
        this.enterRule(localContext, 24, MySqlParser.RULE_createDatabase);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1009;
            this.match(MySqlParser.KW_CREATE);
            this.state = 1010;
            localContext._dbFormat = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 39 || _la === 152)) {
                localContext._dbFormat = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1012;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 12, this.context) ) {
            case 1:
                {
                this.state = 1011;
                this.ifNotExists();
                }
                break;
            }
            this.state = 1014;
            this.databaseNameCreate();
            this.state = 1018;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (((((_la - 26)) & ~0x1F) === 0 && ((1 << (_la - 26)) & 65541) !== 0) || _la === 135 || _la === 224 || _la === 376 || _la === 823) {
                {
                {
                this.state = 1015;
                this.createDatabaseOption();
                }
                }
                this.state = 1020;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createEvent(): CreateEventContext {
        let localContext = new CreateEventContext(this.context, this.state);
        this.enterRule(localContext, 26, MySqlParser.RULE_createEvent);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1021;
            this.match(MySqlParser.KW_CREATE);
            this.state = 1023;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 364) {
                {
                this.state = 1022;
                this.ownerStatement();
                }
            }

            this.state = 1025;
            this.match(MySqlParser.KW_EVENT);
            this.state = 1027;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 15, this.context) ) {
            case 1:
                {
                this.state = 1026;
                this.ifNotExists();
                }
                break;
            }
            this.state = 1029;
            localContext._event_name = this.fullId();
            this.state = 1030;
            this.match(MySqlParser.KW_ON);
            this.state = 1031;
            this.match(MySqlParser.KW_SCHEDULE);
            this.state = 1032;
            this.scheduleExpression();
            this.state = 1039;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 119) {
                {
                this.state = 1033;
                this.match(MySqlParser.KW_ON);
                this.state = 1034;
                this.match(MySqlParser.KW_COMPLETION);
                this.state = 1036;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 114) {
                    {
                    this.state = 1035;
                    this.match(MySqlParser.KW_NOT);
                    }
                }

                this.state = 1038;
                this.match(MySqlParser.KW_PRESERVE);
                }
            }

            this.state = 1042;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 368 || _la === 375) {
                {
                this.state = 1041;
                this.enableType();
                }
            }

            this.state = 1046;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 340) {
                {
                this.state = 1044;
                this.match(MySqlParser.KW_COMMENT);
                this.state = 1045;
                this.match(MySqlParser.STRING_LITERAL);
                }
            }

            this.state = 1048;
            this.match(MySqlParser.KW_DO);
            this.state = 1049;
            this.routineBody();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createIndex(): CreateIndexContext {
        let localContext = new CreateIndexContext(this.context, this.state);
        this.enterRule(localContext, 28, MySqlParser.RULE_createIndex);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1051;
            this.match(MySqlParser.KW_CREATE);
            this.state = 1053;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 508 || _la === 514) {
                {
                this.state = 1052;
                localContext._intimeAction = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 508 || _la === 514)) {
                    localContext._intimeAction = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 1056;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 69 || _la === 161 || _la === 182) {
                {
                this.state = 1055;
                localContext._indexCategory = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 69 || _la === 161 || _la === 182)) {
                    localContext._indexCategory = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 1058;
            this.match(MySqlParser.KW_INDEX);
            this.state = 1059;
            this.indexNameCreate();
            this.state = 1061;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 188) {
                {
                this.state = 1060;
                this.indexType();
                }
            }

            this.state = 1063;
            this.match(MySqlParser.KW_ON);
            this.state = 1064;
            this.tableName();
            this.state = 1065;
            this.indexColumnNames();
            this.state = 1069;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 23, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 1066;
                    this.indexOption();
                    }
                    }
                }
                this.state = 1071;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 23, this.context);
            }
            this.state = 1084;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 27, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    this.state = 1082;
                    this.errorHandler.sync(this);
                    switch (this.tokenStream.LA(1)) {
                    case MySqlParser.KW_ALGORITHM:
                        {
                        this.state = 1072;
                        this.match(MySqlParser.KW_ALGORITHM);
                        this.state = 1074;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 857) {
                            {
                            this.state = 1073;
                            this.match(MySqlParser.EQUAL_SYMBOL);
                            }
                        }

                        this.state = 1076;
                        localContext._algType = this.tokenStream.LT(1);
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 42 || _la === 357 || _la === 430)) {
                            localContext._algType = this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        }
                        break;
                    case MySqlParser.KW_LOCK:
                        {
                        this.state = 1077;
                        this.match(MySqlParser.KW_LOCK);
                        this.state = 1079;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 857) {
                            {
                            this.state = 1078;
                            this.match(MySqlParser.EQUAL_SYMBOL);
                            }
                        }

                        this.state = 1081;
                        localContext._lockType = this.tokenStream.LT(1);
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 42 || _la === 389 || _la === 505 || _la === 595)) {
                            localContext._lockType = this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    }
                }
                this.state = 1086;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 27, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createLogfileGroup(): CreateLogfileGroupContext {
        let localContext = new CreateLogfileGroupContext(this.context, this.state);
        this.enterRule(localContext, 30, MySqlParser.RULE_createLogfileGroup);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1087;
            this.match(MySqlParser.KW_CREATE);
            this.state = 1088;
            this.match(MySqlParser.KW_LOGFILE);
            this.state = 1089;
            this.match(MySqlParser.KW_GROUP);
            this.state = 1090;
            localContext._logfileGroupName = this.uid();
            this.state = 1091;
            this.match(MySqlParser.KW_ADD);
            this.state = 1092;
            this.match(MySqlParser.KW_UNDOFILE);
            this.state = 1093;
            localContext._undoFile = this.match(MySqlParser.STRING_LITERAL);
            this.state = 1099;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 428) {
                {
                this.state = 1094;
                this.match(MySqlParser.KW_INITIAL_SIZE);
                this.state = 1096;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1095;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1098;
                localContext._initSize = this.fileSizeLiteral();
                }
            }

            this.state = 1106;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 672) {
                {
                this.state = 1101;
                this.match(MySqlParser.KW_UNDO_BUFFER_SIZE);
                this.state = 1103;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1102;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1105;
                localContext._undoSize = this.fileSizeLiteral();
                }
            }

            this.state = 1113;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 553) {
                {
                this.state = 1108;
                this.match(MySqlParser.KW_REDO_BUFFER_SIZE);
                this.state = 1110;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1109;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1112;
                localContext._redoSize = this.fileSizeLiteral();
                }
            }

            this.state = 1120;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 504) {
                {
                this.state = 1115;
                this.match(MySqlParser.KW_NODEGROUP);
                this.state = 1117;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1116;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1119;
                localContext._nodegroup = this.uid();
                }
            }

            this.state = 1123;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 687) {
                {
                this.state = 1122;
                this.match(MySqlParser.KW_WAIT);
                }
            }

            this.state = 1130;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 340) {
                {
                this.state = 1125;
                this.match(MySqlParser.KW_COMMENT);
                this.state = 1127;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1126;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1129;
                localContext._comment = this.match(MySqlParser.STRING_LITERAL);
                }
            }

            this.state = 1132;
            this.match(MySqlParser.KW_ENGINE);
            this.state = 1134;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 857) {
                {
                this.state = 1133;
                this.match(MySqlParser.EQUAL_SYMBOL);
                }
            }

            this.state = 1136;
            this.engineName();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createProcedure(): CreateProcedureContext {
        let localContext = new CreateProcedureContext(this.context, this.state);
        this.enterRule(localContext, 32, MySqlParser.RULE_createProcedure);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1138;
            this.match(MySqlParser.KW_CREATE);
            this.state = 1140;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 364) {
                {
                this.state = 1139;
                this.ownerStatement();
                }
            }

            this.state = 1142;
            this.match(MySqlParser.KW_PROCEDURE);
            this.state = 1144;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 41, this.context) ) {
            case 1:
                {
                this.state = 1143;
                this.ifNotExists();
                }
                break;
            }
            this.state = 1146;
            localContext._sp_name = this.fullId();
            this.state = 1147;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 1149;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18880593) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100680481) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                {
                this.state = 1148;
                this.procedureParameter();
                }
            }

            this.state = 1155;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 1151;
                this.match(MySqlParser.COMMA);
                this.state = 1152;
                this.procedureParameter();
                }
                }
                this.state = 1157;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 1158;
            this.match(MySqlParser.RR_BRACKET);
            this.state = 1162;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 44, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 1159;
                    this.routineOption();
                    }
                    }
                }
                this.state = 1164;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 44, this.context);
            }
            this.state = 1165;
            this.routineBody();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createRole(): CreateRoleContext {
        let localContext = new CreateRoleContext(this.context, this.state);
        this.enterRule(localContext, 34, MySqlParser.RULE_createRole);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1167;
            this.match(MySqlParser.KW_CREATE);
            this.state = 1168;
            this.match(MySqlParser.KW_ROLE);
            this.state = 1170;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 45, this.context) ) {
            case 1:
                {
                this.state = 1169;
                this.ifNotExists();
                }
                break;
            }
            this.state = 1172;
            this.userOrRoleNames();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createServer(): CreateServerContext {
        let localContext = new CreateServerContext(this.context, this.state);
        this.enterRule(localContext, 36, MySqlParser.RULE_createServer);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1174;
            this.match(MySqlParser.KW_CREATE);
            this.state = 1175;
            this.match(MySqlParser.KW_SERVER);
            this.state = 1176;
            localContext._servername = this.uid();
            this.state = 1177;
            this.match(MySqlParser.KW_FOREIGN);
            this.state = 1178;
            this.match(MySqlParser.KW_DATA);
            this.state = 1179;
            this.match(MySqlParser.KW_WRAPPER);
            this.state = 1180;
            localContext._wrapperName = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 494 || _la === 882)) {
                localContext._wrapperName = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1181;
            this.match(MySqlParser.KW_OPTIONS);
            this.state = 1182;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 1183;
            this.serverOption();
            this.state = 1188;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 1184;
                this.match(MySqlParser.COMMA);
                this.state = 1185;
                this.serverOption();
                }
                }
                this.state = 1190;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 1191;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createTable(): CreateTableContext {
        let localContext = new CreateTableContext(this.context, this.state);
        this.enterRule(localContext, 38, MySqlParser.RULE_createTable);
        let _la: number;
        try {
            let alternative: number;
            this.state = 1271;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 65, this.context) ) {
            case 1:
                localContext = new QueryCreateTableContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1193;
                this.match(MySqlParser.KW_CREATE);
                this.state = 1195;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 660) {
                    {
                    this.state = 1194;
                    this.match(MySqlParser.KW_TEMPORARY);
                    }
                }

                this.state = 1197;
                this.match(MySqlParser.KW_TABLE);
                this.state = 1199;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 48, this.context) ) {
                case 1:
                    {
                    this.state = 1198;
                    this.ifNotExists();
                    }
                    break;
                }
                this.state = 1201;
                (localContext as QueryCreateTableContext)._tb = this.tableNameCreate();
                this.state = 1203;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 49, this.context) ) {
                case 1:
                    {
                    this.state = 1202;
                    (localContext as QueryCreateTableContext)._col = this.createDefinitions();
                    }
                    break;
                }
                this.state = 1215;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 26)) & ~0x1F) === 0 && ((1 << (_la - 26)) & 65541) !== 0) || _la === 82 || _la === 181 || _la === 224 || ((((_la - 314)) & ~0x1F) === 0 && ((1 << (_la - 314)) & 67141639) !== 0) || ((((_la - 346)) & ~0x1F) === 0 && ((1 << (_la - 346)) & 3221766153) !== 0) || _la === 380 || _la === 431 || _la === 443 || _la === 480 || _la === 490 || ((((_la - 520)) & ~0x1F) === 0 && ((1 << (_la - 520)) & 541) !== 0) || _la === 588 || ((((_la - 640)) & ~0x1F) === 0 && ((1 << (_la - 640)) & 34341021) !== 0) || ((((_la - 823)) & ~0x1F) === 0 && ((1 << (_la - 823)) & 1029) !== 0) || _la === 882) {
                    {
                    this.state = 1205;
                    this.tableOption();
                    this.state = 1212;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (((((_la - 26)) & ~0x1F) === 0 && ((1 << (_la - 26)) & 65541) !== 0) || _la === 82 || _la === 181 || _la === 224 || ((((_la - 314)) & ~0x1F) === 0 && ((1 << (_la - 314)) & 67141639) !== 0) || ((((_la - 346)) & ~0x1F) === 0 && ((1 << (_la - 346)) & 3221766153) !== 0) || _la === 380 || _la === 431 || _la === 443 || _la === 480 || _la === 490 || ((((_la - 520)) & ~0x1F) === 0 && ((1 << (_la - 520)) & 541) !== 0) || _la === 588 || ((((_la - 640)) & ~0x1F) === 0 && ((1 << (_la - 640)) & 34341021) !== 0) || ((((_la - 823)) & ~0x1F) === 0 && ((1 << (_la - 823)) & 1029) !== 0) || _la === 868 || _la === 882) {
                        {
                        {
                        this.state = 1207;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 868) {
                            {
                            this.state = 1206;
                            this.match(MySqlParser.COMMA);
                            }
                        }

                        this.state = 1209;
                        this.tableOption();
                        }
                        }
                        this.state = 1214;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    }
                }

                this.state = 1218;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 130) {
                    {
                    this.state = 1217;
                    this.partitionDefinitions();
                    }
                }

                this.state = 1221;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 79 || _la === 143) {
                    {
                    this.state = 1220;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 79 || _la === 143)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 1224;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 13) {
                    {
                    this.state = 1223;
                    this.match(MySqlParser.KW_AS);
                    }
                }

                this.state = 1226;
                this.selectStatement();
                }
                break;
            case 2:
                localContext = new CopyCreateTableContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1228;
                this.match(MySqlParser.KW_CREATE);
                this.state = 1230;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 660) {
                    {
                    this.state = 1229;
                    this.match(MySqlParser.KW_TEMPORARY);
                    }
                }

                this.state = 1232;
                this.match(MySqlParser.KW_TABLE);
                this.state = 1234;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 57, this.context) ) {
                case 1:
                    {
                    this.state = 1233;
                    this.ifNotExists();
                    }
                    break;
                }
                this.state = 1236;
                this.tableNameCreate();
                this.state = 1244;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_LIKE:
                    {
                    this.state = 1237;
                    this.match(MySqlParser.KW_LIKE);
                    this.state = 1238;
                    this.tableName();
                    }
                    break;
                case MySqlParser.LR_BRACKET:
                    {
                    this.state = 1239;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 1240;
                    this.match(MySqlParser.KW_LIKE);
                    this.state = 1241;
                    this.tableName();
                    this.state = 1242;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 3:
                localContext = new ColumnCreateTableContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1246;
                this.match(MySqlParser.KW_CREATE);
                this.state = 1248;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 660) {
                    {
                    this.state = 1247;
                    this.match(MySqlParser.KW_TEMPORARY);
                    }
                }

                this.state = 1250;
                this.match(MySqlParser.KW_TABLE);
                this.state = 1252;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 60, this.context) ) {
                case 1:
                    {
                    this.state = 1251;
                    this.ifNotExists();
                    }
                    break;
                }
                this.state = 1254;
                this.tableNameCreate();
                this.state = 1255;
                this.createDefinitions();
                this.state = 1266;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 63, this.context) ) {
                case 1:
                    {
                    this.state = 1256;
                    this.tableOption();
                    this.state = 1263;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 62, this.context);
                    while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                        if (alternative === 1) {
                            {
                            {
                            this.state = 1258;
                            this.errorHandler.sync(this);
                            _la = this.tokenStream.LA(1);
                            if (_la === 868) {
                                {
                                this.state = 1257;
                                this.match(MySqlParser.COMMA);
                                }
                            }

                            this.state = 1260;
                            this.tableOption();
                            }
                            }
                        }
                        this.state = 1265;
                        this.errorHandler.sync(this);
                        alternative = this.interpreter.adaptivePredict(this.tokenStream, 62, this.context);
                    }
                    }
                    break;
                }
                this.state = 1269;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 130) {
                    {
                    this.state = 1268;
                    this.partitionDefinitions();
                    }
                }

                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createTablespaceInnodb(): CreateTablespaceInnodbContext {
        let localContext = new CreateTablespaceInnodbContext(this.context, this.state);
        this.enterRule(localContext, 40, MySqlParser.RULE_createTablespaceInnodb);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1273;
            this.match(MySqlParser.KW_CREATE);
            this.state = 1275;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 180) {
                {
                this.state = 1274;
                this.match(MySqlParser.KW_UNDO);
                }
            }

            this.state = 1277;
            this.match(MySqlParser.KW_TABLESPACE);
            this.state = 1278;
            this.tablespaceNameCreate();
            this.state = 1282;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 6) {
                {
                this.state = 1279;
                this.match(MySqlParser.KW_ADD);
                this.state = 1280;
                this.match(MySqlParser.KW_DATAFILE);
                this.state = 1281;
                localContext._datafile = this.match(MySqlParser.STRING_LITERAL);
                }
            }

            this.state = 1289;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 314) {
                {
                this.state = 1284;
                this.match(MySqlParser.KW_AUTOEXTEND_SIZE);
                this.state = 1286;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1285;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1288;
                localContext._autoextendSize = this.fileSizeLiteral();
                }
            }

            this.state = 1294;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 399) {
                {
                this.state = 1291;
                this.match(MySqlParser.KW_FILE_BLOCK_SIZE);
                this.state = 1292;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 1293;
                localContext._fileBlockSize = this.fileSizeLiteral();
                }
            }

            this.state = 1301;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 380) {
                {
                this.state = 1296;
                this.match(MySqlParser.KW_ENGINE);
                this.state = 1298;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1297;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1300;
                this.engineName();
                }
            }

            this.state = 1308;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 825) {
                {
                this.state = 1303;
                this.match(MySqlParser.KW_ENGINE_ATTRIBUTE);
                this.state = 1305;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1304;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1307;
                this.match(MySqlParser.STRING_LITERAL);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createTablespaceNdb(): CreateTablespaceNdbContext {
        let localContext = new CreateTablespaceNdbContext(this.context, this.state);
        this.enterRule(localContext, 42, MySqlParser.RULE_createTablespaceNdb);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1310;
            this.match(MySqlParser.KW_CREATE);
            this.state = 1312;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 180) {
                {
                this.state = 1311;
                this.match(MySqlParser.KW_UNDO);
                }
            }

            this.state = 1314;
            this.match(MySqlParser.KW_TABLESPACE);
            this.state = 1315;
            this.tablespaceNameCreate();
            this.state = 1316;
            this.match(MySqlParser.KW_ADD);
            this.state = 1317;
            this.match(MySqlParser.KW_DATAFILE);
            this.state = 1318;
            localContext._datafile = this.match(MySqlParser.STRING_LITERAL);
            this.state = 1319;
            this.match(MySqlParser.KW_USE);
            this.state = 1320;
            this.match(MySqlParser.KW_LOGFILE);
            this.state = 1321;
            this.match(MySqlParser.KW_GROUP);
            this.state = 1322;
            localContext._logfileGroupName = this.uid();
            this.state = 1328;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 393) {
                {
                this.state = 1323;
                this.match(MySqlParser.KW_EXTENT_SIZE);
                this.state = 1325;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1324;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1327;
                localContext._extentSize = this.fileSizeLiteral();
                }
            }

            this.state = 1335;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 428) {
                {
                this.state = 1330;
                this.match(MySqlParser.KW_INITIAL_SIZE);
                this.state = 1332;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1331;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1334;
                localContext._initialSize = this.fileSizeLiteral();
                }
            }

            this.state = 1342;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 314) {
                {
                this.state = 1337;
                this.match(MySqlParser.KW_AUTOEXTEND_SIZE);
                this.state = 1339;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1338;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1341;
                localContext._autoextendSize = this.fileSizeLiteral();
                }
            }

            this.state = 1349;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 481) {
                {
                this.state = 1344;
                this.match(MySqlParser.KW_MAX_SIZE);
                this.state = 1346;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1345;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1348;
                localContext._maxSize = this.fileSizeLiteral();
                }
            }

            this.state = 1356;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 504) {
                {
                this.state = 1351;
                this.match(MySqlParser.KW_NODEGROUP);
                this.state = 1353;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1352;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1355;
                localContext._nodegroup = this.uid();
                }
            }

            this.state = 1359;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 687) {
                {
                this.state = 1358;
                this.match(MySqlParser.KW_WAIT);
                }
            }

            this.state = 1366;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 340) {
                {
                this.state = 1361;
                this.match(MySqlParser.KW_COMMENT);
                this.state = 1363;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1362;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1365;
                localContext._comment = this.match(MySqlParser.STRING_LITERAL);
                }
            }

            this.state = 1368;
            this.match(MySqlParser.KW_ENGINE);
            this.state = 1370;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 857) {
                {
                this.state = 1369;
                this.match(MySqlParser.EQUAL_SYMBOL);
                }
            }

            this.state = 1372;
            this.engineName();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createTrigger(): CreateTriggerContext {
        let localContext = new CreateTriggerContext(this.context, this.state);
        this.enterRule(localContext, 44, MySqlParser.RULE_createTrigger);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1374;
            this.match(MySqlParser.KW_CREATE);
            this.state = 1376;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 364) {
                {
                this.state = 1375;
                this.ownerStatement();
                }
            }

            this.state = 1378;
            this.match(MySqlParser.KW_TRIGGER);
            this.state = 1380;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 91, this.context) ) {
            case 1:
                {
                this.state = 1379;
                this.ifNotExists();
                }
                break;
            }
            this.state = 1382;
            localContext._trigger_name = this.fullId();
            this.state = 1383;
            localContext._triggerTime = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 16 || _la === 306)) {
                localContext._triggerTime = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1384;
            localContext._triggerEvent = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 44 || _la === 86 || _la === 185)) {
                localContext._triggerEvent = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1385;
            this.match(MySqlParser.KW_ON);
            this.state = 1386;
            this.tableName();
            this.state = 1387;
            this.match(MySqlParser.KW_FOR);
            this.state = 1388;
            this.match(MySqlParser.KW_EACH);
            this.state = 1389;
            this.match(MySqlParser.KW_ROW);
            this.state = 1392;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 92, this.context) ) {
            case 1:
                {
                this.state = 1390;
                localContext._triggerPlace = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 406 || _la === 538)) {
                    localContext._triggerPlace = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 1391;
                localContext._other_trigger_name = this.fullId();
                }
                break;
            }
            this.state = 1394;
            this.routineBody();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public withClause(): WithClauseContext {
        let localContext = new WithClauseContext(this.context, this.state);
        this.enterRule(localContext, 46, MySqlParser.RULE_withClause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1396;
            this.match(MySqlParser.KW_WITH);
            this.state = 1398;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 93, this.context) ) {
            case 1:
                {
                this.state = 1397;
                this.match(MySqlParser.KW_RECURSIVE);
                }
                break;
            }
            this.state = 1400;
            this.commonTableExpressions();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public commonTableExpressions(): CommonTableExpressionsContext {
        let localContext = new CommonTableExpressionsContext(this.context, this.state);
        this.enterRule(localContext, 48, MySqlParser.RULE_commonTableExpressions);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1402;
            localContext._cteName = this.uid();
            this.state = 1414;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 866) {
                {
                this.state = 1403;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 1404;
                localContext._cteColumnName = this.uid();
                this.state = 1409;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 1405;
                    this.match(MySqlParser.COMMA);
                    this.state = 1406;
                    localContext._cteColumnName = this.uid();
                    }
                    }
                    this.state = 1411;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 1412;
                this.match(MySqlParser.RR_BRACKET);
                }
            }

            this.state = 1416;
            this.match(MySqlParser.KW_AS);
            this.state = 1417;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 1418;
            this.dmlStatement();
            this.state = 1419;
            this.match(MySqlParser.RR_BRACKET);
            this.state = 1422;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 96, this.context) ) {
            case 1:
                {
                this.state = 1420;
                this.match(MySqlParser.COMMA);
                this.state = 1421;
                this.commonTableExpressions();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createView(): CreateViewContext {
        let localContext = new CreateViewContext(this.context, this.state);
        this.enterRule(localContext, 50, MySqlParser.RULE_createView);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1424;
            this.match(MySqlParser.KW_CREATE);
            this.state = 1426;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 124) {
                {
                this.state = 1425;
                this.orReplace();
                }
            }

            this.state = 1431;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 308) {
                {
                this.state = 1428;
                this.match(MySqlParser.KW_ALGORITHM);
                this.state = 1429;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 1430;
                localContext._algType = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 486 || _la === 661 || _la === 670)) {
                    localContext._algType = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 1434;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 364) {
                {
                this.state = 1433;
                this.ownerStatement();
                }
            }

            this.state = 1439;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 162) {
                {
                this.state = 1436;
                this.match(MySqlParser.KW_SQL);
                this.state = 1437;
                this.match(MySqlParser.KW_SECURITY);
                this.state = 1438;
                localContext._secContext = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 364 || _la === 436)) {
                    localContext._secContext = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 1441;
            this.match(MySqlParser.KW_VIEW);
            this.state = 1442;
            this.viewNameCreate();
            this.state = 1454;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 866) {
                {
                this.state = 1443;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 1444;
                this.columnNameCreate();
                this.state = 1449;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 1445;
                    this.match(MySqlParser.COMMA);
                    this.state = 1446;
                    this.columnNameCreate();
                    }
                    }
                    this.state = 1451;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 1452;
                this.match(MySqlParser.RR_BRACKET);
                }
            }

            this.state = 1456;
            this.match(MySqlParser.KW_AS);
            this.state = 1476;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 107, this.context) ) {
            case 1:
                {
                this.state = 1457;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 1459;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 194) {
                    {
                    this.state = 1458;
                    this.withClause();
                    }
                }

                this.state = 1461;
                this.selectStatement();
                this.state = 1462;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 2:
                {
                this.state = 1465;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 194) {
                    {
                    this.state = 1464;
                    this.withClause();
                    }
                }

                this.state = 1467;
                this.selectStatement();
                this.state = 1474;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 106, this.context) ) {
                case 1:
                    {
                    this.state = 1468;
                    this.match(MySqlParser.KW_WITH);
                    this.state = 1470;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 325 || _la === 450) {
                        {
                        this.state = 1469;
                        localContext._checkOption = this.tokenStream.LT(1);
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 325 || _la === 450)) {
                            localContext._checkOption = this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        }
                    }

                    this.state = 1472;
                    this.match(MySqlParser.KW_CHECK);
                    this.state = 1473;
                    this.match(MySqlParser.KW_OPTION);
                    }
                    break;
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createDatabaseOption(): CreateDatabaseOptionContext {
        let localContext = new CreateDatabaseOptionContext(this.context, this.state);
        this.enterRule(localContext, 52, MySqlParser.RULE_createDatabaseOption);
        let _la: number;
        try {
            this.state = 1511;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 116, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1479;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 42) {
                    {
                    this.state = 1478;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                }

                this.state = 1481;
                this.charSet();
                this.state = 1483;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1482;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1487;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                    {
                    this.state = 1485;
                    this.charsetName();
                    }
                    break;
                case MySqlParser.KW_DEFAULT:
                    {
                    this.state = 1486;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1490;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 42) {
                    {
                    this.state = 1489;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                }

                this.state = 1492;
                this.match(MySqlParser.KW_COLLATE);
                this.state = 1494;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1493;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1496;
                this.collationName();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1498;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 42) {
                    {
                    this.state = 1497;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                }

                this.state = 1500;
                this.match(MySqlParser.KW_ENCRYPTION);
                this.state = 1502;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1501;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1504;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1505;
                this.match(MySqlParser.KW_READ);
                this.state = 1506;
                this.match(MySqlParser.KW_ONLY);
                this.state = 1508;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1507;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1510;
                _la = this.tokenStream.LA(1);
                if(!(_la === 42 || _la === 871 || _la === 872)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public charSet(): CharSetContext {
        let localContext = new CharSetContext(this.context, this.state);
        this.enterRule(localContext, 54, MySqlParser.RULE_charSet);
        try {
            this.state = 1518;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_CHARACTER:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1513;
                this.match(MySqlParser.KW_CHARACTER);
                this.state = 1514;
                this.match(MySqlParser.KW_SET);
                }
                break;
            case MySqlParser.KW_CHARSET:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1515;
                this.match(MySqlParser.KW_CHARSET);
                }
                break;
            case MySqlParser.KW_CHAR:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1516;
                this.match(MySqlParser.KW_CHAR);
                this.state = 1517;
                this.match(MySqlParser.KW_SET);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public currentUserExpression(): CurrentUserExpressionContext {
        let localContext = new CurrentUserExpressionContext(this.context, this.state);
        this.enterRule(localContext, 56, MySqlParser.RULE_currentUserExpression);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1520;
            _la = this.tokenStream.LA(1);
            if(!(_la === 37 || _la === 678)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1523;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 118, this.context) ) {
            case 1:
                {
                this.state = 1521;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 1522;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public ownerStatement(): OwnerStatementContext {
        let localContext = new OwnerStatementContext(this.context, this.state);
        this.enterRule(localContext, 58, MySqlParser.RULE_ownerStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1525;
            this.match(MySqlParser.KW_DEFINER);
            this.state = 1526;
            this.match(MySqlParser.EQUAL_SYMBOL);
            this.state = 1529;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 119, this.context) ) {
            case 1:
                {
                this.state = 1527;
                this.userName();
                }
                break;
            case 2:
                {
                this.state = 1528;
                this.currentUserExpression();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public scheduleExpression(): ScheduleExpressionContext {
        let localContext = new ScheduleExpressionContext(this.context, this.state);
        this.enterRule(localContext, 60, MySqlParser.RULE_scheduleExpression);
        let _la: number;
        try {
            this.state = 1565;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_AT:
                localContext = new PreciseScheduleContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1531;
                this.match(MySqlParser.KW_AT);
                this.state = 1532;
                this.timestampValue();
                this.state = 1536;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 853) {
                    {
                    {
                    this.state = 1533;
                    this.intervalExpr();
                    }
                    }
                    this.state = 1538;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case MySqlParser.KW_EVERY:
                localContext = new IntervalScheduleContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1539;
                this.match(MySqlParser.KW_EVERY);
                this.state = 1542;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 121, this.context) ) {
                case 1:
                    {
                    this.state = 1540;
                    this.decimalLiteral();
                    }
                    break;
                case 2:
                    {
                    this.state = 1541;
                    this.expression(0);
                    }
                    break;
                }
                this.state = 1544;
                this.intervalType();
                this.state = 1553;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 641) {
                    {
                    this.state = 1545;
                    this.match(MySqlParser.KW_STARTS);
                    this.state = 1546;
                    (localContext as IntervalScheduleContext)._startTimestamp = this.timestampValue();
                    this.state = 1550;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 853) {
                        {
                        {
                        this.state = 1547;
                        (localContext as IntervalScheduleContext)._intervalExpr = this.intervalExpr();
                        (localContext as IntervalScheduleContext)._startIntervals.push((localContext as IntervalScheduleContext)._intervalExpr);
                        }
                        }
                        this.state = 1552;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    }
                }

                this.state = 1563;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 379) {
                    {
                    this.state = 1555;
                    this.match(MySqlParser.KW_ENDS);
                    this.state = 1556;
                    (localContext as IntervalScheduleContext)._endTimestamp = this.timestampValue();
                    this.state = 1560;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 853) {
                        {
                        {
                        this.state = 1557;
                        (localContext as IntervalScheduleContext)._intervalExpr = this.intervalExpr();
                        (localContext as IntervalScheduleContext)._endIntervals.push((localContext as IntervalScheduleContext)._intervalExpr);
                        }
                        }
                        this.state = 1562;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    }
                }

                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public timestampValue(): TimestampValueContext {
        let localContext = new TimestampValueContext(this.context, this.state);
        this.enterRule(localContext, 62, MySqlParser.RULE_timestampValue);
        try {
            this.state = 1571;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 127, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1567;
                this.match(MySqlParser.KW_CURRENT_TIMESTAMP);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1568;
                this.stringLiteral();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1569;
                this.decimalLiteral();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1570;
                this.expression(0);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public intervalExpr(): IntervalExprContext {
        let localContext = new IntervalExprContext(this.context, this.state);
        this.enterRule(localContext, 64, MySqlParser.RULE_intervalExpr);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1573;
            this.match(MySqlParser.PLUS);
            this.state = 1574;
            this.match(MySqlParser.KW_INTERVAL);
            this.state = 1577;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 128, this.context) ) {
            case 1:
                {
                this.state = 1575;
                this.decimalLiteral();
                }
                break;
            case 2:
                {
                this.state = 1576;
                this.expression(0);
                }
                break;
            }
            this.state = 1579;
            this.intervalType();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public intervalType(): IntervalTypeContext {
        let localContext = new IntervalTypeContext(this.context, this.state);
        this.enterRule(localContext, 66, MySqlParser.RULE_intervalType);
        try {
            this.state = 1594;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_QUARTER:
            case MySqlParser.KW_MONTH:
            case MySqlParser.KW_DAY:
            case MySqlParser.KW_HOUR:
            case MySqlParser.KW_MINUTE:
            case MySqlParser.KW_WEEK:
            case MySqlParser.KW_SECOND:
            case MySqlParser.KW_MICROSECOND:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1581;
                this.intervalTypeBase();
                }
                break;
            case MySqlParser.KW_YEAR:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1582;
                this.match(MySqlParser.KW_YEAR);
                }
                break;
            case MySqlParser.KW_YEAR_MONTH:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1583;
                this.match(MySqlParser.KW_YEAR_MONTH);
                }
                break;
            case MySqlParser.KW_DAY_HOUR:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1584;
                this.match(MySqlParser.KW_DAY_HOUR);
                }
                break;
            case MySqlParser.KW_DAY_MINUTE:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 1585;
                this.match(MySqlParser.KW_DAY_MINUTE);
                }
                break;
            case MySqlParser.KW_DAY_SECOND:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 1586;
                this.match(MySqlParser.KW_DAY_SECOND);
                }
                break;
            case MySqlParser.KW_HOUR_MINUTE:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 1587;
                this.match(MySqlParser.KW_HOUR_MINUTE);
                }
                break;
            case MySqlParser.KW_HOUR_SECOND:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 1588;
                this.match(MySqlParser.KW_HOUR_SECOND);
                }
                break;
            case MySqlParser.KW_MINUTE_SECOND:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 1589;
                this.match(MySqlParser.KW_MINUTE_SECOND);
                }
                break;
            case MySqlParser.KW_SECOND_MICROSECOND:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 1590;
                this.match(MySqlParser.KW_SECOND_MICROSECOND);
                }
                break;
            case MySqlParser.KW_MINUTE_MICROSECOND:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 1591;
                this.match(MySqlParser.KW_MINUTE_MICROSECOND);
                }
                break;
            case MySqlParser.KW_HOUR_MICROSECOND:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 1592;
                this.match(MySqlParser.KW_HOUR_MICROSECOND);
                }
                break;
            case MySqlParser.KW_DAY_MICROSECOND:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 1593;
                this.match(MySqlParser.KW_DAY_MICROSECOND);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public enableType(): EnableTypeContext {
        let localContext = new EnableTypeContext(this.context, this.state);
        this.enterRule(localContext, 68, MySqlParser.RULE_enableType);
        try {
            this.state = 1601;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 130, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1596;
                this.match(MySqlParser.KW_ENABLE);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1597;
                this.match(MySqlParser.KW_DISABLE);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1598;
                this.match(MySqlParser.KW_DISABLE);
                this.state = 1599;
                this.match(MySqlParser.KW_ON);
                this.state = 1600;
                this.match(MySqlParser.KW_SLAVE);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public indexType(): IndexTypeContext {
        let localContext = new IndexTypeContext(this.context, this.state);
        this.enterRule(localContext, 70, MySqlParser.RULE_indexType);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1603;
            this.match(MySqlParser.KW_USING);
            this.state = 1604;
            _la = this.tokenStream.LA(1);
            if(!(_la === 323 || _la === 418)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public indexOption(): IndexOptionContext {
        let localContext = new IndexOptionContext(this.context, this.state);
        this.enterRule(localContext, 72, MySqlParser.RULE_indexOption);
        let _la: number;
        try {
            this.state = 1628;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_KEY_BLOCK_SIZE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1606;
                this.match(MySqlParser.KW_KEY_BLOCK_SIZE);
                this.state = 1608;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1607;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1610;
                this.fileSizeLiteral();
                }
                break;
            case MySqlParser.KW_USING:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1611;
                this.indexType();
                }
                break;
            case MySqlParser.KW_WITH:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1612;
                this.match(MySqlParser.KW_WITH);
                this.state = 1613;
                this.match(MySqlParser.KW_PARSER);
                this.state = 1614;
                localContext._parserName = this.uid();
                }
                break;
            case MySqlParser.KW_COMMENT:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1615;
                this.match(MySqlParser.KW_COMMENT);
                this.state = 1616;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_INVISIBLE:
            case MySqlParser.KW_VISIBLE:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 1617;
                _la = this.tokenStream.LA(1);
                if(!(_la === 435 || _la === 686)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_ENGINE_ATTRIBUTE:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 1618;
                this.match(MySqlParser.KW_ENGINE_ATTRIBUTE);
                this.state = 1620;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1619;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1622;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 1623;
                this.match(MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE);
                this.state = 1625;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1624;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1627;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public procedureParameter(): ProcedureParameterContext {
        let localContext = new ProcedureParameterContext(this.context, this.state);
        this.enterRule(localContext, 74, MySqlParser.RULE_procedureParameter);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1631;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 80 || _la === 85 || _la === 126) {
                {
                this.state = 1630;
                localContext._direction = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 80 || _la === 85 || _la === 126)) {
                    localContext._direction = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 1633;
            localContext._paramName = this.uid();
            this.state = 1634;
            this.dataType();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public routineOption(): RoutineOptionContext {
        let localContext = new RoutineOptionContext(this.context, this.state);
        this.enterRule(localContext, 76, MySqlParser.RULE_routineOption);
        let _la: number;
        try {
            this.state = 1659;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_COMMENT:
                localContext = new RoutineCommentContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1636;
                this.match(MySqlParser.KW_COMMENT);
                this.state = 1637;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_LANGUAGE:
                localContext = new RoutineLanguageContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1638;
                this.match(MySqlParser.KW_LANGUAGE);
                this.state = 1639;
                this.match(MySqlParser.KW_SQL);
                }
                break;
            case MySqlParser.KW_DETERMINISTIC:
            case MySqlParser.KW_NOT:
                localContext = new RoutineBehaviorContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1641;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 114) {
                    {
                    this.state = 1640;
                    this.match(MySqlParser.KW_NOT);
                    }
                }

                this.state = 1643;
                this.match(MySqlParser.KW_DETERMINISTIC);
                }
                break;
            case MySqlParser.KW_MODIFIES:
            case MySqlParser.KW_READS:
            case MySqlParser.KW_CONTAINS:
            case MySqlParser.KW_NO:
                localContext = new RoutineDataContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1654;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_CONTAINS:
                    {
                    this.state = 1644;
                    this.match(MySqlParser.KW_CONTAINS);
                    this.state = 1645;
                    this.match(MySqlParser.KW_SQL);
                    }
                    break;
                case MySqlParser.KW_NO:
                    {
                    this.state = 1646;
                    this.match(MySqlParser.KW_NO);
                    this.state = 1647;
                    this.match(MySqlParser.KW_SQL);
                    }
                    break;
                case MySqlParser.KW_READS:
                    {
                    this.state = 1648;
                    this.match(MySqlParser.KW_READS);
                    this.state = 1649;
                    this.match(MySqlParser.KW_SQL);
                    this.state = 1650;
                    this.match(MySqlParser.KW_DATA);
                    }
                    break;
                case MySqlParser.KW_MODIFIES:
                    {
                    this.state = 1651;
                    this.match(MySqlParser.KW_MODIFIES);
                    this.state = 1652;
                    this.match(MySqlParser.KW_SQL);
                    this.state = 1653;
                    this.match(MySqlParser.KW_DATA);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case MySqlParser.KW_SQL:
                localContext = new RoutineSecurityContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 1656;
                this.match(MySqlParser.KW_SQL);
                this.state = 1657;
                this.match(MySqlParser.KW_SECURITY);
                this.state = 1658;
                (localContext as RoutineSecurityContext)._context = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 364 || _la === 436)) {
                    (localContext as RoutineSecurityContext)._context = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public serverOption(): ServerOptionContext {
        let localContext = new ServerOptionContext(this.context, this.state);
        this.enterRule(localContext, 78, MySqlParser.RULE_serverOption);
        try {
            this.state = 1675;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_HOST:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1661;
                this.match(MySqlParser.KW_HOST);
                this.state = 1662;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_DATABASE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1663;
                this.match(MySqlParser.KW_DATABASE);
                this.state = 1664;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_USER:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1665;
                this.match(MySqlParser.KW_USER);
                this.state = 1666;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_PASSWORD:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1667;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 1668;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_SOCKET:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 1669;
                this.match(MySqlParser.KW_SOCKET);
                this.state = 1670;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_OWNER:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 1671;
                this.match(MySqlParser.KW_OWNER);
                this.state = 1672;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_PORT:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 1673;
                this.match(MySqlParser.KW_PORT);
                this.state = 1674;
                this.decimalLiteral();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createDefinitions(): CreateDefinitionsContext {
        let localContext = new CreateDefinitionsContext(this.context, this.state);
        this.enterRule(localContext, 80, MySqlParser.RULE_createDefinitions);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1677;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 1678;
            this.createDefinition();
            this.state = 1683;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 1679;
                this.match(MySqlParser.COMMA);
                this.state = 1680;
                this.createDefinition();
                }
                }
                this.state = 1685;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 1686;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createDefinition(): CreateDefinitionContext {
        let localContext = new CreateDefinitionContext(this.context, this.state);
        this.enterRule(localContext, 82, MySqlParser.RULE_createDefinition);
        let _la: number;
        try {
            this.state = 1771;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 157, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1688;
                this.columnNameCreate();
                this.state = 1689;
                this.columnDefinition();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1691;
                _la = this.tokenStream.LA(1);
                if(!(_la === 82 || _la === 92)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 1693;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                    {
                    this.state = 1692;
                    this.indexName();
                    }
                }

                this.state = 1696;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 188) {
                    {
                    this.state = 1695;
                    this.indexType();
                    }
                }

                this.state = 1698;
                this.indexColumnNames();
                this.state = 1702;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 188 || _la === 194 || _la === 340 || _la === 435 || _la === 443 || _la === 686 || _la === 825 || _la === 833) {
                    {
                    {
                    this.state = 1699;
                    this.indexOption();
                    }
                    }
                    this.state = 1704;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1705;
                _la = this.tokenStream.LA(1);
                if(!(_la === 69 || _la === 161)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 1707;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 82 || _la === 92) {
                    {
                    this.state = 1706;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 82 || _la === 92)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 1710;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                    {
                    this.state = 1709;
                    this.indexName();
                    }
                }

                this.state = 1712;
                this.indexColumnNames();
                this.state = 1716;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 188 || _la === 194 || _la === 340 || _la === 435 || _la === 443 || _la === 686 || _la === 825 || _la === 833) {
                    {
                    {
                    this.state = 1713;
                    this.indexOption();
                    }
                    }
                    this.state = 1718;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1720;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 31) {
                    {
                    this.state = 1719;
                    this.constraintSymbol();
                    }
                }

                this.state = 1722;
                this.match(MySqlParser.KW_PRIMARY);
                this.state = 1723;
                this.match(MySqlParser.KW_KEY);
                this.state = 1725;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 188) {
                    {
                    this.state = 1724;
                    this.indexType();
                    }
                }

                this.state = 1727;
                this.indexColumnNames();
                this.state = 1731;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 188 || _la === 194 || _la === 340 || _la === 435 || _la === 443 || _la === 686 || _la === 825 || _la === 833) {
                    {
                    {
                    this.state = 1728;
                    this.indexOption();
                    }
                    }
                    this.state = 1733;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 1735;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 31) {
                    {
                    this.state = 1734;
                    this.constraintSymbol();
                    }
                }

                this.state = 1737;
                this.match(MySqlParser.KW_UNIQUE);
                this.state = 1739;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 82 || _la === 92) {
                    {
                    this.state = 1738;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 82 || _la === 92)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 1742;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                    {
                    this.state = 1741;
                    this.indexName();
                    }
                }

                this.state = 1745;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 188) {
                    {
                    this.state = 1744;
                    this.indexType();
                    }
                }

                this.state = 1747;
                this.indexColumnNames();
                this.state = 1751;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 188 || _la === 194 || _la === 340 || _la === 435 || _la === 443 || _la === 686 || _la === 825 || _la === 833) {
                    {
                    {
                    this.state = 1748;
                    this.indexOption();
                    }
                    }
                    this.state = 1753;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 1755;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 31) {
                    {
                    this.state = 1754;
                    this.constraintSymbol();
                    }
                }

                this.state = 1757;
                this.match(MySqlParser.KW_FOREIGN);
                this.state = 1758;
                this.match(MySqlParser.KW_KEY);
                this.state = 1760;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                    {
                    this.state = 1759;
                    this.indexName();
                    }
                }

                this.state = 1762;
                this.indexColumnNames();
                this.state = 1763;
                this.referenceDefinition();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 1765;
                this.match(MySqlParser.KW_CHECK);
                this.state = 1766;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 1767;
                this.expression(0);
                this.state = 1768;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 1770;
                this.checkConstraintDefinition();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public checkConstraintDefinition(): CheckConstraintDefinitionContext {
        let localContext = new CheckConstraintDefinitionContext(this.context, this.state);
        this.enterRule(localContext, 84, MySqlParser.RULE_checkConstraintDefinition);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1774;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 31) {
                {
                this.state = 1773;
                this.constraintSymbol();
                }
            }

            this.state = 1776;
            this.match(MySqlParser.KW_CHECK);
            this.state = 1777;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 1778;
            this.expression(0);
            this.state = 1779;
            this.match(MySqlParser.RR_BRACKET);
            this.state = 1784;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 160, this.context) ) {
            case 1:
                {
                this.state = 1781;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 114) {
                    {
                    this.state = 1780;
                    this.match(MySqlParser.KW_NOT);
                    }
                }

                this.state = 1783;
                this.match(MySqlParser.KW_ENFORCED);
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public constraintSymbol(): ConstraintSymbolContext {
        let localContext = new ConstraintSymbolContext(this.context, this.state);
        this.enterRule(localContext, 86, MySqlParser.RULE_constraintSymbol);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1786;
            this.match(MySqlParser.KW_CONSTRAINT);
            this.state = 1788;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 161, this.context) ) {
            case 1:
                {
                this.state = 1787;
                localContext._symbol_ = this.uid();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public columnDefinition(): ColumnDefinitionContext {
        let localContext = new ColumnDefinitionContext(this.context, this.state);
        this.enterRule(localContext, 88, MySqlParser.RULE_columnDefinition);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1790;
            this.dataType();
            this.state = 1794;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 162, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 1791;
                    this.columnConstraint();
                    }
                    }
                }
                this.state = 1796;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 162, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public columnConstraint(): ColumnConstraintContext {
        let localContext = new ColumnConstraintContext(this.context, this.state);
        this.enterRule(localContext, 90, MySqlParser.RULE_columnConstraint);
        let _la: number;
        try {
            this.state = 1840;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_NOT:
            case MySqlParser.KW_NULL_LITERAL:
            case MySqlParser.NULL_SPEC_LITERAL:
                localContext = new NullColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1797;
                this.nullNotnull();
                }
                break;
            case MySqlParser.KW_DEFAULT:
                localContext = new DefaultColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1798;
                this.match(MySqlParser.KW_DEFAULT);
                this.state = 1799;
                this.defaultValue();
                }
                break;
            case MySqlParser.KW_VISIBLE:
                localContext = new VisibilityColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1800;
                this.match(MySqlParser.KW_VISIBLE);
                }
                break;
            case MySqlParser.KW_INVISIBLE:
                localContext = new InvisibilityColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1801;
                this.match(MySqlParser.KW_INVISIBLE);
                }
                break;
            case MySqlParser.KW_ON:
            case MySqlParser.KW_AUTO_INCREMENT:
                localContext = new AutoIncrementColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 1806;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_AUTO_INCREMENT:
                    {
                    this.state = 1802;
                    this.match(MySqlParser.KW_AUTO_INCREMENT);
                    }
                    break;
                case MySqlParser.KW_ON:
                    {
                    this.state = 1803;
                    this.match(MySqlParser.KW_ON);
                    this.state = 1804;
                    this.match(MySqlParser.KW_UPDATE);
                    this.state = 1805;
                    this.currentTimestamp();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case MySqlParser.KW_KEY:
            case MySqlParser.KW_PRIMARY:
                localContext = new PrimaryKeyColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 1809;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 131) {
                    {
                    this.state = 1808;
                    this.match(MySqlParser.KW_PRIMARY);
                    }
                }

                this.state = 1811;
                this.match(MySqlParser.KW_KEY);
                }
                break;
            case MySqlParser.KW_UNIQUE:
                localContext = new UniqueKeyColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 1812;
                this.match(MySqlParser.KW_UNIQUE);
                this.state = 1814;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 165, this.context) ) {
                case 1:
                    {
                    this.state = 1813;
                    this.match(MySqlParser.KW_KEY);
                    }
                    break;
                }
                }
                break;
            case MySqlParser.KW_COMMENT:
                localContext = new CommentColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 1816;
                this.match(MySqlParser.KW_COMMENT);
                this.state = 1817;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_COLUMN_FORMAT:
                localContext = new FormatColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 1818;
                this.match(MySqlParser.KW_COLUMN_FORMAT);
                this.state = 1819;
                (localContext as FormatColumnConstraintContext)._colformat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 42 || _la === 374 || _la === 403)) {
                    (localContext as FormatColumnConstraintContext)._colformat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_STORAGE:
                localContext = new StorageColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 1820;
                this.match(MySqlParser.KW_STORAGE);
                this.state = 1821;
                (localContext as StorageColumnConstraintContext)._storageval = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 42 || _la === 370 || _la === 802)) {
                    (localContext as StorageColumnConstraintContext)._storageval = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_REFERENCES:
                localContext = new ReferenceColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 1822;
                this.referenceDefinition();
                }
                break;
            case MySqlParser.KW_COLLATE:
                localContext = new CollateColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 1823;
                this.match(MySqlParser.KW_COLLATE);
                this.state = 1824;
                this.collationName();
                }
                break;
            case MySqlParser.KW_AS:
            case MySqlParser.KW_GENERATED:
                localContext = new GeneratedColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 1827;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 71) {
                    {
                    this.state = 1825;
                    this.match(MySqlParser.KW_GENERATED);
                    this.state = 1826;
                    this.match(MySqlParser.KW_ALWAYS);
                    }
                }

                this.state = 1829;
                this.match(MySqlParser.KW_AS);
                this.state = 1830;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 1831;
                this.expression(0);
                this.state = 1832;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 1834;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 648 || _la === 685) {
                    {
                    this.state = 1833;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 648 || _la === 685)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                }
                break;
            case MySqlParser.KW_SERIAL:
                localContext = new SerialDefaultColumnConstraintContext(localContext);
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 1836;
                this.match(MySqlParser.KW_SERIAL);
                this.state = 1837;
                this.match(MySqlParser.KW_DEFAULT);
                this.state = 1838;
                this.match(MySqlParser.KW_VALUE);
                }
                break;
            case MySqlParser.KW_CHECK:
            case MySqlParser.KW_CONSTRAINT:
                localContext = new CheckExprContext(localContext);
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 1839;
                this.checkConstraintDefinition();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public referenceDefinition(): ReferenceDefinitionContext {
        let localContext = new ReferenceDefinitionContext(this.context, this.state);
        this.enterRule(localContext, 92, MySqlParser.RULE_referenceDefinition);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 1842;
            this.match(MySqlParser.KW_REFERENCES);
            this.state = 1843;
            this.tableName();
            this.state = 1845;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 169, this.context) ) {
            case 1:
                {
                this.state = 1844;
                this.indexColumnNames();
                }
                break;
            }
            this.state = 1849;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 110) {
                {
                this.state = 1847;
                this.match(MySqlParser.KW_MATCH);
                this.state = 1848;
                localContext._matchType = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 408 || _la === 526 || _la === 597)) {
                    localContext._matchType = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 1852;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 171, this.context) ) {
            case 1:
                {
                this.state = 1851;
                this.referenceAction();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public referenceAction(): ReferenceActionContext {
        let localContext = new ReferenceActionContext(this.context, this.state);
        this.enterRule(localContext, 94, MySqlParser.RULE_referenceAction);
        try {
            this.state = 1870;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 174, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1854;
                this.match(MySqlParser.KW_ON);
                this.state = 1855;
                this.match(MySqlParser.KW_DELETE);
                this.state = 1856;
                localContext._onDelete = this.referenceControlType();
                this.state = 1860;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 172, this.context) ) {
                case 1:
                    {
                    this.state = 1857;
                    this.match(MySqlParser.KW_ON);
                    this.state = 1858;
                    this.match(MySqlParser.KW_UPDATE);
                    this.state = 1859;
                    localContext._onUpdate = this.referenceControlType();
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1862;
                this.match(MySqlParser.KW_ON);
                this.state = 1863;
                this.match(MySqlParser.KW_UPDATE);
                this.state = 1864;
                localContext._onUpdate = this.referenceControlType();
                this.state = 1868;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 173, this.context) ) {
                case 1:
                    {
                    this.state = 1865;
                    this.match(MySqlParser.KW_ON);
                    this.state = 1866;
                    this.match(MySqlParser.KW_DELETE);
                    this.state = 1867;
                    localContext._onDelete = this.referenceControlType();
                    }
                    break;
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public referenceControlType(): ReferenceControlTypeContext {
        let localContext = new ReferenceControlTypeContext(this.context, this.state);
        this.enterRule(localContext, 96, MySqlParser.RULE_referenceControlType);
        try {
            this.state = 1880;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 175, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1872;
                this.match(MySqlParser.KW_RESTRICT);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1873;
                this.match(MySqlParser.KW_CASCADE);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1874;
                this.match(MySqlParser.KW_SET);
                this.state = 1875;
                this.match(MySqlParser.KW_NULL_LITERAL);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1876;
                this.match(MySqlParser.KW_NO);
                this.state = 1877;
                this.match(MySqlParser.KW_ACTION);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 1878;
                this.match(MySqlParser.KW_SET);
                this.state = 1879;
                this.match(MySqlParser.KW_DEFAULT);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tableOption(): TableOptionContext {
        let localContext = new TableOptionContext(this.context, this.state);
        this.enterRule(localContext, 98, MySqlParser.RULE_tableOption);
        let _la: number;
        try {
            this.state = 2067;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 213, this.context) ) {
            case 1:
                localContext = new TableOptionEngineContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 1882;
                this.match(MySqlParser.KW_ENGINE);
                this.state = 1884;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1883;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1887;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 177, this.context) ) {
                case 1:
                    {
                    this.state = 1886;
                    this.engineName();
                    }
                    break;
                }
                }
                break;
            case 2:
                localContext = new TableOptionEngineAttributeContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 1889;
                this.match(MySqlParser.KW_ENGINE_ATTRIBUTE);
                this.state = 1891;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1890;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1893;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 3:
                localContext = new TableOptionAutoextendSizeContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 1894;
                this.match(MySqlParser.KW_AUTOEXTEND_SIZE);
                this.state = 1896;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1895;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1898;
                this.decimalLiteral();
                }
                break;
            case 4:
                localContext = new TableOptionAutoIncrementContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 1899;
                this.match(MySqlParser.KW_AUTO_INCREMENT);
                this.state = 1901;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1900;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1903;
                this.decimalLiteral();
                }
                break;
            case 5:
                localContext = new TableOptionAverageContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 1904;
                this.match(MySqlParser.KW_AVG_ROW_LENGTH);
                this.state = 1906;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1905;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1908;
                this.decimalLiteral();
                }
                break;
            case 6:
                localContext = new TableOptionCharsetContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 1910;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 42) {
                    {
                    this.state = 1909;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                }

                this.state = 1912;
                this.charSet();
                this.state = 1914;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1913;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1918;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                    {
                    this.state = 1916;
                    this.charsetName();
                    }
                    break;
                case MySqlParser.KW_DEFAULT:
                    {
                    this.state = 1917;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 7:
                localContext = new TableOptionChecksumContext(localContext);
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 1920;
                _la = this.tokenStream.LA(1);
                if(!(_la === 329 || _la === 522)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 1922;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1921;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1924;
                (localContext as TableOptionChecksumContext)._boolValue = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 871 || _la === 872)) {
                    (localContext as TableOptionChecksumContext)._boolValue = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 8:
                localContext = new TableOptionCollateContext(localContext);
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 1926;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 42) {
                    {
                    this.state = 1925;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                }

                this.state = 1928;
                this.match(MySqlParser.KW_COLLATE);
                this.state = 1930;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1929;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1932;
                this.collationName();
                }
                break;
            case 9:
                localContext = new TableOptionCommentContext(localContext);
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 1933;
                this.match(MySqlParser.KW_COMMENT);
                this.state = 1935;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1934;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1937;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 10:
                localContext = new TableOptionCompressionContext(localContext);
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 1938;
                this.match(MySqlParser.KW_COMPRESSION);
                this.state = 1940;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1939;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1942;
                _la = this.tokenStream.LA(1);
                if(!(_la === 882 || _la === 889)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 11:
                localContext = new TableOptionConnectionContext(localContext);
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 1943;
                this.match(MySqlParser.KW_CONNECTION);
                this.state = 1945;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1944;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1947;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 12:
                localContext = new TableOptionDataDirectoryContext(localContext);
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 1948;
                _la = this.tokenStream.LA(1);
                if(!(_la === 82 || _la === 360)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 1949;
                this.match(MySqlParser.KW_DIRECTORY);
                this.state = 1951;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1950;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1953;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 13:
                localContext = new TableOptionDelayContext(localContext);
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 1954;
                this.match(MySqlParser.KW_DELAY_KEY_WRITE);
                this.state = 1956;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1955;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1958;
                (localContext as TableOptionDelayContext)._boolValue = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 871 || _la === 872)) {
                    (localContext as TableOptionDelayContext)._boolValue = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 14:
                localContext = new TableOptionEncryptionContext(localContext);
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 1959;
                this.match(MySqlParser.KW_ENCRYPTION);
                this.state = 1961;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1960;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1963;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 15:
                localContext = new TableOptionPageCompressedContext(localContext);
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 1964;
                _la = this.tokenStream.LA(1);
                if(!(_la === 523 || _la === 882)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 1966;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1965;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1968;
                _la = this.tokenStream.LA(1);
                if(!(_la === 871 || _la === 872)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 16:
                localContext = new TableOptionPageCompressionLevelContext(localContext);
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 1969;
                _la = this.tokenStream.LA(1);
                if(!(_la === 524 || _la === 882)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 1971;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1970;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1973;
                this.decimalLiteral();
                }
                break;
            case 17:
                localContext = new TableOptionEncryptionKeyIdContext(localContext);
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 1974;
                this.match(MySqlParser.KW_ENCRYPTION_KEY_ID);
                this.state = 1976;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1975;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1978;
                this.decimalLiteral();
                }
                break;
            case 18:
                localContext = new TableOptionIndexDirectoryContext(localContext);
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 1979;
                this.match(MySqlParser.KW_INDEX);
                this.state = 1980;
                this.match(MySqlParser.KW_DIRECTORY);
                this.state = 1982;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1981;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1984;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 19:
                localContext = new TableOptionInsertMethodContext(localContext);
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 1985;
                this.match(MySqlParser.KW_INSERT_METHOD);
                this.state = 1987;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1986;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1989;
                (localContext as TableOptionInsertMethodContext)._insertMethod = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 402 || _la === 445 || _la === 502)) {
                    (localContext as TableOptionInsertMethodContext)._insertMethod = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 20:
                localContext = new TableOptionKeyBlockSizeContext(localContext);
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 1990;
                this.match(MySqlParser.KW_KEY_BLOCK_SIZE);
                this.state = 1992;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1991;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1994;
                this.fileSizeLiteral();
                }
                break;
            case 21:
                localContext = new TableOptionMaxRowsContext(localContext);
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 1995;
                this.match(MySqlParser.KW_MAX_ROWS);
                this.state = 1997;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 1996;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 1999;
                this.decimalLiteral();
                }
                break;
            case 22:
                localContext = new TableOptionMinRowsContext(localContext);
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 2000;
                this.match(MySqlParser.KW_MIN_ROWS);
                this.state = 2002;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2001;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2004;
                this.decimalLiteral();
                }
                break;
            case 23:
                localContext = new TableOptionPackKeysContext(localContext);
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 2005;
                this.match(MySqlParser.KW_PACK_KEYS);
                this.state = 2007;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2006;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2009;
                (localContext as TableOptionPackKeysContext)._extBoolValue = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 42 || _la === 871 || _la === 872)) {
                    (localContext as TableOptionPackKeysContext)._extBoolValue = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 24:
                localContext = new TableOptionPasswordContext(localContext);
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 2010;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 2012;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2011;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2014;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 25:
                localContext = new TableOptionRowFormatContext(localContext);
                this.enterOuterAlt(localContext, 25);
                {
                this.state = 2015;
                this.match(MySqlParser.KW_ROW_FORMAT);
                this.state = 2017;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2016;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2019;
                (localContext as TableOptionRowFormatContext)._rowFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 42 || _la === 342 || _la === 345 || _la === 374 || _la === 403 || _la === 554 || _la === 889)) {
                    (localContext as TableOptionRowFormatContext)._rowFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 26:
                localContext = new TableOptionStartTransactionContext(localContext);
                this.enterOuterAlt(localContext, 26);
                {
                this.state = 2020;
                this.match(MySqlParser.KW_START);
                this.state = 2021;
                this.match(MySqlParser.KW_TRANSACTION);
                }
                break;
            case 27:
                localContext = new TableOptionSecondaryEngineAttributeContext(localContext);
                this.enterOuterAlt(localContext, 27);
                {
                this.state = 2022;
                this.match(MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE);
                this.state = 2024;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2023;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2026;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 28:
                localContext = new TableOptionRecalculationContext(localContext);
                this.enterOuterAlt(localContext, 28);
                {
                this.state = 2027;
                this.match(MySqlParser.KW_STATS_AUTO_RECALC);
                this.state = 2029;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2028;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2031;
                (localContext as TableOptionRecalculationContext)._extBoolValue = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 42 || _la === 871 || _la === 872)) {
                    (localContext as TableOptionRecalculationContext)._extBoolValue = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 29:
                localContext = new TableOptionPersistentContext(localContext);
                this.enterOuterAlt(localContext, 29);
                {
                this.state = 2032;
                this.match(MySqlParser.KW_STATS_PERSISTENT);
                this.state = 2034;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2033;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2036;
                (localContext as TableOptionPersistentContext)._extBoolValue = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 42 || _la === 871 || _la === 872)) {
                    (localContext as TableOptionPersistentContext)._extBoolValue = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 30:
                localContext = new TableOptionSamplePageContext(localContext);
                this.enterOuterAlt(localContext, 30);
                {
                this.state = 2037;
                this.match(MySqlParser.KW_STATS_SAMPLE_PAGES);
                this.state = 2039;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2038;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2043;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_DEFAULT:
                    {
                    this.state = 2041;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                    break;
                case MySqlParser.ZERO_DECIMAL:
                case MySqlParser.ONE_DECIMAL:
                case MySqlParser.TWO_DECIMAL:
                case MySqlParser.THREE_DECIMAL:
                case MySqlParser.DECIMAL_LITERAL:
                case MySqlParser.REAL_LITERAL:
                    {
                    this.state = 2042;
                    this.decimalLiteral();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 31:
                localContext = new TableOptionTablespaceContext(localContext);
                this.enterOuterAlt(localContext, 31);
                {
                this.state = 2045;
                this.match(MySqlParser.KW_TABLESPACE);
                this.state = 2046;
                this.tablespaceName();
                this.state = 2048;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 210, this.context) ) {
                case 1:
                    {
                    this.state = 2047;
                    this.tablespaceStorage();
                    }
                    break;
                }
                }
                break;
            case 32:
                localContext = new TableOptionTableTypeContext(localContext);
                this.enterOuterAlt(localContext, 32);
                {
                this.state = 2050;
                this.match(MySqlParser.KW_TABLE_TYPE);
                this.state = 2051;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 2052;
                this.tableType();
                }
                break;
            case 33:
                localContext = new TableOptionTablespaceContext(localContext);
                this.enterOuterAlt(localContext, 33);
                {
                this.state = 2053;
                this.tablespaceStorage();
                }
                break;
            case 34:
                localContext = new TableOptionTransactionalContext(localContext);
                this.enterOuterAlt(localContext, 34);
                {
                this.state = 2054;
                this.match(MySqlParser.KW_TRANSACTIONAL);
                this.state = 2056;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2055;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2058;
                _la = this.tokenStream.LA(1);
                if(!(_la === 871 || _la === 872)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 35:
                localContext = new TableOptionUnionContext(localContext);
                this.enterOuterAlt(localContext, 35);
                {
                this.state = 2059;
                this.match(MySqlParser.KW_UNION);
                this.state = 2061;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2060;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2063;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2064;
                this.tableNames();
                this.state = 2065;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tableType(): TableTypeContext {
        let localContext = new TableTypeContext(this.context, this.state);
        this.enterRule(localContext, 100, MySqlParser.RULE_tableType);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2069;
            _la = this.tokenStream.LA(1);
            if(!(_la === 494 || _la === 506)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tablespaceStorage(): TablespaceStorageContext {
        let localContext = new TablespaceStorageContext(this.context, this.state);
        this.enterRule(localContext, 102, MySqlParser.RULE_tablespaceStorage);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2071;
            this.match(MySqlParser.KW_STORAGE);
            this.state = 2072;
            _la = this.tokenStream.LA(1);
            if(!(_la === 42 || _la === 370 || _la === 802)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partitionDefinitions(): PartitionDefinitionsContext {
        let localContext = new PartitionDefinitionsContext(this.context, this.state);
        this.enterRule(localContext, 104, MySqlParser.RULE_partitionDefinitions);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2074;
            this.match(MySqlParser.KW_PARTITION);
            this.state = 2075;
            this.match(MySqlParser.KW_BY);
            this.state = 2076;
            this.partitionFunctionDefinition();
            this.state = 2079;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 528) {
                {
                this.state = 2077;
                this.match(MySqlParser.KW_PARTITIONS);
                this.state = 2078;
                localContext._count = this.decimalLiteral();
                }
            }

            this.state = 2088;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 652) {
                {
                this.state = 2081;
                this.match(MySqlParser.KW_SUBPARTITION);
                this.state = 2082;
                this.match(MySqlParser.KW_BY);
                this.state = 2083;
                this.subpartitionFunctionDefinition();
                this.state = 2086;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 653) {
                    {
                    this.state = 2084;
                    this.match(MySqlParser.KW_SUBPARTITIONS);
                    this.state = 2085;
                    localContext._subCount = this.decimalLiteral();
                    }
                }

                }
            }

            this.state = 2101;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 218, this.context) ) {
            case 1:
                {
                this.state = 2090;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2091;
                this.partitionDefinition();
                this.state = 2096;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 2092;
                    this.match(MySqlParser.COMMA);
                    this.state = 2093;
                    this.partitionDefinition();
                    }
                    }
                    this.state = 2098;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 2099;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partitionFunctionDefinition(): PartitionFunctionDefinitionContext {
        let localContext = new PartitionFunctionDefinitionContext(this.context, this.state);
        this.enterRule(localContext, 106, MySqlParser.RULE_partitionFunctionDefinition);
        let _la: number;
        try {
            this.state = 2149;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 225, this.context) ) {
            case 1:
                localContext = new PartitionFunctionHashContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2104;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 101) {
                    {
                    this.state = 2103;
                    this.match(MySqlParser.KW_LINEAR);
                    }
                }

                this.state = 2106;
                this.match(MySqlParser.KW_HASH);
                this.state = 2107;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2108;
                this.expression(0);
                this.state = 2109;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 2:
                localContext = new PartitionFunctionKeyContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2112;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 101) {
                    {
                    this.state = 2111;
                    this.match(MySqlParser.KW_LINEAR);
                    }
                }

                this.state = 2114;
                this.match(MySqlParser.KW_KEY);
                this.state = 2118;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 308) {
                    {
                    this.state = 2115;
                    this.match(MySqlParser.KW_ALGORITHM);
                    this.state = 2116;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    this.state = 2117;
                    (localContext as PartitionFunctionKeyContext)._algType = this.tokenStream.LT(1);
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 872 || _la === 873)) {
                        (localContext as PartitionFunctionKeyContext)._algType = this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 2120;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2122;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 222, this.context) ) {
                case 1:
                    {
                    this.state = 2121;
                    this.columnNames();
                    }
                    break;
                }
                this.state = 2124;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 3:
                localContext = new PartitionFunctionRangeContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2125;
                this.match(MySqlParser.KW_RANGE);
                this.state = 2135;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.LR_BRACKET:
                    {
                    this.state = 2126;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 2127;
                    this.expression(0);
                    this.state = 2128;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                case MySqlParser.KW_COLUMNS:
                    {
                    this.state = 2130;
                    this.match(MySqlParser.KW_COLUMNS);
                    this.state = 2131;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 2132;
                    this.columnNames();
                    this.state = 2133;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 4:
                localContext = new PartitionFunctionListContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2137;
                this.match(MySqlParser.KW_LIST);
                this.state = 2147;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.LR_BRACKET:
                    {
                    this.state = 2138;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 2139;
                    this.expression(0);
                    this.state = 2140;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                case MySqlParser.KW_COLUMNS:
                    {
                    this.state = 2142;
                    this.match(MySqlParser.KW_COLUMNS);
                    this.state = 2143;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 2144;
                    this.columnNames();
                    this.state = 2145;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public subpartitionFunctionDefinition(): SubpartitionFunctionDefinitionContext {
        let localContext = new SubpartitionFunctionDefinitionContext(this.context, this.state);
        this.enterRule(localContext, 108, MySqlParser.RULE_subpartitionFunctionDefinition);
        let _la: number;
        try {
            this.state = 2172;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 229, this.context) ) {
            case 1:
                localContext = new SubPartitionFunctionHashContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2152;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 101) {
                    {
                    this.state = 2151;
                    this.match(MySqlParser.KW_LINEAR);
                    }
                }

                this.state = 2154;
                this.match(MySqlParser.KW_HASH);
                this.state = 2155;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2156;
                this.expression(0);
                this.state = 2157;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 2:
                localContext = new SubPartitionFunctionKeyContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2160;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 101) {
                    {
                    this.state = 2159;
                    this.match(MySqlParser.KW_LINEAR);
                    }
                }

                this.state = 2162;
                this.match(MySqlParser.KW_KEY);
                this.state = 2166;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 308) {
                    {
                    this.state = 2163;
                    this.match(MySqlParser.KW_ALGORITHM);
                    this.state = 2164;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    this.state = 2165;
                    (localContext as SubPartitionFunctionKeyContext)._algType = this.tokenStream.LT(1);
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 872 || _la === 873)) {
                        (localContext as SubPartitionFunctionKeyContext)._algType = this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 2168;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2169;
                this.columnNames();
                this.state = 2170;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partitionDefinition(): PartitionDefinitionContext {
        let localContext = new PartitionDefinitionContext(this.context, this.state);
        this.enterRule(localContext, 110, MySqlParser.RULE_partitionDefinition);
        let _la: number;
        try {
            this.state = 2320;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 248, this.context) ) {
            case 1:
                localContext = new PartitionComparisonContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2174;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2175;
                this.partitionName();
                this.state = 2176;
                this.match(MySqlParser.KW_VALUES);
                this.state = 2177;
                this.match(MySqlParser.KW_LESS);
                this.state = 2178;
                this.match(MySqlParser.KW_THAN);
                this.state = 2179;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2180;
                this.partitionDefinerAtom();
                this.state = 2185;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 2181;
                    this.match(MySqlParser.COMMA);
                    this.state = 2182;
                    this.partitionDefinerAtom();
                    }
                    }
                    this.state = 2187;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 2188;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 2192;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 42 || _la === 82 || _la === 340 || _la === 360 || _la === 380 || ((((_la - 480)) & ~0x1F) === 0 && ((1 << (_la - 480)) & 16778241) !== 0) || _la === 647 || _la === 658) {
                    {
                    {
                    this.state = 2189;
                    this.partitionOption();
                    }
                    }
                    this.state = 2194;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 2206;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 866) {
                    {
                    this.state = 2195;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 2196;
                    this.subpartitionDefinition();
                    this.state = 2201;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 868) {
                        {
                        {
                        this.state = 2197;
                        this.match(MySqlParser.COMMA);
                        this.state = 2198;
                        this.subpartitionDefinition();
                        }
                        }
                        this.state = 2203;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    this.state = 2204;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                }

                }
                break;
            case 2:
                localContext = new PartitionComparisonContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2208;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2209;
                this.partitionName();
                this.state = 2210;
                this.match(MySqlParser.KW_VALUES);
                this.state = 2211;
                this.match(MySqlParser.KW_LESS);
                this.state = 2212;
                this.match(MySqlParser.KW_THAN);
                this.state = 2213;
                this.partitionDefinerAtom();
                this.state = 2217;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 42 || _la === 82 || _la === 340 || _la === 360 || _la === 380 || ((((_la - 480)) & ~0x1F) === 0 && ((1 << (_la - 480)) & 16778241) !== 0) || _la === 647 || _la === 658) {
                    {
                    {
                    this.state = 2214;
                    this.partitionOption();
                    }
                    }
                    this.state = 2219;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 2231;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 866) {
                    {
                    this.state = 2220;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 2221;
                    this.subpartitionDefinition();
                    this.state = 2226;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 868) {
                        {
                        {
                        this.state = 2222;
                        this.match(MySqlParser.COMMA);
                        this.state = 2223;
                        this.subpartitionDefinition();
                        }
                        }
                        this.state = 2228;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    this.state = 2229;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                }

                }
                break;
            case 3:
                localContext = new PartitionListAtomContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2233;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2234;
                this.partitionName();
                this.state = 2235;
                this.match(MySqlParser.KW_VALUES);
                this.state = 2236;
                this.match(MySqlParser.KW_IN);
                this.state = 2237;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2238;
                this.partitionDefinerAtom();
                this.state = 2243;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 2239;
                    this.match(MySqlParser.COMMA);
                    this.state = 2240;
                    this.partitionDefinerAtom();
                    }
                    }
                    this.state = 2245;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 2246;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 2250;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 42 || _la === 82 || _la === 340 || _la === 360 || _la === 380 || ((((_la - 480)) & ~0x1F) === 0 && ((1 << (_la - 480)) & 16778241) !== 0) || _la === 647 || _la === 658) {
                    {
                    {
                    this.state = 2247;
                    this.partitionOption();
                    }
                    }
                    this.state = 2252;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 2264;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 866) {
                    {
                    this.state = 2253;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 2254;
                    this.subpartitionDefinition();
                    this.state = 2259;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 868) {
                        {
                        {
                        this.state = 2255;
                        this.match(MySqlParser.COMMA);
                        this.state = 2256;
                        this.subpartitionDefinition();
                        }
                        }
                        this.state = 2261;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    this.state = 2262;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                }

                }
                break;
            case 4:
                localContext = new PartitionListVectorContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2266;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2267;
                this.partitionName();
                this.state = 2268;
                this.match(MySqlParser.KW_VALUES);
                this.state = 2269;
                this.match(MySqlParser.KW_IN);
                this.state = 2270;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2271;
                this.partitionDefinerVector();
                this.state = 2276;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 2272;
                    this.match(MySqlParser.COMMA);
                    this.state = 2273;
                    this.partitionDefinerVector();
                    }
                    }
                    this.state = 2278;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 2279;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 2283;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 42 || _la === 82 || _la === 340 || _la === 360 || _la === 380 || ((((_la - 480)) & ~0x1F) === 0 && ((1 << (_la - 480)) & 16778241) !== 0) || _la === 647 || _la === 658) {
                    {
                    {
                    this.state = 2280;
                    this.partitionOption();
                    }
                    }
                    this.state = 2285;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 2297;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 866) {
                    {
                    this.state = 2286;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 2287;
                    this.subpartitionDefinition();
                    this.state = 2292;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 868) {
                        {
                        {
                        this.state = 2288;
                        this.match(MySqlParser.COMMA);
                        this.state = 2289;
                        this.subpartitionDefinition();
                        }
                        }
                        this.state = 2294;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    this.state = 2295;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                }

                }
                break;
            case 5:
                localContext = new PartitionSimpleContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 2299;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2300;
                this.partitionName();
                this.state = 2304;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 42 || _la === 82 || _la === 340 || _la === 360 || _la === 380 || ((((_la - 480)) & ~0x1F) === 0 && ((1 << (_la - 480)) & 16778241) !== 0) || _la === 647 || _la === 658) {
                    {
                    {
                    this.state = 2301;
                    this.partitionOption();
                    }
                    }
                    this.state = 2306;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 2318;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 866) {
                    {
                    this.state = 2307;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 2308;
                    this.subpartitionDefinition();
                    this.state = 2313;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 868) {
                        {
                        {
                        this.state = 2309;
                        this.match(MySqlParser.COMMA);
                        this.state = 2310;
                        this.subpartitionDefinition();
                        }
                        }
                        this.state = 2315;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    this.state = 2316;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                }

                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partitionDefinerAtom(): PartitionDefinerAtomContext {
        let localContext = new PartitionDefinerAtomContext(this.context, this.state);
        this.enterRule(localContext, 112, MySqlParser.RULE_partitionDefinerAtom);
        try {
            this.state = 2325;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 249, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2322;
                this.constant();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2323;
                this.expression(0);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2324;
                this.match(MySqlParser.KW_MAXVALUE);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partitionDefinerVector(): PartitionDefinerVectorContext {
        let localContext = new PartitionDefinerVectorContext(this.context, this.state);
        this.enterRule(localContext, 114, MySqlParser.RULE_partitionDefinerVector);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2327;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 2328;
            this.partitionDefinerAtom();
            this.state = 2331;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            do {
                {
                {
                this.state = 2329;
                this.match(MySqlParser.COMMA);
                this.state = 2330;
                this.partitionDefinerAtom();
                }
                }
                this.state = 2333;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            } while (_la === 868);
            this.state = 2335;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public subpartitionDefinition(): SubpartitionDefinitionContext {
        let localContext = new SubpartitionDefinitionContext(this.context, this.state);
        this.enterRule(localContext, 116, MySqlParser.RULE_subpartitionDefinition);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2337;
            this.match(MySqlParser.KW_SUBPARTITION);
            this.state = 2338;
            localContext._logicalName = this.uid();
            this.state = 2342;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 42 || _la === 82 || _la === 340 || _la === 360 || _la === 380 || ((((_la - 480)) & ~0x1F) === 0 && ((1 << (_la - 480)) & 16778241) !== 0) || _la === 647 || _la === 658) {
                {
                {
                this.state = 2339;
                this.partitionOption();
                }
                }
                this.state = 2344;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partitionOption(): PartitionOptionContext {
        let localContext = new PartitionOptionContext(this.context, this.state);
        this.enterRule(localContext, 118, MySqlParser.RULE_partitionOption);
        let _la: number;
        try {
            this.state = 2393;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_DEFAULT:
            case MySqlParser.KW_ENGINE:
            case MySqlParser.KW_STORAGE:
                localContext = new PartitionOptionEngineContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2346;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 42) {
                    {
                    this.state = 2345;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                }

                this.state = 2349;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 647) {
                    {
                    this.state = 2348;
                    this.match(MySqlParser.KW_STORAGE);
                    }
                }

                this.state = 2351;
                this.match(MySqlParser.KW_ENGINE);
                this.state = 2353;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2352;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2355;
                this.engineName();
                }
                break;
            case MySqlParser.KW_COMMENT:
                localContext = new PartitionOptionCommentContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2356;
                this.match(MySqlParser.KW_COMMENT);
                this.state = 2358;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2357;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2360;
                (localContext as PartitionOptionCommentContext)._comment = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_DATA:
                localContext = new PartitionOptionDataDirectoryContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2361;
                this.match(MySqlParser.KW_DATA);
                this.state = 2362;
                this.match(MySqlParser.KW_DIRECTORY);
                this.state = 2364;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2363;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2366;
                (localContext as PartitionOptionDataDirectoryContext)._dataDirectory = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_INDEX:
                localContext = new PartitionOptionIndexDirectoryContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2367;
                this.match(MySqlParser.KW_INDEX);
                this.state = 2368;
                this.match(MySqlParser.KW_DIRECTORY);
                this.state = 2370;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2369;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2372;
                (localContext as PartitionOptionIndexDirectoryContext)._indexDirectory = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_MAX_ROWS:
                localContext = new PartitionOptionMaxRowsContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 2373;
                this.match(MySqlParser.KW_MAX_ROWS);
                this.state = 2375;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2374;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2377;
                (localContext as PartitionOptionMaxRowsContext)._maxRows = this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_MIN_ROWS:
                localContext = new PartitionOptionMinRowsContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 2378;
                this.match(MySqlParser.KW_MIN_ROWS);
                this.state = 2380;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2379;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2382;
                (localContext as PartitionOptionMinRowsContext)._minRows = this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_TABLESPACE:
                localContext = new PartitionOptionTablespaceContext(localContext);
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 2383;
                this.match(MySqlParser.KW_TABLESPACE);
                this.state = 2385;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2384;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2387;
                this.tablespaceName();
                }
                break;
            case MySqlParser.KW_NODEGROUP:
                localContext = new PartitionOptionNodeGroupContext(localContext);
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 2388;
                this.match(MySqlParser.KW_NODEGROUP);
                this.state = 2390;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2389;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2392;
                (localContext as PartitionOptionNodeGroupContext)._nodegroup = this.uid();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterDatabase(): AlterDatabaseContext {
        let localContext = new AlterDatabaseContext(this.context, this.state);
        this.enterRule(localContext, 120, MySqlParser.RULE_alterDatabase);
        let _la: number;
        try {
            this.state = 2413;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 265, this.context) ) {
            case 1:
                localContext = new AlterSimpleDatabaseContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2395;
                this.match(MySqlParser.KW_ALTER);
                this.state = 2396;
                (localContext as AlterSimpleDatabaseContext)._dbFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 39 || _la === 152)) {
                    (localContext as AlterSimpleDatabaseContext)._dbFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2398;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 263, this.context) ) {
                case 1:
                    {
                    this.state = 2397;
                    this.databaseName();
                    }
                    break;
                }
                this.state = 2401;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                do {
                    {
                    {
                    this.state = 2400;
                    this.createDatabaseOption();
                    }
                    }
                    this.state = 2403;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                } while (((((_la - 26)) & ~0x1F) === 0 && ((1 << (_la - 26)) & 65541) !== 0) || _la === 135 || _la === 224 || _la === 376 || _la === 823);
                }
                break;
            case 2:
                localContext = new AlterUpgradeNameContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2405;
                this.match(MySqlParser.KW_ALTER);
                this.state = 2406;
                (localContext as AlterUpgradeNameContext)._dbFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 39 || _la === 152)) {
                    (localContext as AlterUpgradeNameContext)._dbFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2407;
                this.databaseName();
                this.state = 2408;
                this.match(MySqlParser.KW_UPGRADE);
                this.state = 2409;
                this.match(MySqlParser.KW_DATA);
                this.state = 2410;
                this.match(MySqlParser.KW_DIRECTORY);
                this.state = 2411;
                this.match(MySqlParser.KW_NAME);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterEvent(): AlterEventContext {
        let localContext = new AlterEventContext(this.context, this.state);
        this.enterRule(localContext, 122, MySqlParser.RULE_alterEvent);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2415;
            this.match(MySqlParser.KW_ALTER);
            this.state = 2417;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 364) {
                {
                this.state = 2416;
                this.ownerStatement();
                }
            }

            this.state = 2419;
            this.match(MySqlParser.KW_EVENT);
            this.state = 2420;
            localContext._event_name = this.fullId();
            this.state = 2424;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 267, this.context) ) {
            case 1:
                {
                this.state = 2421;
                this.match(MySqlParser.KW_ON);
                this.state = 2422;
                this.match(MySqlParser.KW_SCHEDULE);
                this.state = 2423;
                this.scheduleExpression();
                }
                break;
            }
            this.state = 2432;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 119) {
                {
                this.state = 2426;
                this.match(MySqlParser.KW_ON);
                this.state = 2427;
                this.match(MySqlParser.KW_COMPLETION);
                this.state = 2429;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 114) {
                    {
                    this.state = 2428;
                    this.match(MySqlParser.KW_NOT);
                    }
                }

                this.state = 2431;
                this.match(MySqlParser.KW_PRESERVE);
                }
            }

            this.state = 2437;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 270, this.context) ) {
            case 1:
                {
                this.state = 2434;
                this.match(MySqlParser.KW_RENAME);
                this.state = 2435;
                this.match(MySqlParser.KW_TO);
                this.state = 2436;
                localContext._new_event_name = this.fullId();
                }
                break;
            }
            this.state = 2440;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 368 || _la === 375) {
                {
                this.state = 2439;
                this.enableType();
                }
            }

            this.state = 2444;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 340) {
                {
                this.state = 2442;
                this.match(MySqlParser.KW_COMMENT);
                this.state = 2443;
                this.match(MySqlParser.STRING_LITERAL);
                }
            }

            this.state = 2448;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 273, this.context) ) {
            case 1:
                {
                this.state = 2446;
                this.match(MySqlParser.KW_DO);
                this.state = 2447;
                this.routineBody();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterFunction(): AlterFunctionContext {
        let localContext = new AlterFunctionContext(this.context, this.state);
        this.enterRule(localContext, 124, MySqlParser.RULE_alterFunction);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2450;
            this.match(MySqlParser.KW_ALTER);
            this.state = 2451;
            this.match(MySqlParser.KW_FUNCTION);
            this.state = 2452;
            this.functionName();
            this.state = 2456;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 47 || ((((_la - 112)) & ~0x1F) === 0 && ((1 << (_la - 112)) & 16777221) !== 0) || _la === 162 || _la === 340 || _la === 354 || _la === 444 || _la === 502) {
                {
                {
                this.state = 2453;
                this.routineOption();
                }
                }
                this.state = 2458;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterInstance(): AlterInstanceContext {
        let localContext = new AlterInstanceContext(this.context, this.state);
        this.enterRule(localContext, 126, MySqlParser.RULE_alterInstance);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2459;
            this.match(MySqlParser.KW_ALTER);
            this.state = 2460;
            this.match(MySqlParser.KW_INSTANCE);
            this.state = 2461;
            this.match(MySqlParser.KW_ROTATE);
            this.state = 2462;
            this.match(MySqlParser.KW_INNODB);
            this.state = 2463;
            this.match(MySqlParser.KW_MASTER);
            this.state = 2464;
            this.match(MySqlParser.KW_KEY);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterLogfileGroup(): AlterLogfileGroupContext {
        let localContext = new AlterLogfileGroupContext(this.context, this.state);
        this.enterRule(localContext, 128, MySqlParser.RULE_alterLogfileGroup);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2466;
            this.match(MySqlParser.KW_ALTER);
            this.state = 2467;
            this.match(MySqlParser.KW_LOGFILE);
            this.state = 2468;
            this.match(MySqlParser.KW_GROUP);
            this.state = 2469;
            localContext._logfileGroupName = this.uid();
            this.state = 2470;
            this.match(MySqlParser.KW_ADD);
            this.state = 2471;
            this.match(MySqlParser.KW_UNDOFILE);
            this.state = 2472;
            this.match(MySqlParser.STRING_LITERAL);
            this.state = 2478;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 428) {
                {
                this.state = 2473;
                this.match(MySqlParser.KW_INITIAL_SIZE);
                this.state = 2475;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2474;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2477;
                this.fileSizeLiteral();
                }
            }

            this.state = 2481;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 687) {
                {
                this.state = 2480;
                this.match(MySqlParser.KW_WAIT);
                }
            }

            this.state = 2483;
            this.match(MySqlParser.KW_ENGINE);
            this.state = 2485;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 857) {
                {
                this.state = 2484;
                this.match(MySqlParser.EQUAL_SYMBOL);
                }
            }

            this.state = 2487;
            this.engineName();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterProcedure(): AlterProcedureContext {
        let localContext = new AlterProcedureContext(this.context, this.state);
        this.enterRule(localContext, 130, MySqlParser.RULE_alterProcedure);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2489;
            this.match(MySqlParser.KW_ALTER);
            this.state = 2490;
            this.match(MySqlParser.KW_PROCEDURE);
            this.state = 2491;
            localContext._proc_name = this.fullId();
            this.state = 2495;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 47 || ((((_la - 112)) & ~0x1F) === 0 && ((1 << (_la - 112)) & 16777221) !== 0) || _la === 162 || _la === 340 || _la === 354 || _la === 444 || _la === 502) {
                {
                {
                this.state = 2492;
                this.routineOption();
                }
                }
                this.state = 2497;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterServer(): AlterServerContext {
        let localContext = new AlterServerContext(this.context, this.state);
        this.enterRule(localContext, 132, MySqlParser.RULE_alterServer);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2498;
            this.match(MySqlParser.KW_ALTER);
            this.state = 2499;
            this.match(MySqlParser.KW_SERVER);
            this.state = 2500;
            localContext._serverName = this.uid();
            this.state = 2501;
            this.match(MySqlParser.KW_OPTIONS);
            this.state = 2502;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 2503;
            this.serverOption();
            this.state = 2508;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 2504;
                this.match(MySqlParser.COMMA);
                this.state = 2505;
                this.serverOption();
                }
                }
                this.state = 2510;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 2511;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterTable(): AlterTableContext {
        let localContext = new AlterTableContext(this.context, this.state);
        this.enterRule(localContext, 134, MySqlParser.RULE_alterTable);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2513;
            this.match(MySqlParser.KW_ALTER);
            this.state = 2514;
            this.match(MySqlParser.KW_TABLE);
            this.state = 2515;
            this.tableName();
            this.state = 2524;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 282, this.context) ) {
            case 1:
                {
                this.state = 2516;
                this.alterOption();
                this.state = 2521;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 2517;
                    this.match(MySqlParser.COMMA);
                    this.state = 2518;
                    this.alterOption();
                    }
                    }
                    this.state = 2523;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            }
            this.state = 2533;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 284, this.context) ) {
            case 1:
                {
                this.state = 2526;
                this.alterPartitionSpecification();
                this.state = 2530;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 283, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 2527;
                        this.alterPartitionSpecification();
                        }
                        }
                    }
                    this.state = 2532;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 283, this.context);
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterTablespace(): AlterTablespaceContext {
        let localContext = new AlterTablespaceContext(this.context, this.state);
        this.enterRule(localContext, 136, MySqlParser.RULE_alterTablespace);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2535;
            this.match(MySqlParser.KW_ALTER);
            this.state = 2537;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 180) {
                {
                this.state = 2536;
                this.match(MySqlParser.KW_UNDO);
                }
            }

            this.state = 2539;
            this.match(MySqlParser.KW_TABLESPACE);
            this.state = 2540;
            this.tablespaceName();
            this.state = 2541;
            _la = this.tokenStream.LA(1);
            if(!(_la === 6 || _la === 51)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2542;
            this.match(MySqlParser.KW_DATAFILE);
            this.state = 2543;
            this.match(MySqlParser.STRING_LITERAL);
            this.state = 2549;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 428) {
                {
                this.state = 2544;
                this.match(MySqlParser.KW_INITIAL_SIZE);
                this.state = 2546;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2545;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2548;
                this.fileSizeLiteral();
                }
            }

            this.state = 2552;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 687) {
                {
                this.state = 2551;
                this.match(MySqlParser.KW_WAIT);
                }
            }

            this.state = 2557;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 289, this.context) ) {
            case 1:
                {
                this.state = 2554;
                this.match(MySqlParser.KW_RENAME);
                this.state = 2555;
                this.match(MySqlParser.KW_TO);
                this.state = 2556;
                this.tablespaceNameCreate();
                }
                break;
            }
            this.state = 2564;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 314) {
                {
                this.state = 2559;
                this.match(MySqlParser.KW_AUTOEXTEND_SIZE);
                this.state = 2561;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2560;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2563;
                this.fileSizeLiteral();
                }
            }

            this.state = 2568;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 292, this.context) ) {
            case 1:
                {
                this.state = 2566;
                this.match(MySqlParser.KW_SET);
                this.state = 2567;
                _la = this.tokenStream.LA(1);
                if(!(_la === 5 || _la === 81)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            }
            this.state = 2575;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 376) {
                {
                this.state = 2570;
                this.match(MySqlParser.KW_ENCRYPTION);
                this.state = 2572;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2571;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2574;
                this.match(MySqlParser.STRING_LITERAL);
                }
            }

            this.state = 2582;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 380) {
                {
                this.state = 2577;
                this.match(MySqlParser.KW_ENGINE);
                this.state = 2579;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2578;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2581;
                this.engineName();
                }
            }

            this.state = 2589;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 825) {
                {
                this.state = 2584;
                this.match(MySqlParser.KW_ENGINE_ATTRIBUTE);
                this.state = 2586;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2585;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2588;
                this.match(MySqlParser.STRING_LITERAL);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterView(): AlterViewContext {
        let localContext = new AlterViewContext(this.context, this.state);
        this.enterRule(localContext, 138, MySqlParser.RULE_alterView);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2591;
            this.match(MySqlParser.KW_ALTER);
            this.state = 2595;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 308) {
                {
                this.state = 2592;
                this.match(MySqlParser.KW_ALGORITHM);
                this.state = 2593;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 2594;
                localContext._algType = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 486 || _la === 661 || _la === 670)) {
                    localContext._algType = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 2598;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 364) {
                {
                this.state = 2597;
                this.ownerStatement();
                }
            }

            this.state = 2603;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 162) {
                {
                this.state = 2600;
                this.match(MySqlParser.KW_SQL);
                this.state = 2601;
                this.match(MySqlParser.KW_SECURITY);
                this.state = 2602;
                localContext._secContext = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 364 || _la === 436)) {
                    localContext._secContext = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 2605;
            this.match(MySqlParser.KW_VIEW);
            this.state = 2606;
            this.viewName();
            this.state = 2611;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 866) {
                {
                this.state = 2607;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2608;
                this.columnNames();
                this.state = 2609;
                this.match(MySqlParser.RR_BRACKET);
                }
            }

            this.state = 2613;
            this.match(MySqlParser.KW_AS);
            this.state = 2614;
            this.selectStatement();
            this.state = 2621;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 304, this.context) ) {
            case 1:
                {
                this.state = 2615;
                this.match(MySqlParser.KW_WITH);
                this.state = 2617;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 325 || _la === 450) {
                    {
                    this.state = 2616;
                    localContext._checkOpt = this.tokenStream.LT(1);
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 325 || _la === 450)) {
                        localContext._checkOpt = this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 2619;
                this.match(MySqlParser.KW_CHECK);
                this.state = 2620;
                this.match(MySqlParser.KW_OPTION);
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterOption(): AlterOptionContext {
        let localContext = new AlterOptionContext(this.context, this.state);
        this.enterRule(localContext, 140, MySqlParser.RULE_alterOption);
        let _la: number;
        try {
            let alternative: number;
            this.state = 2887;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 348, this.context) ) {
            case 1:
                localContext = new AlterByTableOptionContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2623;
                this.tableOption();
                this.state = 2630;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 306, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 2625;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 868) {
                            {
                            this.state = 2624;
                            this.match(MySqlParser.COMMA);
                            }
                        }

                        this.state = 2627;
                        this.tableOption();
                        }
                        }
                    }
                    this.state = 2632;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 306, this.context);
                }
                }
                break;
            case 2:
                localContext = new AlterByAddColumnContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2633;
                this.match(MySqlParser.KW_ADD);
                this.state = 2635;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 307, this.context) ) {
                case 1:
                    {
                    this.state = 2634;
                    this.match(MySqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2637;
                this.columnName();
                this.state = 2638;
                this.columnDefinition();
                this.state = 2642;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_FIRST:
                    {
                    this.state = 2639;
                    this.match(MySqlParser.KW_FIRST);
                    }
                    break;
                case MySqlParser.KW_AFTER:
                    {
                    this.state = 2640;
                    this.match(MySqlParser.KW_AFTER);
                    this.state = 2641;
                    this.columnName();
                    }
                    break;
                case MySqlParser.EOF:
                case MySqlParser.KW_ADD:
                case MySqlParser.KW_ALTER:
                case MySqlParser.KW_ANALYZE:
                case MySqlParser.KW_CALL:
                case MySqlParser.KW_CHANGE:
                case MySqlParser.KW_CHECK:
                case MySqlParser.KW_CREATE:
                case MySqlParser.KW_DELETE:
                case MySqlParser.KW_DESC:
                case MySqlParser.KW_DESCRIBE:
                case MySqlParser.KW_DROP:
                case MySqlParser.KW_EXPLAIN:
                case MySqlParser.KW_GET:
                case MySqlParser.KW_GRANT:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_KILL:
                case MySqlParser.KW_LOAD:
                case MySqlParser.KW_LOCK:
                case MySqlParser.KW_OPTIMIZE:
                case MySqlParser.KW_PURGE:
                case MySqlParser.KW_RELEASE:
                case MySqlParser.KW_RENAME:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RESIGNAL:
                case MySqlParser.KW_REVOKE:
                case MySqlParser.KW_SELECT:
                case MySqlParser.KW_SET:
                case MySqlParser.KW_SHOW:
                case MySqlParser.KW_SIGNAL:
                case MySqlParser.KW_TABLE:
                case MySqlParser.KW_UNLOCK:
                case MySqlParser.KW_UPDATE:
                case MySqlParser.KW_USE:
                case MySqlParser.KW_VALUES:
                case MySqlParser.KW_WITH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESTART:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_CLONE:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.LR_BRACKET:
                case MySqlParser.COMMA:
                case MySqlParser.SEMI:
                    break;
                default:
                    break;
                }
                }
                break;
            case 3:
                localContext = new AlterByAddColumnsContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2644;
                this.match(MySqlParser.KW_ADD);
                this.state = 2646;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 29) {
                    {
                    this.state = 2645;
                    this.match(MySqlParser.KW_COLUMN);
                    }
                }

                this.state = 2648;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2649;
                this.columnName();
                this.state = 2650;
                this.columnDefinition();
                this.state = 2657;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 2651;
                    this.match(MySqlParser.COMMA);
                    this.state = 2652;
                    this.columnName();
                    this.state = 2653;
                    this.columnDefinition();
                    }
                    }
                    this.state = 2659;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 2660;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 4:
                localContext = new AlterByAddIndexContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2662;
                this.match(MySqlParser.KW_ADD);
                this.state = 2663;
                _la = this.tokenStream.LA(1);
                if(!(_la === 82 || _la === 92)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2665;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                    {
                    this.state = 2664;
                    this.indexName();
                    }
                }

                this.state = 2668;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 188) {
                    {
                    this.state = 2667;
                    this.indexType();
                    }
                }

                this.state = 2670;
                this.indexColumnNames();
                this.state = 2674;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 313, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 2671;
                        this.indexOption();
                        }
                        }
                    }
                    this.state = 2676;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 313, this.context);
                }
                }
                break;
            case 5:
                localContext = new AlterByAddSpecialIndexContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 2677;
                this.match(MySqlParser.KW_ADD);
                this.state = 2678;
                _la = this.tokenStream.LA(1);
                if(!(_la === 69 || _la === 161)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2680;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 82 || _la === 92) {
                    {
                    this.state = 2679;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 82 || _la === 92)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 2683;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                    {
                    this.state = 2682;
                    this.indexName();
                    }
                }

                this.state = 2685;
                this.indexColumnNames();
                this.state = 2689;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 316, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 2686;
                        this.indexOption();
                        }
                        }
                    }
                    this.state = 2691;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 316, this.context);
                }
                }
                break;
            case 6:
                localContext = new AlterByAddPrimaryKeyContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 2692;
                this.match(MySqlParser.KW_ADD);
                this.state = 2697;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 31) {
                    {
                    this.state = 2693;
                    this.match(MySqlParser.KW_CONSTRAINT);
                    this.state = 2695;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 317, this.context) ) {
                    case 1:
                        {
                        this.state = 2694;
                        (localContext as AlterByAddPrimaryKeyContext)._symbol_ = this.uid();
                        }
                        break;
                    }
                    }
                }

                this.state = 2699;
                this.match(MySqlParser.KW_PRIMARY);
                this.state = 2700;
                this.match(MySqlParser.KW_KEY);
                this.state = 2702;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 188) {
                    {
                    this.state = 2701;
                    this.indexType();
                    }
                }

                this.state = 2704;
                this.indexColumnNames();
                this.state = 2708;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 320, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 2705;
                        this.indexOption();
                        }
                        }
                    }
                    this.state = 2710;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 320, this.context);
                }
                }
                break;
            case 7:
                localContext = new AlterByAddUniqueKeyContext(localContext);
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 2711;
                this.match(MySqlParser.KW_ADD);
                this.state = 2716;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 31) {
                    {
                    this.state = 2712;
                    this.match(MySqlParser.KW_CONSTRAINT);
                    this.state = 2714;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                        {
                        this.state = 2713;
                        (localContext as AlterByAddUniqueKeyContext)._symbol_ = this.uid();
                        }
                    }

                    }
                }

                this.state = 2718;
                this.match(MySqlParser.KW_UNIQUE);
                this.state = 2720;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 82 || _la === 92) {
                    {
                    this.state = 2719;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 82 || _la === 92)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 2723;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                    {
                    this.state = 2722;
                    this.indexName();
                    }
                }

                this.state = 2726;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 188) {
                    {
                    this.state = 2725;
                    this.indexType();
                    }
                }

                this.state = 2728;
                this.indexColumnNames();
                this.state = 2732;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 326, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 2729;
                        this.indexOption();
                        }
                        }
                    }
                    this.state = 2734;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 326, this.context);
                }
                }
                break;
            case 8:
                localContext = new AlterByAddForeignKeyContext(localContext);
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 2735;
                this.match(MySqlParser.KW_ADD);
                this.state = 2740;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 31) {
                    {
                    this.state = 2736;
                    this.match(MySqlParser.KW_CONSTRAINT);
                    this.state = 2738;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                        {
                        this.state = 2737;
                        (localContext as AlterByAddForeignKeyContext)._symbol_ = this.uid();
                        }
                    }

                    }
                }

                this.state = 2742;
                this.match(MySqlParser.KW_FOREIGN);
                this.state = 2743;
                this.match(MySqlParser.KW_KEY);
                this.state = 2745;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                    {
                    this.state = 2744;
                    this.indexName();
                    }
                }

                this.state = 2747;
                this.indexColumnNames();
                this.state = 2748;
                this.referenceDefinition();
                }
                break;
            case 9:
                localContext = new AlterByAddCheckTableConstraintContext(localContext);
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 2750;
                this.match(MySqlParser.KW_ADD);
                this.state = 2752;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 330, this.context) ) {
                case 1:
                    {
                    this.state = 2751;
                    this.checkConstraintDefinition();
                    }
                    break;
                }
                }
                break;
            case 10:
                localContext = new AlterByDropConstraintCheckContext(localContext);
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 2754;
                this.match(MySqlParser.KW_DROP);
                this.state = 2755;
                _la = this.tokenStream.LA(1);
                if(!(_la === 27 || _la === 31)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2756;
                (localContext as AlterByDropConstraintCheckContext)._symbol_ = this.uid();
                }
                break;
            case 11:
                localContext = new AlterByAlterCheckTableConstraintContext(localContext);
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 2757;
                this.match(MySqlParser.KW_ALTER);
                this.state = 2758;
                _la = this.tokenStream.LA(1);
                if(!(_la === 27 || _la === 31)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2759;
                (localContext as AlterByAlterCheckTableConstraintContext)._symbol_ = this.uid();
                this.state = 2761;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 114) {
                    {
                    this.state = 2760;
                    this.match(MySqlParser.KW_NOT);
                    }
                }

                this.state = 2764;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 57) {
                    {
                    this.state = 2763;
                    this.match(MySqlParser.KW_ENFORCED);
                    }
                }

                }
                break;
            case 12:
                localContext = new AlterBySetAlgorithmContext(localContext);
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 2766;
                this.match(MySqlParser.KW_ALGORITHM);
                this.state = 2768;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2767;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2770;
                _la = this.tokenStream.LA(1);
                if(!(_la === 42 || _la === 357 || _la === 430 || _la === 434)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 13:
                localContext = new AlterByAlterColumnDefaultContext(localContext);
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 2771;
                this.match(MySqlParser.KW_ALTER);
                this.state = 2773;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 334, this.context) ) {
                case 1:
                    {
                    this.state = 2772;
                    this.match(MySqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2775;
                this.columnName();
                this.state = 2783;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 335, this.context) ) {
                case 1:
                    {
                    this.state = 2776;
                    this.match(MySqlParser.KW_SET);
                    this.state = 2777;
                    this.match(MySqlParser.KW_DEFAULT);
                    this.state = 2778;
                    this.defaultValue();
                    }
                    break;
                case 2:
                    {
                    this.state = 2779;
                    this.match(MySqlParser.KW_SET);
                    this.state = 2780;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 435 || _la === 686)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                    break;
                case 3:
                    {
                    this.state = 2781;
                    this.match(MySqlParser.KW_DROP);
                    this.state = 2782;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                    break;
                }
                }
                break;
            case 14:
                localContext = new AlterByAlterIndexVisibilityContext(localContext);
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 2785;
                this.match(MySqlParser.KW_ALTER);
                this.state = 2786;
                this.match(MySqlParser.KW_INDEX);
                this.state = 2787;
                this.indexName();
                this.state = 2788;
                _la = this.tokenStream.LA(1);
                if(!(_la === 435 || _la === 686)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 15:
                localContext = new AlterByChangeColumnContext(localContext);
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 2790;
                this.match(MySqlParser.KW_CHANGE);
                this.state = 2792;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 336, this.context) ) {
                case 1:
                    {
                    this.state = 2791;
                    this.match(MySqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2794;
                (localContext as AlterByChangeColumnContext)._oldColumn = this.columnName();
                this.state = 2795;
                (localContext as AlterByChangeColumnContext)._newColumn = this.columnNameCreate();
                this.state = 2796;
                this.columnDefinition();
                this.state = 2800;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_FIRST:
                    {
                    this.state = 2797;
                    this.match(MySqlParser.KW_FIRST);
                    }
                    break;
                case MySqlParser.KW_AFTER:
                    {
                    this.state = 2798;
                    this.match(MySqlParser.KW_AFTER);
                    this.state = 2799;
                    this.columnName();
                    }
                    break;
                case MySqlParser.EOF:
                case MySqlParser.KW_ADD:
                case MySqlParser.KW_ALTER:
                case MySqlParser.KW_ANALYZE:
                case MySqlParser.KW_CALL:
                case MySqlParser.KW_CHANGE:
                case MySqlParser.KW_CHECK:
                case MySqlParser.KW_CREATE:
                case MySqlParser.KW_DELETE:
                case MySqlParser.KW_DESC:
                case MySqlParser.KW_DESCRIBE:
                case MySqlParser.KW_DROP:
                case MySqlParser.KW_EXPLAIN:
                case MySqlParser.KW_GET:
                case MySqlParser.KW_GRANT:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_KILL:
                case MySqlParser.KW_LOAD:
                case MySqlParser.KW_LOCK:
                case MySqlParser.KW_OPTIMIZE:
                case MySqlParser.KW_PURGE:
                case MySqlParser.KW_RELEASE:
                case MySqlParser.KW_RENAME:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RESIGNAL:
                case MySqlParser.KW_REVOKE:
                case MySqlParser.KW_SELECT:
                case MySqlParser.KW_SET:
                case MySqlParser.KW_SHOW:
                case MySqlParser.KW_SIGNAL:
                case MySqlParser.KW_TABLE:
                case MySqlParser.KW_UNLOCK:
                case MySqlParser.KW_UPDATE:
                case MySqlParser.KW_USE:
                case MySqlParser.KW_VALUES:
                case MySqlParser.KW_WITH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESTART:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_CLONE:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.LR_BRACKET:
                case MySqlParser.COMMA:
                case MySqlParser.SEMI:
                    break;
                default:
                    break;
                }
                }
                break;
            case 16:
                localContext = new AlterByDefaultCharsetContext(localContext);
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 2803;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 42) {
                    {
                    this.state = 2802;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                }

                this.state = 2805;
                this.match(MySqlParser.KW_CHARACTER);
                this.state = 2806;
                this.match(MySqlParser.KW_SET);
                this.state = 2807;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 2808;
                this.charsetName();
                this.state = 2814;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 28) {
                    {
                    this.state = 2809;
                    this.match(MySqlParser.KW_COLLATE);
                    this.state = 2811;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 857) {
                        {
                        this.state = 2810;
                        this.match(MySqlParser.EQUAL_SYMBOL);
                        }
                    }

                    this.state = 2813;
                    this.collationName();
                    }
                }

                }
                break;
            case 17:
                localContext = new AlterByConvertCharsetContext(localContext);
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 2816;
                this.match(MySqlParser.KW_CONVERT);
                this.state = 2817;
                this.match(MySqlParser.KW_TO);
                this.state = 2821;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_CHARSET:
                    {
                    this.state = 2818;
                    this.match(MySqlParser.KW_CHARSET);
                    }
                    break;
                case MySqlParser.KW_CHARACTER:
                    {
                    this.state = 2819;
                    this.match(MySqlParser.KW_CHARACTER);
                    this.state = 2820;
                    this.match(MySqlParser.KW_SET);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 2823;
                this.charsetName();
                this.state = 2826;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 28) {
                    {
                    this.state = 2824;
                    this.match(MySqlParser.KW_COLLATE);
                    this.state = 2825;
                    this.collationName();
                    }
                }

                }
                break;
            case 18:
                localContext = new AlterKeysContext(localContext);
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 2828;
                _la = this.tokenStream.LA(1);
                if(!(_la === 368 || _la === 375)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2829;
                this.match(MySqlParser.KW_KEYS);
                }
                break;
            case 19:
                localContext = new AlterTablespaceOptionContext(localContext);
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 2830;
                _la = this.tokenStream.LA(1);
                if(!(_la === 369 || _la === 425)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2831;
                this.match(MySqlParser.KW_TABLESPACE);
                }
                break;
            case 20:
                localContext = new AlterByDropColumnContext(localContext);
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 2832;
                this.match(MySqlParser.KW_DROP);
                this.state = 2834;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 343, this.context) ) {
                case 1:
                    {
                    this.state = 2833;
                    this.match(MySqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2836;
                this.columnName();
                }
                break;
            case 21:
                localContext = new AlterByDropIndexContext(localContext);
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 2837;
                this.match(MySqlParser.KW_DROP);
                this.state = 2838;
                _la = this.tokenStream.LA(1);
                if(!(_la === 82 || _la === 92)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2839;
                this.indexName();
                }
                break;
            case 22:
                localContext = new AlterByDropPrimaryKeyContext(localContext);
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 2840;
                this.match(MySqlParser.KW_DROP);
                this.state = 2841;
                this.match(MySqlParser.KW_PRIMARY);
                this.state = 2842;
                this.match(MySqlParser.KW_KEY);
                }
                break;
            case 23:
                localContext = new AlterByDropForeignKeyContext(localContext);
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 2843;
                this.match(MySqlParser.KW_DROP);
                this.state = 2844;
                this.match(MySqlParser.KW_FOREIGN);
                this.state = 2845;
                this.match(MySqlParser.KW_KEY);
                this.state = 2846;
                (localContext as AlterByDropForeignKeyContext)._fk_symbol = this.uid();
                }
                break;
            case 24:
                localContext = new AlterByForceContext(localContext);
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 2847;
                this.match(MySqlParser.KW_FORCE);
                }
                break;
            case 25:
                localContext = new AlterByLockContext(localContext);
                this.enterOuterAlt(localContext, 25);
                {
                this.state = 2848;
                this.match(MySqlParser.KW_LOCK);
                this.state = 2850;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 2849;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 2852;
                (localContext as AlterByLockContext)._lockType = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 42 || _la === 389 || _la === 505 || _la === 595)) {
                    (localContext as AlterByLockContext)._lockType = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 26:
                localContext = new AlterByModifyColumnContext(localContext);
                this.enterOuterAlt(localContext, 26);
                {
                this.state = 2853;
                this.match(MySqlParser.KW_MODIFY);
                this.state = 2855;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 345, this.context) ) {
                case 1:
                    {
                    this.state = 2854;
                    this.match(MySqlParser.KW_COLUMN);
                    }
                    break;
                }
                this.state = 2857;
                this.columnName();
                this.state = 2858;
                this.columnDefinition();
                this.state = 2862;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_FIRST:
                    {
                    this.state = 2859;
                    this.match(MySqlParser.KW_FIRST);
                    }
                    break;
                case MySqlParser.KW_AFTER:
                    {
                    this.state = 2860;
                    this.match(MySqlParser.KW_AFTER);
                    this.state = 2861;
                    this.columnName();
                    }
                    break;
                case MySqlParser.EOF:
                case MySqlParser.KW_ADD:
                case MySqlParser.KW_ALTER:
                case MySqlParser.KW_ANALYZE:
                case MySqlParser.KW_CALL:
                case MySqlParser.KW_CHANGE:
                case MySqlParser.KW_CHECK:
                case MySqlParser.KW_CREATE:
                case MySqlParser.KW_DELETE:
                case MySqlParser.KW_DESC:
                case MySqlParser.KW_DESCRIBE:
                case MySqlParser.KW_DROP:
                case MySqlParser.KW_EXPLAIN:
                case MySqlParser.KW_GET:
                case MySqlParser.KW_GRANT:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_KILL:
                case MySqlParser.KW_LOAD:
                case MySqlParser.KW_LOCK:
                case MySqlParser.KW_OPTIMIZE:
                case MySqlParser.KW_PURGE:
                case MySqlParser.KW_RELEASE:
                case MySqlParser.KW_RENAME:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RESIGNAL:
                case MySqlParser.KW_REVOKE:
                case MySqlParser.KW_SELECT:
                case MySqlParser.KW_SET:
                case MySqlParser.KW_SHOW:
                case MySqlParser.KW_SIGNAL:
                case MySqlParser.KW_TABLE:
                case MySqlParser.KW_UNLOCK:
                case MySqlParser.KW_UPDATE:
                case MySqlParser.KW_USE:
                case MySqlParser.KW_VALUES:
                case MySqlParser.KW_WITH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESTART:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_CLONE:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.LR_BRACKET:
                case MySqlParser.COMMA:
                case MySqlParser.SEMI:
                    break;
                default:
                    break;
                }
                }
                break;
            case 27:
                localContext = new AlterByOrderContext(localContext);
                this.enterOuterAlt(localContext, 27);
                {
                this.state = 2864;
                this.match(MySqlParser.KW_ORDER);
                this.state = 2865;
                this.match(MySqlParser.KW_BY);
                this.state = 2866;
                this.columnNames();
                }
                break;
            case 28:
                localContext = new AlterByRenameColumnContext(localContext);
                this.enterOuterAlt(localContext, 28);
                {
                this.state = 2867;
                this.match(MySqlParser.KW_RENAME);
                this.state = 2868;
                this.match(MySqlParser.KW_COLUMN);
                this.state = 2869;
                (localContext as AlterByRenameColumnContext)._olcdColumn = this.columnName();
                this.state = 2870;
                this.match(MySqlParser.KW_TO);
                this.state = 2871;
                (localContext as AlterByRenameColumnContext)._newColumn = this.columnNameCreate();
                }
                break;
            case 29:
                localContext = new AlterByRenameIndexContext(localContext);
                this.enterOuterAlt(localContext, 29);
                {
                this.state = 2873;
                this.match(MySqlParser.KW_RENAME);
                this.state = 2874;
                (localContext as AlterByRenameIndexContext)._indexFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 82 || _la === 92)) {
                    (localContext as AlterByRenameIndexContext)._indexFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2875;
                this.indexName();
                this.state = 2876;
                this.match(MySqlParser.KW_TO);
                this.state = 2877;
                this.indexNameCreate();
                }
                break;
            case 30:
                localContext = new AlterByRenameContext(localContext);
                this.enterOuterAlt(localContext, 30);
                {
                this.state = 2879;
                this.match(MySqlParser.KW_RENAME);
                this.state = 2881;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 13 || _la === 176) {
                    {
                    this.state = 2880;
                    (localContext as AlterByRenameContext)._renameFormat = this.tokenStream.LT(1);
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 13 || _la === 176)) {
                        (localContext as AlterByRenameContext)._renameFormat = this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 2883;
                this.tableNameCreate();
                }
                break;
            case 31:
                localContext = new AlterByValidateContext(localContext);
                this.enterOuterAlt(localContext, 31);
                {
                this.state = 2884;
                _la = this.tokenStream.LA(1);
                if(!(_la === 194 || _la === 690)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2885;
                this.match(MySqlParser.KW_VALIDATION);
                }
                break;
            case 32:
                localContext = new AlterPartitionContext(localContext);
                this.enterOuterAlt(localContext, 32);
                {
                this.state = 2886;
                this.alterPartitionSpecification();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterPartitionSpecification(): AlterPartitionSpecificationContext {
        let localContext = new AlterPartitionSpecificationContext(this.context, this.state);
        this.enterRule(localContext, 142, MySqlParser.RULE_alterPartitionSpecification);
        let _la: number;
        try {
            this.state = 2987;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_ADD:
                localContext = new AlterByAddPartitionContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 2889;
                this.match(MySqlParser.KW_ADD);
                this.state = 2890;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2891;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2892;
                this.partitionDefinition();
                this.state = 2897;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 2893;
                    this.match(MySqlParser.COMMA);
                    this.state = 2894;
                    this.partitionDefinition();
                    }
                    }
                    this.state = 2899;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 2900;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case MySqlParser.KW_DROP:
                localContext = new AlterByDropPartitionContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 2902;
                this.match(MySqlParser.KW_DROP);
                this.state = 2903;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2904;
                this.partitionNames();
                }
                break;
            case MySqlParser.KW_DISCARD:
                localContext = new AlterByDiscardPartitionContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 2905;
                this.match(MySqlParser.KW_DISCARD);
                this.state = 2906;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2909;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_ARRAY:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_BUCKETS:
                case MySqlParser.KW_CONDITION:
                case MySqlParser.KW_CURRENT:
                case MySqlParser.KW_CURRENT_USER:
                case MySqlParser.KW_DATABASE:
                case MySqlParser.KW_DEFAULT:
                case MySqlParser.KW_DIAGNOSTICS:
                case MySqlParser.KW_EMPTY:
                case MySqlParser.KW_ENFORCED:
                case MySqlParser.KW_EXCEPT:
                case MySqlParser.KW_GROUP:
                case MySqlParser.KW_IF:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_LATERAL:
                case MySqlParser.KW_LEFT:
                case MySqlParser.KW_NUMBER:
                case MySqlParser.KW_OPTIONAL:
                case MySqlParser.KW_ORDER:
                case MySqlParser.KW_PRIMARY:
                case MySqlParser.KW_REPEAT:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RIGHT:
                case MySqlParser.KW_SCHEMA:
                case MySqlParser.KW_SKIP_QUERY_REWRITE:
                case MySqlParser.KW_STACKED:
                case MySqlParser.KW_DATE:
                case MySqlParser.KW_TIME:
                case MySqlParser.KW_TIMESTAMP:
                case MySqlParser.KW_DATETIME:
                case MySqlParser.KW_YEAR:
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_TEXT:
                case MySqlParser.KW_ENUM:
                case MySqlParser.KW_SERIAL:
                case MySqlParser.KW_JSON_TABLE:
                case MySqlParser.KW_JSON_VALUE:
                case MySqlParser.KW_NESTED:
                case MySqlParser.KW_ORDINALITY:
                case MySqlParser.KW_PATH:
                case MySqlParser.KW_AVG:
                case MySqlParser.KW_BIT_AND:
                case MySqlParser.KW_BIT_OR:
                case MySqlParser.KW_BIT_XOR:
                case MySqlParser.KW_COUNT:
                case MySqlParser.KW_CUME_DIST:
                case MySqlParser.KW_DENSE_RANK:
                case MySqlParser.KW_FIRST_VALUE:
                case MySqlParser.KW_GROUP_CONCAT:
                case MySqlParser.KW_LAG:
                case MySqlParser.KW_LAST_VALUE:
                case MySqlParser.KW_LEAD:
                case MySqlParser.KW_MAX:
                case MySqlParser.KW_MIN:
                case MySqlParser.KW_NTILE:
                case MySqlParser.KW_NTH_VALUE:
                case MySqlParser.KW_PERCENT_RANK:
                case MySqlParser.KW_RANK:
                case MySqlParser.KW_ROW_NUMBER:
                case MySqlParser.KW_STD:
                case MySqlParser.KW_STDDEV:
                case MySqlParser.KW_STDDEV_POP:
                case MySqlParser.KW_STDDEV_SAMP:
                case MySqlParser.KW_SUM:
                case MySqlParser.KW_VAR_POP:
                case MySqlParser.KW_VAR_SAMP:
                case MySqlParser.KW_VARIANCE:
                case MySqlParser.KW_CURRENT_DATE:
                case MySqlParser.KW_CURRENT_TIME:
                case MySqlParser.KW_CURRENT_TIMESTAMP:
                case MySqlParser.KW_LOCALTIME:
                case MySqlParser.KW_CURDATE:
                case MySqlParser.KW_CURTIME:
                case MySqlParser.KW_DATE_ADD:
                case MySqlParser.KW_DATE_SUB:
                case MySqlParser.KW_LOCALTIMESTAMP:
                case MySqlParser.KW_NOW:
                case MySqlParser.KW_POSITION:
                case MySqlParser.KW_SUBSTR:
                case MySqlParser.KW_SUBSTRING:
                case MySqlParser.KW_SYSDATE:
                case MySqlParser.KW_TRIM:
                case MySqlParser.KW_UTC_DATE:
                case MySqlParser.KW_UTC_TIME:
                case MySqlParser.KW_UTC_TIMESTAMP:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_ACTION:
                case MySqlParser.KW_AFTER:
                case MySqlParser.KW_AGGREGATE:
                case MySqlParser.KW_ALGORITHM:
                case MySqlParser.KW_ANY:
                case MySqlParser.KW_AT:
                case MySqlParser.KW_AUTHORS:
                case MySqlParser.KW_AUTOCOMMIT:
                case MySqlParser.KW_AUTOEXTEND_SIZE:
                case MySqlParser.KW_AUTO_INCREMENT:
                case MySqlParser.KW_AVG_ROW_LENGTH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_BIT:
                case MySqlParser.KW_BLOCK:
                case MySqlParser.KW_BOOL:
                case MySqlParser.KW_BOOLEAN:
                case MySqlParser.KW_BTREE:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CASCADED:
                case MySqlParser.KW_CHAIN:
                case MySqlParser.KW_CHANGED:
                case MySqlParser.KW_CHANNEL:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_CIPHER:
                case MySqlParser.KW_CLASS_ORIGIN:
                case MySqlParser.KW_CLIENT:
                case MySqlParser.KW_CLOSE:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_CODE:
                case MySqlParser.KW_COLUMNS:
                case MySqlParser.KW_COLUMN_FORMAT:
                case MySqlParser.KW_COLUMN_NAME:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_COMPACT:
                case MySqlParser.KW_COMPLETION:
                case MySqlParser.KW_COMPRESSED:
                case MySqlParser.KW_COMPRESSION:
                case MySqlParser.KW_CONCURRENT:
                case MySqlParser.KW_CONNECT:
                case MySqlParser.KW_CONNECTION:
                case MySqlParser.KW_CONSISTENT:
                case MySqlParser.KW_CONSTRAINT_CATALOG:
                case MySqlParser.KW_CONSTRAINT_SCHEMA:
                case MySqlParser.KW_CONSTRAINT_NAME:
                case MySqlParser.KW_CONTAINS:
                case MySqlParser.KW_CONTEXT:
                case MySqlParser.KW_CONTRIBUTORS:
                case MySqlParser.KW_COPY:
                case MySqlParser.KW_CPU:
                case MySqlParser.KW_CURSOR_NAME:
                case MySqlParser.KW_DATA:
                case MySqlParser.KW_DATAFILE:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DEFAULT_AUTH:
                case MySqlParser.KW_DEFINER:
                case MySqlParser.KW_DELAY_KEY_WRITE:
                case MySqlParser.KW_DES_KEY_FILE:
                case MySqlParser.KW_DIRECTORY:
                case MySqlParser.KW_DISABLE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DISK:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_DUMPFILE:
                case MySqlParser.KW_DUPLICATE:
                case MySqlParser.KW_DYNAMIC:
                case MySqlParser.KW_ENABLE:
                case MySqlParser.KW_ENCRYPTION:
                case MySqlParser.KW_END:
                case MySqlParser.KW_ENDS:
                case MySqlParser.KW_ENGINE:
                case MySqlParser.KW_ENGINES:
                case MySqlParser.KW_ERROR:
                case MySqlParser.KW_ERRORS:
                case MySqlParser.KW_ESCAPE:
                case MySqlParser.KW_EVENT:
                case MySqlParser.KW_EVENTS:
                case MySqlParser.KW_EVERY:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_EXCLUSIVE:
                case MySqlParser.KW_EXPIRE:
                case MySqlParser.KW_EXPORT:
                case MySqlParser.KW_EXTENDED:
                case MySqlParser.KW_EXTENT_SIZE:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FAST:
                case MySqlParser.KW_FAULTS:
                case MySqlParser.KW_FIELDS:
                case MySqlParser.KW_FILE_BLOCK_SIZE:
                case MySqlParser.KW_FILTER:
                case MySqlParser.KW_FIRST:
                case MySqlParser.KW_FIXED:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_FOLLOWS:
                case MySqlParser.KW_FOUND:
                case MySqlParser.KW_FULL:
                case MySqlParser.KW_FUNCTION:
                case MySqlParser.KW_GENERAL:
                case MySqlParser.KW_GLOBAL:
                case MySqlParser.KW_GRANTS:
                case MySqlParser.KW_GROUP_REPLICATION:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HASH:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_HISTORY:
                case MySqlParser.KW_HOST:
                case MySqlParser.KW_HOSTS:
                case MySqlParser.KW_IDENTIFIED:
                case MySqlParser.KW_IGNORE_SERVER_IDS:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INDEXES:
                case MySqlParser.KW_INITIAL_SIZE:
                case MySqlParser.KW_INPLACE:
                case MySqlParser.KW_INSERT_METHOD:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_INSTANCE:
                case MySqlParser.KW_INSTANT:
                case MySqlParser.KW_INVISIBLE:
                case MySqlParser.KW_INVOKER:
                case MySqlParser.KW_IO:
                case MySqlParser.KW_IO_THREAD:
                case MySqlParser.KW_IPC:
                case MySqlParser.KW_ISOLATION:
                case MySqlParser.KW_ISSUER:
                case MySqlParser.KW_JSON:
                case MySqlParser.KW_KEY_BLOCK_SIZE:
                case MySqlParser.KW_LANGUAGE:
                case MySqlParser.KW_LAST:
                case MySqlParser.KW_LEAVES:
                case MySqlParser.KW_LESS:
                case MySqlParser.KW_LEVEL:
                case MySqlParser.KW_LIST:
                case MySqlParser.KW_LOCAL:
                case MySqlParser.KW_LOGFILE:
                case MySqlParser.KW_LOGS:
                case MySqlParser.KW_MASTER:
                case MySqlParser.KW_MASTER_AUTO_POSITION:
                case MySqlParser.KW_MASTER_CONNECT_RETRY:
                case MySqlParser.KW_MASTER_DELAY:
                case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
                case MySqlParser.KW_MASTER_HOST:
                case MySqlParser.KW_MASTER_LOG_FILE:
                case MySqlParser.KW_MASTER_LOG_POS:
                case MySqlParser.KW_MASTER_PASSWORD:
                case MySqlParser.KW_MASTER_PORT:
                case MySqlParser.KW_MASTER_RETRY_COUNT:
                case MySqlParser.KW_MASTER_SSL:
                case MySqlParser.KW_MASTER_SSL_CA:
                case MySqlParser.KW_MASTER_SSL_CAPATH:
                case MySqlParser.KW_MASTER_SSL_CERT:
                case MySqlParser.KW_MASTER_SSL_CIPHER:
                case MySqlParser.KW_MASTER_SSL_CRL:
                case MySqlParser.KW_MASTER_SSL_CRLPATH:
                case MySqlParser.KW_MASTER_SSL_KEY:
                case MySqlParser.KW_MASTER_TLS_VERSION:
                case MySqlParser.KW_MASTER_USER:
                case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                case MySqlParser.KW_MAX_ROWS:
                case MySqlParser.KW_MAX_SIZE:
                case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                case MySqlParser.KW_MAX_USER_CONNECTIONS:
                case MySqlParser.KW_MEDIUM:
                case MySqlParser.KW_MEMBER:
                case MySqlParser.KW_MERGE:
                case MySqlParser.KW_MESSAGE_TEXT:
                case MySqlParser.KW_MID:
                case MySqlParser.KW_MIGRATE:
                case MySqlParser.KW_MIN_ROWS:
                case MySqlParser.KW_MODE:
                case MySqlParser.KW_MODIFY:
                case MySqlParser.KW_MUTEX:
                case MySqlParser.KW_MYSQL:
                case MySqlParser.KW_MYSQL_ERRNO:
                case MySqlParser.KW_NAME:
                case MySqlParser.KW_NAMES:
                case MySqlParser.KW_NCHAR:
                case MySqlParser.KW_NEVER:
                case MySqlParser.KW_NEXT:
                case MySqlParser.KW_NO:
                case MySqlParser.KW_NOWAIT:
                case MySqlParser.KW_NODEGROUP:
                case MySqlParser.KW_NONE:
                case MySqlParser.KW_ODBC:
                case MySqlParser.KW_OFFLINE:
                case MySqlParser.KW_OFFSET:
                case MySqlParser.KW_OF:
                case MySqlParser.KW_OLD_PASSWORD:
                case MySqlParser.KW_ONE:
                case MySqlParser.KW_ONLINE:
                case MySqlParser.KW_ONLY:
                case MySqlParser.KW_OPEN:
                case MySqlParser.KW_OPTIMIZER_COSTS:
                case MySqlParser.KW_OPTIONS:
                case MySqlParser.KW_OWNER:
                case MySqlParser.KW_PACK_KEYS:
                case MySqlParser.KW_PAGE:
                case MySqlParser.KW_PAGE_CHECKSUM:
                case MySqlParser.KW_PARSER:
                case MySqlParser.KW_PARTIAL:
                case MySqlParser.KW_PARTITIONING:
                case MySqlParser.KW_PARTITIONS:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PHASE:
                case MySqlParser.KW_PLUGIN:
                case MySqlParser.KW_PLUGIN_DIR:
                case MySqlParser.KW_PLUGINS:
                case MySqlParser.KW_PORT:
                case MySqlParser.KW_PRECEDES:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_PRESERVE:
                case MySqlParser.KW_PREV:
                case MySqlParser.KW_PROCESSLIST:
                case MySqlParser.KW_PROFILE:
                case MySqlParser.KW_PROFILES:
                case MySqlParser.KW_PROXY:
                case MySqlParser.KW_QUERY:
                case MySqlParser.KW_QUICK:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_RECOVER:
                case MySqlParser.KW_RECURSIVE:
                case MySqlParser.KW_REDO_BUFFER_SIZE:
                case MySqlParser.KW_REDUNDANT:
                case MySqlParser.KW_RELAY:
                case MySqlParser.KW_RELAY_LOG_FILE:
                case MySqlParser.KW_RELAY_LOG_POS:
                case MySqlParser.KW_RELAYLOG:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_REPLICATE_DO_DB:
                case MySqlParser.KW_REPLICATE_DO_TABLE:
                case MySqlParser.KW_REPLICATE_IGNORE_DB:
                case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATE_REWRITE_DB:
                case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
                case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATION:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESUME:
                case MySqlParser.KW_RETURNED_SQLSTATE:
                case MySqlParser.KW_RETURNS:
                case MySqlParser.KW_REUSE:
                case MySqlParser.KW_ROLE:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_ROLLUP:
                case MySqlParser.KW_ROTATE:
                case MySqlParser.KW_ROW:
                case MySqlParser.KW_ROWS:
                case MySqlParser.KW_ROW_FORMAT:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_SCHEDULE:
                case MySqlParser.KW_SECURITY:
                case MySqlParser.KW_SERVER:
                case MySqlParser.KW_SESSION:
                case MySqlParser.KW_SHARE:
                case MySqlParser.KW_SHARED:
                case MySqlParser.KW_SIGNED:
                case MySqlParser.KW_SIMPLE:
                case MySqlParser.KW_SLAVE:
                case MySqlParser.KW_SLOW:
                case MySqlParser.KW_SNAPSHOT:
                case MySqlParser.KW_SOCKET:
                case MySqlParser.KW_SOME:
                case MySqlParser.KW_SONAME:
                case MySqlParser.KW_SOUNDS:
                case MySqlParser.KW_SOURCE:
                case MySqlParser.KW_SQL_AFTER_GTIDS:
                case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
                case MySqlParser.KW_SQL_BEFORE_GTIDS:
                case MySqlParser.KW_SQL_BUFFER_RESULT:
                case MySqlParser.KW_SQL_CACHE:
                case MySqlParser.KW_SQL_NO_CACHE:
                case MySqlParser.KW_SQL_THREAD:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STARTS:
                case MySqlParser.KW_STATS_AUTO_RECALC:
                case MySqlParser.KW_STATS_PERSISTENT:
                case MySqlParser.KW_STATS_SAMPLE_PAGES:
                case MySqlParser.KW_STATUS:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_STORAGE:
                case MySqlParser.KW_STRING:
                case MySqlParser.KW_SUBCLASS_ORIGIN:
                case MySqlParser.KW_SUBJECT:
                case MySqlParser.KW_SUBPARTITION:
                case MySqlParser.KW_SUBPARTITIONS:
                case MySqlParser.KW_SUSPEND:
                case MySqlParser.KW_SWAPS:
                case MySqlParser.KW_SWITCHES:
                case MySqlParser.KW_TABLE_NAME:
                case MySqlParser.KW_TABLESPACE:
                case MySqlParser.KW_TABLE_TYPE:
                case MySqlParser.KW_TEMPORARY:
                case MySqlParser.KW_TEMPTABLE:
                case MySqlParser.KW_THAN:
                case MySqlParser.KW_TRADITIONAL:
                case MySqlParser.KW_TRANSACTION:
                case MySqlParser.KW_TRANSACTIONAL:
                case MySqlParser.KW_TRIGGERS:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNBOUNDED:
                case MySqlParser.KW_UNDEFINED:
                case MySqlParser.KW_UNDOFILE:
                case MySqlParser.KW_UNDO_BUFFER_SIZE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UNKNOWN:
                case MySqlParser.KW_UNTIL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_USER:
                case MySqlParser.KW_USE_FRM:
                case MySqlParser.KW_USER_RESOURCES:
                case MySqlParser.KW_VALIDATION:
                case MySqlParser.KW_VALUE:
                case MySqlParser.KW_VARIABLES:
                case MySqlParser.KW_VIEW:
                case MySqlParser.KW_VIRTUAL:
                case MySqlParser.KW_VISIBLE:
                case MySqlParser.KW_WAIT:
                case MySqlParser.KW_WARNINGS:
                case MySqlParser.KW_WITHOUT:
                case MySqlParser.KW_WORK:
                case MySqlParser.KW_WRAPPER:
                case MySqlParser.KW_X509:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_XML:
                case MySqlParser.KW_QUARTER:
                case MySqlParser.KW_MONTH:
                case MySqlParser.KW_DAY:
                case MySqlParser.KW_HOUR:
                case MySqlParser.KW_MINUTE:
                case MySqlParser.KW_WEEK:
                case MySqlParser.KW_SECOND:
                case MySqlParser.KW_MICROSECOND:
                case MySqlParser.KW_ADMIN:
                case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
                case MySqlParser.KW_AUDIT_ADMIN:
                case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
                case MySqlParser.KW_BACKUP_ADMIN:
                case MySqlParser.KW_BINLOG_ADMIN:
                case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
                case MySqlParser.KW_CLONE_ADMIN:
                case MySqlParser.KW_CONNECTION_ADMIN:
                case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_FILE:
                case MySqlParser.KW_FIREWALL_ADMIN:
                case MySqlParser.KW_FIREWALL_EXEMPT:
                case MySqlParser.KW_FIREWALL_USER:
                case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
                case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
                case MySqlParser.KW_INVOKE:
                case MySqlParser.KW_LAMBDA:
                case MySqlParser.KW_NDB_STORED_USER:
                case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
                case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
                case MySqlParser.KW_PRIVILEGES:
                case MySqlParser.KW_PROCESS:
                case MySqlParser.KW_RELOAD:
                case MySqlParser.KW_REPLICATION_APPLIER:
                case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_USER:
                case MySqlParser.KW_ROLE_ADMIN:
                case MySqlParser.KW_ROUTINE:
                case MySqlParser.KW_S3:
                case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
                case MySqlParser.KW_SET_USER_ID:
                case MySqlParser.KW_SHOW_ROUTINE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.KW_SUPER:
                case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
                case MySqlParser.KW_TABLES:
                case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
                case MySqlParser.KW_VERSION_TOKEN_ADMIN:
                case MySqlParser.KW_XA_RECOVER_ADMIN:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.KW_ARCHIVE:
                case MySqlParser.KW_BLACKHOLE:
                case MySqlParser.KW_CSV:
                case MySqlParser.KW_FEDERATED:
                case MySqlParser.KW_INNODB:
                case MySqlParser.KW_MEMORY:
                case MySqlParser.KW_MRG_MYISAM:
                case MySqlParser.KW_MYISAM:
                case MySqlParser.KW_NDB:
                case MySqlParser.KW_NDBCLUSTER:
                case MySqlParser.KW_PERFORMANCE_SCHEMA:
                case MySqlParser.KW_TOKUDB:
                case MySqlParser.KW_REPEATABLE:
                case MySqlParser.KW_COMMITTED:
                case MySqlParser.KW_UNCOMMITTED:
                case MySqlParser.KW_SERIALIZABLE:
                case MySqlParser.KW_GEOMETRYCOLLECTION:
                case MySqlParser.KW_LINESTRING:
                case MySqlParser.KW_MULTILINESTRING:
                case MySqlParser.KW_MULTIPOINT:
                case MySqlParser.KW_MULTIPOLYGON:
                case MySqlParser.KW_POINT:
                case MySqlParser.KW_POLYGON:
                case MySqlParser.KW_CATALOG_NAME:
                case MySqlParser.KW_CHARSET:
                case MySqlParser.KW_COLLATION:
                case MySqlParser.KW_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_FORMAT:
                case MySqlParser.KW_GET_FORMAT:
                case MySqlParser.KW_RANDOM:
                case MySqlParser.KW_REVERSE:
                case MySqlParser.KW_ROW_COUNT:
                case MySqlParser.KW_SCHEMA_NAME:
                case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_SRID:
                case MySqlParser.KW_SYSTEM_USER:
                case MySqlParser.KW_TP_CONNECTION_ADMIN:
                case MySqlParser.KW_WEIGHT_STRING:
                case MySqlParser.MOD:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.ID:
                    {
                    this.state = 2907;
                    this.partitionNames();
                    }
                    break;
                case MySqlParser.KW_ALL:
                    {
                    this.state = 2908;
                    this.match(MySqlParser.KW_ALL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 2911;
                this.match(MySqlParser.KW_TABLESPACE);
                }
                break;
            case MySqlParser.KW_IMPORT:
                localContext = new AlterByImportPartitionContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 2912;
                this.match(MySqlParser.KW_IMPORT);
                this.state = 2913;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2916;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_ARRAY:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_BUCKETS:
                case MySqlParser.KW_CONDITION:
                case MySqlParser.KW_CURRENT:
                case MySqlParser.KW_CURRENT_USER:
                case MySqlParser.KW_DATABASE:
                case MySqlParser.KW_DEFAULT:
                case MySqlParser.KW_DIAGNOSTICS:
                case MySqlParser.KW_EMPTY:
                case MySqlParser.KW_ENFORCED:
                case MySqlParser.KW_EXCEPT:
                case MySqlParser.KW_GROUP:
                case MySqlParser.KW_IF:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_LATERAL:
                case MySqlParser.KW_LEFT:
                case MySqlParser.KW_NUMBER:
                case MySqlParser.KW_OPTIONAL:
                case MySqlParser.KW_ORDER:
                case MySqlParser.KW_PRIMARY:
                case MySqlParser.KW_REPEAT:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RIGHT:
                case MySqlParser.KW_SCHEMA:
                case MySqlParser.KW_SKIP_QUERY_REWRITE:
                case MySqlParser.KW_STACKED:
                case MySqlParser.KW_DATE:
                case MySqlParser.KW_TIME:
                case MySqlParser.KW_TIMESTAMP:
                case MySqlParser.KW_DATETIME:
                case MySqlParser.KW_YEAR:
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_TEXT:
                case MySqlParser.KW_ENUM:
                case MySqlParser.KW_SERIAL:
                case MySqlParser.KW_JSON_TABLE:
                case MySqlParser.KW_JSON_VALUE:
                case MySqlParser.KW_NESTED:
                case MySqlParser.KW_ORDINALITY:
                case MySqlParser.KW_PATH:
                case MySqlParser.KW_AVG:
                case MySqlParser.KW_BIT_AND:
                case MySqlParser.KW_BIT_OR:
                case MySqlParser.KW_BIT_XOR:
                case MySqlParser.KW_COUNT:
                case MySqlParser.KW_CUME_DIST:
                case MySqlParser.KW_DENSE_RANK:
                case MySqlParser.KW_FIRST_VALUE:
                case MySqlParser.KW_GROUP_CONCAT:
                case MySqlParser.KW_LAG:
                case MySqlParser.KW_LAST_VALUE:
                case MySqlParser.KW_LEAD:
                case MySqlParser.KW_MAX:
                case MySqlParser.KW_MIN:
                case MySqlParser.KW_NTILE:
                case MySqlParser.KW_NTH_VALUE:
                case MySqlParser.KW_PERCENT_RANK:
                case MySqlParser.KW_RANK:
                case MySqlParser.KW_ROW_NUMBER:
                case MySqlParser.KW_STD:
                case MySqlParser.KW_STDDEV:
                case MySqlParser.KW_STDDEV_POP:
                case MySqlParser.KW_STDDEV_SAMP:
                case MySqlParser.KW_SUM:
                case MySqlParser.KW_VAR_POP:
                case MySqlParser.KW_VAR_SAMP:
                case MySqlParser.KW_VARIANCE:
                case MySqlParser.KW_CURRENT_DATE:
                case MySqlParser.KW_CURRENT_TIME:
                case MySqlParser.KW_CURRENT_TIMESTAMP:
                case MySqlParser.KW_LOCALTIME:
                case MySqlParser.KW_CURDATE:
                case MySqlParser.KW_CURTIME:
                case MySqlParser.KW_DATE_ADD:
                case MySqlParser.KW_DATE_SUB:
                case MySqlParser.KW_LOCALTIMESTAMP:
                case MySqlParser.KW_NOW:
                case MySqlParser.KW_POSITION:
                case MySqlParser.KW_SUBSTR:
                case MySqlParser.KW_SUBSTRING:
                case MySqlParser.KW_SYSDATE:
                case MySqlParser.KW_TRIM:
                case MySqlParser.KW_UTC_DATE:
                case MySqlParser.KW_UTC_TIME:
                case MySqlParser.KW_UTC_TIMESTAMP:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_ACTION:
                case MySqlParser.KW_AFTER:
                case MySqlParser.KW_AGGREGATE:
                case MySqlParser.KW_ALGORITHM:
                case MySqlParser.KW_ANY:
                case MySqlParser.KW_AT:
                case MySqlParser.KW_AUTHORS:
                case MySqlParser.KW_AUTOCOMMIT:
                case MySqlParser.KW_AUTOEXTEND_SIZE:
                case MySqlParser.KW_AUTO_INCREMENT:
                case MySqlParser.KW_AVG_ROW_LENGTH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_BIT:
                case MySqlParser.KW_BLOCK:
                case MySqlParser.KW_BOOL:
                case MySqlParser.KW_BOOLEAN:
                case MySqlParser.KW_BTREE:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CASCADED:
                case MySqlParser.KW_CHAIN:
                case MySqlParser.KW_CHANGED:
                case MySqlParser.KW_CHANNEL:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_CIPHER:
                case MySqlParser.KW_CLASS_ORIGIN:
                case MySqlParser.KW_CLIENT:
                case MySqlParser.KW_CLOSE:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_CODE:
                case MySqlParser.KW_COLUMNS:
                case MySqlParser.KW_COLUMN_FORMAT:
                case MySqlParser.KW_COLUMN_NAME:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_COMPACT:
                case MySqlParser.KW_COMPLETION:
                case MySqlParser.KW_COMPRESSED:
                case MySqlParser.KW_COMPRESSION:
                case MySqlParser.KW_CONCURRENT:
                case MySqlParser.KW_CONNECT:
                case MySqlParser.KW_CONNECTION:
                case MySqlParser.KW_CONSISTENT:
                case MySqlParser.KW_CONSTRAINT_CATALOG:
                case MySqlParser.KW_CONSTRAINT_SCHEMA:
                case MySqlParser.KW_CONSTRAINT_NAME:
                case MySqlParser.KW_CONTAINS:
                case MySqlParser.KW_CONTEXT:
                case MySqlParser.KW_CONTRIBUTORS:
                case MySqlParser.KW_COPY:
                case MySqlParser.KW_CPU:
                case MySqlParser.KW_CURSOR_NAME:
                case MySqlParser.KW_DATA:
                case MySqlParser.KW_DATAFILE:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DEFAULT_AUTH:
                case MySqlParser.KW_DEFINER:
                case MySqlParser.KW_DELAY_KEY_WRITE:
                case MySqlParser.KW_DES_KEY_FILE:
                case MySqlParser.KW_DIRECTORY:
                case MySqlParser.KW_DISABLE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DISK:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_DUMPFILE:
                case MySqlParser.KW_DUPLICATE:
                case MySqlParser.KW_DYNAMIC:
                case MySqlParser.KW_ENABLE:
                case MySqlParser.KW_ENCRYPTION:
                case MySqlParser.KW_END:
                case MySqlParser.KW_ENDS:
                case MySqlParser.KW_ENGINE:
                case MySqlParser.KW_ENGINES:
                case MySqlParser.KW_ERROR:
                case MySqlParser.KW_ERRORS:
                case MySqlParser.KW_ESCAPE:
                case MySqlParser.KW_EVENT:
                case MySqlParser.KW_EVENTS:
                case MySqlParser.KW_EVERY:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_EXCLUSIVE:
                case MySqlParser.KW_EXPIRE:
                case MySqlParser.KW_EXPORT:
                case MySqlParser.KW_EXTENDED:
                case MySqlParser.KW_EXTENT_SIZE:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FAST:
                case MySqlParser.KW_FAULTS:
                case MySqlParser.KW_FIELDS:
                case MySqlParser.KW_FILE_BLOCK_SIZE:
                case MySqlParser.KW_FILTER:
                case MySqlParser.KW_FIRST:
                case MySqlParser.KW_FIXED:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_FOLLOWS:
                case MySqlParser.KW_FOUND:
                case MySqlParser.KW_FULL:
                case MySqlParser.KW_FUNCTION:
                case MySqlParser.KW_GENERAL:
                case MySqlParser.KW_GLOBAL:
                case MySqlParser.KW_GRANTS:
                case MySqlParser.KW_GROUP_REPLICATION:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HASH:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_HISTORY:
                case MySqlParser.KW_HOST:
                case MySqlParser.KW_HOSTS:
                case MySqlParser.KW_IDENTIFIED:
                case MySqlParser.KW_IGNORE_SERVER_IDS:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INDEXES:
                case MySqlParser.KW_INITIAL_SIZE:
                case MySqlParser.KW_INPLACE:
                case MySqlParser.KW_INSERT_METHOD:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_INSTANCE:
                case MySqlParser.KW_INSTANT:
                case MySqlParser.KW_INVISIBLE:
                case MySqlParser.KW_INVOKER:
                case MySqlParser.KW_IO:
                case MySqlParser.KW_IO_THREAD:
                case MySqlParser.KW_IPC:
                case MySqlParser.KW_ISOLATION:
                case MySqlParser.KW_ISSUER:
                case MySqlParser.KW_JSON:
                case MySqlParser.KW_KEY_BLOCK_SIZE:
                case MySqlParser.KW_LANGUAGE:
                case MySqlParser.KW_LAST:
                case MySqlParser.KW_LEAVES:
                case MySqlParser.KW_LESS:
                case MySqlParser.KW_LEVEL:
                case MySqlParser.KW_LIST:
                case MySqlParser.KW_LOCAL:
                case MySqlParser.KW_LOGFILE:
                case MySqlParser.KW_LOGS:
                case MySqlParser.KW_MASTER:
                case MySqlParser.KW_MASTER_AUTO_POSITION:
                case MySqlParser.KW_MASTER_CONNECT_RETRY:
                case MySqlParser.KW_MASTER_DELAY:
                case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
                case MySqlParser.KW_MASTER_HOST:
                case MySqlParser.KW_MASTER_LOG_FILE:
                case MySqlParser.KW_MASTER_LOG_POS:
                case MySqlParser.KW_MASTER_PASSWORD:
                case MySqlParser.KW_MASTER_PORT:
                case MySqlParser.KW_MASTER_RETRY_COUNT:
                case MySqlParser.KW_MASTER_SSL:
                case MySqlParser.KW_MASTER_SSL_CA:
                case MySqlParser.KW_MASTER_SSL_CAPATH:
                case MySqlParser.KW_MASTER_SSL_CERT:
                case MySqlParser.KW_MASTER_SSL_CIPHER:
                case MySqlParser.KW_MASTER_SSL_CRL:
                case MySqlParser.KW_MASTER_SSL_CRLPATH:
                case MySqlParser.KW_MASTER_SSL_KEY:
                case MySqlParser.KW_MASTER_TLS_VERSION:
                case MySqlParser.KW_MASTER_USER:
                case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                case MySqlParser.KW_MAX_ROWS:
                case MySqlParser.KW_MAX_SIZE:
                case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                case MySqlParser.KW_MAX_USER_CONNECTIONS:
                case MySqlParser.KW_MEDIUM:
                case MySqlParser.KW_MEMBER:
                case MySqlParser.KW_MERGE:
                case MySqlParser.KW_MESSAGE_TEXT:
                case MySqlParser.KW_MID:
                case MySqlParser.KW_MIGRATE:
                case MySqlParser.KW_MIN_ROWS:
                case MySqlParser.KW_MODE:
                case MySqlParser.KW_MODIFY:
                case MySqlParser.KW_MUTEX:
                case MySqlParser.KW_MYSQL:
                case MySqlParser.KW_MYSQL_ERRNO:
                case MySqlParser.KW_NAME:
                case MySqlParser.KW_NAMES:
                case MySqlParser.KW_NCHAR:
                case MySqlParser.KW_NEVER:
                case MySqlParser.KW_NEXT:
                case MySqlParser.KW_NO:
                case MySqlParser.KW_NOWAIT:
                case MySqlParser.KW_NODEGROUP:
                case MySqlParser.KW_NONE:
                case MySqlParser.KW_ODBC:
                case MySqlParser.KW_OFFLINE:
                case MySqlParser.KW_OFFSET:
                case MySqlParser.KW_OF:
                case MySqlParser.KW_OLD_PASSWORD:
                case MySqlParser.KW_ONE:
                case MySqlParser.KW_ONLINE:
                case MySqlParser.KW_ONLY:
                case MySqlParser.KW_OPEN:
                case MySqlParser.KW_OPTIMIZER_COSTS:
                case MySqlParser.KW_OPTIONS:
                case MySqlParser.KW_OWNER:
                case MySqlParser.KW_PACK_KEYS:
                case MySqlParser.KW_PAGE:
                case MySqlParser.KW_PAGE_CHECKSUM:
                case MySqlParser.KW_PARSER:
                case MySqlParser.KW_PARTIAL:
                case MySqlParser.KW_PARTITIONING:
                case MySqlParser.KW_PARTITIONS:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PHASE:
                case MySqlParser.KW_PLUGIN:
                case MySqlParser.KW_PLUGIN_DIR:
                case MySqlParser.KW_PLUGINS:
                case MySqlParser.KW_PORT:
                case MySqlParser.KW_PRECEDES:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_PRESERVE:
                case MySqlParser.KW_PREV:
                case MySqlParser.KW_PROCESSLIST:
                case MySqlParser.KW_PROFILE:
                case MySqlParser.KW_PROFILES:
                case MySqlParser.KW_PROXY:
                case MySqlParser.KW_QUERY:
                case MySqlParser.KW_QUICK:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_RECOVER:
                case MySqlParser.KW_RECURSIVE:
                case MySqlParser.KW_REDO_BUFFER_SIZE:
                case MySqlParser.KW_REDUNDANT:
                case MySqlParser.KW_RELAY:
                case MySqlParser.KW_RELAY_LOG_FILE:
                case MySqlParser.KW_RELAY_LOG_POS:
                case MySqlParser.KW_RELAYLOG:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_REPLICATE_DO_DB:
                case MySqlParser.KW_REPLICATE_DO_TABLE:
                case MySqlParser.KW_REPLICATE_IGNORE_DB:
                case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATE_REWRITE_DB:
                case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
                case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATION:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESUME:
                case MySqlParser.KW_RETURNED_SQLSTATE:
                case MySqlParser.KW_RETURNS:
                case MySqlParser.KW_REUSE:
                case MySqlParser.KW_ROLE:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_ROLLUP:
                case MySqlParser.KW_ROTATE:
                case MySqlParser.KW_ROW:
                case MySqlParser.KW_ROWS:
                case MySqlParser.KW_ROW_FORMAT:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_SCHEDULE:
                case MySqlParser.KW_SECURITY:
                case MySqlParser.KW_SERVER:
                case MySqlParser.KW_SESSION:
                case MySqlParser.KW_SHARE:
                case MySqlParser.KW_SHARED:
                case MySqlParser.KW_SIGNED:
                case MySqlParser.KW_SIMPLE:
                case MySqlParser.KW_SLAVE:
                case MySqlParser.KW_SLOW:
                case MySqlParser.KW_SNAPSHOT:
                case MySqlParser.KW_SOCKET:
                case MySqlParser.KW_SOME:
                case MySqlParser.KW_SONAME:
                case MySqlParser.KW_SOUNDS:
                case MySqlParser.KW_SOURCE:
                case MySqlParser.KW_SQL_AFTER_GTIDS:
                case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
                case MySqlParser.KW_SQL_BEFORE_GTIDS:
                case MySqlParser.KW_SQL_BUFFER_RESULT:
                case MySqlParser.KW_SQL_CACHE:
                case MySqlParser.KW_SQL_NO_CACHE:
                case MySqlParser.KW_SQL_THREAD:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STARTS:
                case MySqlParser.KW_STATS_AUTO_RECALC:
                case MySqlParser.KW_STATS_PERSISTENT:
                case MySqlParser.KW_STATS_SAMPLE_PAGES:
                case MySqlParser.KW_STATUS:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_STORAGE:
                case MySqlParser.KW_STRING:
                case MySqlParser.KW_SUBCLASS_ORIGIN:
                case MySqlParser.KW_SUBJECT:
                case MySqlParser.KW_SUBPARTITION:
                case MySqlParser.KW_SUBPARTITIONS:
                case MySqlParser.KW_SUSPEND:
                case MySqlParser.KW_SWAPS:
                case MySqlParser.KW_SWITCHES:
                case MySqlParser.KW_TABLE_NAME:
                case MySqlParser.KW_TABLESPACE:
                case MySqlParser.KW_TABLE_TYPE:
                case MySqlParser.KW_TEMPORARY:
                case MySqlParser.KW_TEMPTABLE:
                case MySqlParser.KW_THAN:
                case MySqlParser.KW_TRADITIONAL:
                case MySqlParser.KW_TRANSACTION:
                case MySqlParser.KW_TRANSACTIONAL:
                case MySqlParser.KW_TRIGGERS:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNBOUNDED:
                case MySqlParser.KW_UNDEFINED:
                case MySqlParser.KW_UNDOFILE:
                case MySqlParser.KW_UNDO_BUFFER_SIZE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UNKNOWN:
                case MySqlParser.KW_UNTIL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_USER:
                case MySqlParser.KW_USE_FRM:
                case MySqlParser.KW_USER_RESOURCES:
                case MySqlParser.KW_VALIDATION:
                case MySqlParser.KW_VALUE:
                case MySqlParser.KW_VARIABLES:
                case MySqlParser.KW_VIEW:
                case MySqlParser.KW_VIRTUAL:
                case MySqlParser.KW_VISIBLE:
                case MySqlParser.KW_WAIT:
                case MySqlParser.KW_WARNINGS:
                case MySqlParser.KW_WITHOUT:
                case MySqlParser.KW_WORK:
                case MySqlParser.KW_WRAPPER:
                case MySqlParser.KW_X509:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_XML:
                case MySqlParser.KW_QUARTER:
                case MySqlParser.KW_MONTH:
                case MySqlParser.KW_DAY:
                case MySqlParser.KW_HOUR:
                case MySqlParser.KW_MINUTE:
                case MySqlParser.KW_WEEK:
                case MySqlParser.KW_SECOND:
                case MySqlParser.KW_MICROSECOND:
                case MySqlParser.KW_ADMIN:
                case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
                case MySqlParser.KW_AUDIT_ADMIN:
                case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
                case MySqlParser.KW_BACKUP_ADMIN:
                case MySqlParser.KW_BINLOG_ADMIN:
                case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
                case MySqlParser.KW_CLONE_ADMIN:
                case MySqlParser.KW_CONNECTION_ADMIN:
                case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_FILE:
                case MySqlParser.KW_FIREWALL_ADMIN:
                case MySqlParser.KW_FIREWALL_EXEMPT:
                case MySqlParser.KW_FIREWALL_USER:
                case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
                case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
                case MySqlParser.KW_INVOKE:
                case MySqlParser.KW_LAMBDA:
                case MySqlParser.KW_NDB_STORED_USER:
                case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
                case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
                case MySqlParser.KW_PRIVILEGES:
                case MySqlParser.KW_PROCESS:
                case MySqlParser.KW_RELOAD:
                case MySqlParser.KW_REPLICATION_APPLIER:
                case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_USER:
                case MySqlParser.KW_ROLE_ADMIN:
                case MySqlParser.KW_ROUTINE:
                case MySqlParser.KW_S3:
                case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
                case MySqlParser.KW_SET_USER_ID:
                case MySqlParser.KW_SHOW_ROUTINE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.KW_SUPER:
                case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
                case MySqlParser.KW_TABLES:
                case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
                case MySqlParser.KW_VERSION_TOKEN_ADMIN:
                case MySqlParser.KW_XA_RECOVER_ADMIN:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.KW_ARCHIVE:
                case MySqlParser.KW_BLACKHOLE:
                case MySqlParser.KW_CSV:
                case MySqlParser.KW_FEDERATED:
                case MySqlParser.KW_INNODB:
                case MySqlParser.KW_MEMORY:
                case MySqlParser.KW_MRG_MYISAM:
                case MySqlParser.KW_MYISAM:
                case MySqlParser.KW_NDB:
                case MySqlParser.KW_NDBCLUSTER:
                case MySqlParser.KW_PERFORMANCE_SCHEMA:
                case MySqlParser.KW_TOKUDB:
                case MySqlParser.KW_REPEATABLE:
                case MySqlParser.KW_COMMITTED:
                case MySqlParser.KW_UNCOMMITTED:
                case MySqlParser.KW_SERIALIZABLE:
                case MySqlParser.KW_GEOMETRYCOLLECTION:
                case MySqlParser.KW_LINESTRING:
                case MySqlParser.KW_MULTILINESTRING:
                case MySqlParser.KW_MULTIPOINT:
                case MySqlParser.KW_MULTIPOLYGON:
                case MySqlParser.KW_POINT:
                case MySqlParser.KW_POLYGON:
                case MySqlParser.KW_CATALOG_NAME:
                case MySqlParser.KW_CHARSET:
                case MySqlParser.KW_COLLATION:
                case MySqlParser.KW_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_FORMAT:
                case MySqlParser.KW_GET_FORMAT:
                case MySqlParser.KW_RANDOM:
                case MySqlParser.KW_REVERSE:
                case MySqlParser.KW_ROW_COUNT:
                case MySqlParser.KW_SCHEMA_NAME:
                case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_SRID:
                case MySqlParser.KW_SYSTEM_USER:
                case MySqlParser.KW_TP_CONNECTION_ADMIN:
                case MySqlParser.KW_WEIGHT_STRING:
                case MySqlParser.MOD:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.ID:
                    {
                    this.state = 2914;
                    this.partitionNames();
                    }
                    break;
                case MySqlParser.KW_ALL:
                    {
                    this.state = 2915;
                    this.match(MySqlParser.KW_ALL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 2918;
                this.match(MySqlParser.KW_TABLESPACE);
                }
                break;
            case MySqlParser.KW_TRUNCATE:
                localContext = new AlterByTruncatePartitionContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 2919;
                this.match(MySqlParser.KW_TRUNCATE);
                this.state = 2920;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2923;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_ARRAY:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_BUCKETS:
                case MySqlParser.KW_CONDITION:
                case MySqlParser.KW_CURRENT:
                case MySqlParser.KW_CURRENT_USER:
                case MySqlParser.KW_DATABASE:
                case MySqlParser.KW_DEFAULT:
                case MySqlParser.KW_DIAGNOSTICS:
                case MySqlParser.KW_EMPTY:
                case MySqlParser.KW_ENFORCED:
                case MySqlParser.KW_EXCEPT:
                case MySqlParser.KW_GROUP:
                case MySqlParser.KW_IF:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_LATERAL:
                case MySqlParser.KW_LEFT:
                case MySqlParser.KW_NUMBER:
                case MySqlParser.KW_OPTIONAL:
                case MySqlParser.KW_ORDER:
                case MySqlParser.KW_PRIMARY:
                case MySqlParser.KW_REPEAT:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RIGHT:
                case MySqlParser.KW_SCHEMA:
                case MySqlParser.KW_SKIP_QUERY_REWRITE:
                case MySqlParser.KW_STACKED:
                case MySqlParser.KW_DATE:
                case MySqlParser.KW_TIME:
                case MySqlParser.KW_TIMESTAMP:
                case MySqlParser.KW_DATETIME:
                case MySqlParser.KW_YEAR:
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_TEXT:
                case MySqlParser.KW_ENUM:
                case MySqlParser.KW_SERIAL:
                case MySqlParser.KW_JSON_TABLE:
                case MySqlParser.KW_JSON_VALUE:
                case MySqlParser.KW_NESTED:
                case MySqlParser.KW_ORDINALITY:
                case MySqlParser.KW_PATH:
                case MySqlParser.KW_AVG:
                case MySqlParser.KW_BIT_AND:
                case MySqlParser.KW_BIT_OR:
                case MySqlParser.KW_BIT_XOR:
                case MySqlParser.KW_COUNT:
                case MySqlParser.KW_CUME_DIST:
                case MySqlParser.KW_DENSE_RANK:
                case MySqlParser.KW_FIRST_VALUE:
                case MySqlParser.KW_GROUP_CONCAT:
                case MySqlParser.KW_LAG:
                case MySqlParser.KW_LAST_VALUE:
                case MySqlParser.KW_LEAD:
                case MySqlParser.KW_MAX:
                case MySqlParser.KW_MIN:
                case MySqlParser.KW_NTILE:
                case MySqlParser.KW_NTH_VALUE:
                case MySqlParser.KW_PERCENT_RANK:
                case MySqlParser.KW_RANK:
                case MySqlParser.KW_ROW_NUMBER:
                case MySqlParser.KW_STD:
                case MySqlParser.KW_STDDEV:
                case MySqlParser.KW_STDDEV_POP:
                case MySqlParser.KW_STDDEV_SAMP:
                case MySqlParser.KW_SUM:
                case MySqlParser.KW_VAR_POP:
                case MySqlParser.KW_VAR_SAMP:
                case MySqlParser.KW_VARIANCE:
                case MySqlParser.KW_CURRENT_DATE:
                case MySqlParser.KW_CURRENT_TIME:
                case MySqlParser.KW_CURRENT_TIMESTAMP:
                case MySqlParser.KW_LOCALTIME:
                case MySqlParser.KW_CURDATE:
                case MySqlParser.KW_CURTIME:
                case MySqlParser.KW_DATE_ADD:
                case MySqlParser.KW_DATE_SUB:
                case MySqlParser.KW_LOCALTIMESTAMP:
                case MySqlParser.KW_NOW:
                case MySqlParser.KW_POSITION:
                case MySqlParser.KW_SUBSTR:
                case MySqlParser.KW_SUBSTRING:
                case MySqlParser.KW_SYSDATE:
                case MySqlParser.KW_TRIM:
                case MySqlParser.KW_UTC_DATE:
                case MySqlParser.KW_UTC_TIME:
                case MySqlParser.KW_UTC_TIMESTAMP:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_ACTION:
                case MySqlParser.KW_AFTER:
                case MySqlParser.KW_AGGREGATE:
                case MySqlParser.KW_ALGORITHM:
                case MySqlParser.KW_ANY:
                case MySqlParser.KW_AT:
                case MySqlParser.KW_AUTHORS:
                case MySqlParser.KW_AUTOCOMMIT:
                case MySqlParser.KW_AUTOEXTEND_SIZE:
                case MySqlParser.KW_AUTO_INCREMENT:
                case MySqlParser.KW_AVG_ROW_LENGTH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_BIT:
                case MySqlParser.KW_BLOCK:
                case MySqlParser.KW_BOOL:
                case MySqlParser.KW_BOOLEAN:
                case MySqlParser.KW_BTREE:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CASCADED:
                case MySqlParser.KW_CHAIN:
                case MySqlParser.KW_CHANGED:
                case MySqlParser.KW_CHANNEL:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_CIPHER:
                case MySqlParser.KW_CLASS_ORIGIN:
                case MySqlParser.KW_CLIENT:
                case MySqlParser.KW_CLOSE:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_CODE:
                case MySqlParser.KW_COLUMNS:
                case MySqlParser.KW_COLUMN_FORMAT:
                case MySqlParser.KW_COLUMN_NAME:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_COMPACT:
                case MySqlParser.KW_COMPLETION:
                case MySqlParser.KW_COMPRESSED:
                case MySqlParser.KW_COMPRESSION:
                case MySqlParser.KW_CONCURRENT:
                case MySqlParser.KW_CONNECT:
                case MySqlParser.KW_CONNECTION:
                case MySqlParser.KW_CONSISTENT:
                case MySqlParser.KW_CONSTRAINT_CATALOG:
                case MySqlParser.KW_CONSTRAINT_SCHEMA:
                case MySqlParser.KW_CONSTRAINT_NAME:
                case MySqlParser.KW_CONTAINS:
                case MySqlParser.KW_CONTEXT:
                case MySqlParser.KW_CONTRIBUTORS:
                case MySqlParser.KW_COPY:
                case MySqlParser.KW_CPU:
                case MySqlParser.KW_CURSOR_NAME:
                case MySqlParser.KW_DATA:
                case MySqlParser.KW_DATAFILE:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DEFAULT_AUTH:
                case MySqlParser.KW_DEFINER:
                case MySqlParser.KW_DELAY_KEY_WRITE:
                case MySqlParser.KW_DES_KEY_FILE:
                case MySqlParser.KW_DIRECTORY:
                case MySqlParser.KW_DISABLE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DISK:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_DUMPFILE:
                case MySqlParser.KW_DUPLICATE:
                case MySqlParser.KW_DYNAMIC:
                case MySqlParser.KW_ENABLE:
                case MySqlParser.KW_ENCRYPTION:
                case MySqlParser.KW_END:
                case MySqlParser.KW_ENDS:
                case MySqlParser.KW_ENGINE:
                case MySqlParser.KW_ENGINES:
                case MySqlParser.KW_ERROR:
                case MySqlParser.KW_ERRORS:
                case MySqlParser.KW_ESCAPE:
                case MySqlParser.KW_EVENT:
                case MySqlParser.KW_EVENTS:
                case MySqlParser.KW_EVERY:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_EXCLUSIVE:
                case MySqlParser.KW_EXPIRE:
                case MySqlParser.KW_EXPORT:
                case MySqlParser.KW_EXTENDED:
                case MySqlParser.KW_EXTENT_SIZE:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FAST:
                case MySqlParser.KW_FAULTS:
                case MySqlParser.KW_FIELDS:
                case MySqlParser.KW_FILE_BLOCK_SIZE:
                case MySqlParser.KW_FILTER:
                case MySqlParser.KW_FIRST:
                case MySqlParser.KW_FIXED:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_FOLLOWS:
                case MySqlParser.KW_FOUND:
                case MySqlParser.KW_FULL:
                case MySqlParser.KW_FUNCTION:
                case MySqlParser.KW_GENERAL:
                case MySqlParser.KW_GLOBAL:
                case MySqlParser.KW_GRANTS:
                case MySqlParser.KW_GROUP_REPLICATION:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HASH:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_HISTORY:
                case MySqlParser.KW_HOST:
                case MySqlParser.KW_HOSTS:
                case MySqlParser.KW_IDENTIFIED:
                case MySqlParser.KW_IGNORE_SERVER_IDS:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INDEXES:
                case MySqlParser.KW_INITIAL_SIZE:
                case MySqlParser.KW_INPLACE:
                case MySqlParser.KW_INSERT_METHOD:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_INSTANCE:
                case MySqlParser.KW_INSTANT:
                case MySqlParser.KW_INVISIBLE:
                case MySqlParser.KW_INVOKER:
                case MySqlParser.KW_IO:
                case MySqlParser.KW_IO_THREAD:
                case MySqlParser.KW_IPC:
                case MySqlParser.KW_ISOLATION:
                case MySqlParser.KW_ISSUER:
                case MySqlParser.KW_JSON:
                case MySqlParser.KW_KEY_BLOCK_SIZE:
                case MySqlParser.KW_LANGUAGE:
                case MySqlParser.KW_LAST:
                case MySqlParser.KW_LEAVES:
                case MySqlParser.KW_LESS:
                case MySqlParser.KW_LEVEL:
                case MySqlParser.KW_LIST:
                case MySqlParser.KW_LOCAL:
                case MySqlParser.KW_LOGFILE:
                case MySqlParser.KW_LOGS:
                case MySqlParser.KW_MASTER:
                case MySqlParser.KW_MASTER_AUTO_POSITION:
                case MySqlParser.KW_MASTER_CONNECT_RETRY:
                case MySqlParser.KW_MASTER_DELAY:
                case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
                case MySqlParser.KW_MASTER_HOST:
                case MySqlParser.KW_MASTER_LOG_FILE:
                case MySqlParser.KW_MASTER_LOG_POS:
                case MySqlParser.KW_MASTER_PASSWORD:
                case MySqlParser.KW_MASTER_PORT:
                case MySqlParser.KW_MASTER_RETRY_COUNT:
                case MySqlParser.KW_MASTER_SSL:
                case MySqlParser.KW_MASTER_SSL_CA:
                case MySqlParser.KW_MASTER_SSL_CAPATH:
                case MySqlParser.KW_MASTER_SSL_CERT:
                case MySqlParser.KW_MASTER_SSL_CIPHER:
                case MySqlParser.KW_MASTER_SSL_CRL:
                case MySqlParser.KW_MASTER_SSL_CRLPATH:
                case MySqlParser.KW_MASTER_SSL_KEY:
                case MySqlParser.KW_MASTER_TLS_VERSION:
                case MySqlParser.KW_MASTER_USER:
                case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                case MySqlParser.KW_MAX_ROWS:
                case MySqlParser.KW_MAX_SIZE:
                case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                case MySqlParser.KW_MAX_USER_CONNECTIONS:
                case MySqlParser.KW_MEDIUM:
                case MySqlParser.KW_MEMBER:
                case MySqlParser.KW_MERGE:
                case MySqlParser.KW_MESSAGE_TEXT:
                case MySqlParser.KW_MID:
                case MySqlParser.KW_MIGRATE:
                case MySqlParser.KW_MIN_ROWS:
                case MySqlParser.KW_MODE:
                case MySqlParser.KW_MODIFY:
                case MySqlParser.KW_MUTEX:
                case MySqlParser.KW_MYSQL:
                case MySqlParser.KW_MYSQL_ERRNO:
                case MySqlParser.KW_NAME:
                case MySqlParser.KW_NAMES:
                case MySqlParser.KW_NCHAR:
                case MySqlParser.KW_NEVER:
                case MySqlParser.KW_NEXT:
                case MySqlParser.KW_NO:
                case MySqlParser.KW_NOWAIT:
                case MySqlParser.KW_NODEGROUP:
                case MySqlParser.KW_NONE:
                case MySqlParser.KW_ODBC:
                case MySqlParser.KW_OFFLINE:
                case MySqlParser.KW_OFFSET:
                case MySqlParser.KW_OF:
                case MySqlParser.KW_OLD_PASSWORD:
                case MySqlParser.KW_ONE:
                case MySqlParser.KW_ONLINE:
                case MySqlParser.KW_ONLY:
                case MySqlParser.KW_OPEN:
                case MySqlParser.KW_OPTIMIZER_COSTS:
                case MySqlParser.KW_OPTIONS:
                case MySqlParser.KW_OWNER:
                case MySqlParser.KW_PACK_KEYS:
                case MySqlParser.KW_PAGE:
                case MySqlParser.KW_PAGE_CHECKSUM:
                case MySqlParser.KW_PARSER:
                case MySqlParser.KW_PARTIAL:
                case MySqlParser.KW_PARTITIONING:
                case MySqlParser.KW_PARTITIONS:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PHASE:
                case MySqlParser.KW_PLUGIN:
                case MySqlParser.KW_PLUGIN_DIR:
                case MySqlParser.KW_PLUGINS:
                case MySqlParser.KW_PORT:
                case MySqlParser.KW_PRECEDES:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_PRESERVE:
                case MySqlParser.KW_PREV:
                case MySqlParser.KW_PROCESSLIST:
                case MySqlParser.KW_PROFILE:
                case MySqlParser.KW_PROFILES:
                case MySqlParser.KW_PROXY:
                case MySqlParser.KW_QUERY:
                case MySqlParser.KW_QUICK:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_RECOVER:
                case MySqlParser.KW_RECURSIVE:
                case MySqlParser.KW_REDO_BUFFER_SIZE:
                case MySqlParser.KW_REDUNDANT:
                case MySqlParser.KW_RELAY:
                case MySqlParser.KW_RELAY_LOG_FILE:
                case MySqlParser.KW_RELAY_LOG_POS:
                case MySqlParser.KW_RELAYLOG:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_REPLICATE_DO_DB:
                case MySqlParser.KW_REPLICATE_DO_TABLE:
                case MySqlParser.KW_REPLICATE_IGNORE_DB:
                case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATE_REWRITE_DB:
                case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
                case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATION:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESUME:
                case MySqlParser.KW_RETURNED_SQLSTATE:
                case MySqlParser.KW_RETURNS:
                case MySqlParser.KW_REUSE:
                case MySqlParser.KW_ROLE:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_ROLLUP:
                case MySqlParser.KW_ROTATE:
                case MySqlParser.KW_ROW:
                case MySqlParser.KW_ROWS:
                case MySqlParser.KW_ROW_FORMAT:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_SCHEDULE:
                case MySqlParser.KW_SECURITY:
                case MySqlParser.KW_SERVER:
                case MySqlParser.KW_SESSION:
                case MySqlParser.KW_SHARE:
                case MySqlParser.KW_SHARED:
                case MySqlParser.KW_SIGNED:
                case MySqlParser.KW_SIMPLE:
                case MySqlParser.KW_SLAVE:
                case MySqlParser.KW_SLOW:
                case MySqlParser.KW_SNAPSHOT:
                case MySqlParser.KW_SOCKET:
                case MySqlParser.KW_SOME:
                case MySqlParser.KW_SONAME:
                case MySqlParser.KW_SOUNDS:
                case MySqlParser.KW_SOURCE:
                case MySqlParser.KW_SQL_AFTER_GTIDS:
                case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
                case MySqlParser.KW_SQL_BEFORE_GTIDS:
                case MySqlParser.KW_SQL_BUFFER_RESULT:
                case MySqlParser.KW_SQL_CACHE:
                case MySqlParser.KW_SQL_NO_CACHE:
                case MySqlParser.KW_SQL_THREAD:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STARTS:
                case MySqlParser.KW_STATS_AUTO_RECALC:
                case MySqlParser.KW_STATS_PERSISTENT:
                case MySqlParser.KW_STATS_SAMPLE_PAGES:
                case MySqlParser.KW_STATUS:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_STORAGE:
                case MySqlParser.KW_STRING:
                case MySqlParser.KW_SUBCLASS_ORIGIN:
                case MySqlParser.KW_SUBJECT:
                case MySqlParser.KW_SUBPARTITION:
                case MySqlParser.KW_SUBPARTITIONS:
                case MySqlParser.KW_SUSPEND:
                case MySqlParser.KW_SWAPS:
                case MySqlParser.KW_SWITCHES:
                case MySqlParser.KW_TABLE_NAME:
                case MySqlParser.KW_TABLESPACE:
                case MySqlParser.KW_TABLE_TYPE:
                case MySqlParser.KW_TEMPORARY:
                case MySqlParser.KW_TEMPTABLE:
                case MySqlParser.KW_THAN:
                case MySqlParser.KW_TRADITIONAL:
                case MySqlParser.KW_TRANSACTION:
                case MySqlParser.KW_TRANSACTIONAL:
                case MySqlParser.KW_TRIGGERS:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNBOUNDED:
                case MySqlParser.KW_UNDEFINED:
                case MySqlParser.KW_UNDOFILE:
                case MySqlParser.KW_UNDO_BUFFER_SIZE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UNKNOWN:
                case MySqlParser.KW_UNTIL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_USER:
                case MySqlParser.KW_USE_FRM:
                case MySqlParser.KW_USER_RESOURCES:
                case MySqlParser.KW_VALIDATION:
                case MySqlParser.KW_VALUE:
                case MySqlParser.KW_VARIABLES:
                case MySqlParser.KW_VIEW:
                case MySqlParser.KW_VIRTUAL:
                case MySqlParser.KW_VISIBLE:
                case MySqlParser.KW_WAIT:
                case MySqlParser.KW_WARNINGS:
                case MySqlParser.KW_WITHOUT:
                case MySqlParser.KW_WORK:
                case MySqlParser.KW_WRAPPER:
                case MySqlParser.KW_X509:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_XML:
                case MySqlParser.KW_QUARTER:
                case MySqlParser.KW_MONTH:
                case MySqlParser.KW_DAY:
                case MySqlParser.KW_HOUR:
                case MySqlParser.KW_MINUTE:
                case MySqlParser.KW_WEEK:
                case MySqlParser.KW_SECOND:
                case MySqlParser.KW_MICROSECOND:
                case MySqlParser.KW_ADMIN:
                case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
                case MySqlParser.KW_AUDIT_ADMIN:
                case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
                case MySqlParser.KW_BACKUP_ADMIN:
                case MySqlParser.KW_BINLOG_ADMIN:
                case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
                case MySqlParser.KW_CLONE_ADMIN:
                case MySqlParser.KW_CONNECTION_ADMIN:
                case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_FILE:
                case MySqlParser.KW_FIREWALL_ADMIN:
                case MySqlParser.KW_FIREWALL_EXEMPT:
                case MySqlParser.KW_FIREWALL_USER:
                case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
                case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
                case MySqlParser.KW_INVOKE:
                case MySqlParser.KW_LAMBDA:
                case MySqlParser.KW_NDB_STORED_USER:
                case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
                case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
                case MySqlParser.KW_PRIVILEGES:
                case MySqlParser.KW_PROCESS:
                case MySqlParser.KW_RELOAD:
                case MySqlParser.KW_REPLICATION_APPLIER:
                case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_USER:
                case MySqlParser.KW_ROLE_ADMIN:
                case MySqlParser.KW_ROUTINE:
                case MySqlParser.KW_S3:
                case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
                case MySqlParser.KW_SET_USER_ID:
                case MySqlParser.KW_SHOW_ROUTINE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.KW_SUPER:
                case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
                case MySqlParser.KW_TABLES:
                case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
                case MySqlParser.KW_VERSION_TOKEN_ADMIN:
                case MySqlParser.KW_XA_RECOVER_ADMIN:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.KW_ARCHIVE:
                case MySqlParser.KW_BLACKHOLE:
                case MySqlParser.KW_CSV:
                case MySqlParser.KW_FEDERATED:
                case MySqlParser.KW_INNODB:
                case MySqlParser.KW_MEMORY:
                case MySqlParser.KW_MRG_MYISAM:
                case MySqlParser.KW_MYISAM:
                case MySqlParser.KW_NDB:
                case MySqlParser.KW_NDBCLUSTER:
                case MySqlParser.KW_PERFORMANCE_SCHEMA:
                case MySqlParser.KW_TOKUDB:
                case MySqlParser.KW_REPEATABLE:
                case MySqlParser.KW_COMMITTED:
                case MySqlParser.KW_UNCOMMITTED:
                case MySqlParser.KW_SERIALIZABLE:
                case MySqlParser.KW_GEOMETRYCOLLECTION:
                case MySqlParser.KW_LINESTRING:
                case MySqlParser.KW_MULTILINESTRING:
                case MySqlParser.KW_MULTIPOINT:
                case MySqlParser.KW_MULTIPOLYGON:
                case MySqlParser.KW_POINT:
                case MySqlParser.KW_POLYGON:
                case MySqlParser.KW_CATALOG_NAME:
                case MySqlParser.KW_CHARSET:
                case MySqlParser.KW_COLLATION:
                case MySqlParser.KW_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_FORMAT:
                case MySqlParser.KW_GET_FORMAT:
                case MySqlParser.KW_RANDOM:
                case MySqlParser.KW_REVERSE:
                case MySqlParser.KW_ROW_COUNT:
                case MySqlParser.KW_SCHEMA_NAME:
                case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_SRID:
                case MySqlParser.KW_SYSTEM_USER:
                case MySqlParser.KW_TP_CONNECTION_ADMIN:
                case MySqlParser.KW_WEIGHT_STRING:
                case MySqlParser.MOD:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.ID:
                    {
                    this.state = 2921;
                    this.partitionNames();
                    }
                    break;
                case MySqlParser.KW_ALL:
                    {
                    this.state = 2922;
                    this.match(MySqlParser.KW_ALL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case MySqlParser.KW_COALESCE:
                localContext = new AlterByCoalescePartitionContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 2925;
                this.match(MySqlParser.KW_COALESCE);
                this.state = 2926;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2927;
                this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_REORGANIZE:
                localContext = new AlterByReorganizePartitionContext(localContext);
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 2928;
                this.match(MySqlParser.KW_REORGANIZE);
                this.state = 2929;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2930;
                this.partitionNames();
                this.state = 2931;
                this.match(MySqlParser.KW_INTO);
                this.state = 2932;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 2933;
                this.partitionDefinition();
                this.state = 2938;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 2934;
                    this.match(MySqlParser.COMMA);
                    this.state = 2935;
                    this.partitionDefinition();
                    }
                    }
                    this.state = 2940;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 2941;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case MySqlParser.KW_EXCHANGE:
                localContext = new AlterByExchangePartitionContext(localContext);
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 2943;
                this.match(MySqlParser.KW_EXCHANGE);
                this.state = 2944;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2945;
                this.partitionName();
                this.state = 2946;
                this.match(MySqlParser.KW_WITH);
                this.state = 2947;
                this.match(MySqlParser.KW_TABLE);
                this.state = 2948;
                this.tableName();
                this.state = 2951;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 354, this.context) ) {
                case 1:
                    {
                    this.state = 2949;
                    (localContext as AlterByExchangePartitionContext)._validationFormat = this.tokenStream.LT(1);
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 194 || _la === 690)) {
                        (localContext as AlterByExchangePartitionContext)._validationFormat = this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 2950;
                    this.match(MySqlParser.KW_VALIDATION);
                    }
                    break;
                }
                }
                break;
            case MySqlParser.KW_ANALYZE:
                localContext = new AlterByAnalyzePartitionContext(localContext);
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 2953;
                this.match(MySqlParser.KW_ANALYZE);
                this.state = 2954;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2957;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_ARRAY:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_BUCKETS:
                case MySqlParser.KW_CONDITION:
                case MySqlParser.KW_CURRENT:
                case MySqlParser.KW_CURRENT_USER:
                case MySqlParser.KW_DATABASE:
                case MySqlParser.KW_DEFAULT:
                case MySqlParser.KW_DIAGNOSTICS:
                case MySqlParser.KW_EMPTY:
                case MySqlParser.KW_ENFORCED:
                case MySqlParser.KW_EXCEPT:
                case MySqlParser.KW_GROUP:
                case MySqlParser.KW_IF:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_LATERAL:
                case MySqlParser.KW_LEFT:
                case MySqlParser.KW_NUMBER:
                case MySqlParser.KW_OPTIONAL:
                case MySqlParser.KW_ORDER:
                case MySqlParser.KW_PRIMARY:
                case MySqlParser.KW_REPEAT:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RIGHT:
                case MySqlParser.KW_SCHEMA:
                case MySqlParser.KW_SKIP_QUERY_REWRITE:
                case MySqlParser.KW_STACKED:
                case MySqlParser.KW_DATE:
                case MySqlParser.KW_TIME:
                case MySqlParser.KW_TIMESTAMP:
                case MySqlParser.KW_DATETIME:
                case MySqlParser.KW_YEAR:
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_TEXT:
                case MySqlParser.KW_ENUM:
                case MySqlParser.KW_SERIAL:
                case MySqlParser.KW_JSON_TABLE:
                case MySqlParser.KW_JSON_VALUE:
                case MySqlParser.KW_NESTED:
                case MySqlParser.KW_ORDINALITY:
                case MySqlParser.KW_PATH:
                case MySqlParser.KW_AVG:
                case MySqlParser.KW_BIT_AND:
                case MySqlParser.KW_BIT_OR:
                case MySqlParser.KW_BIT_XOR:
                case MySqlParser.KW_COUNT:
                case MySqlParser.KW_CUME_DIST:
                case MySqlParser.KW_DENSE_RANK:
                case MySqlParser.KW_FIRST_VALUE:
                case MySqlParser.KW_GROUP_CONCAT:
                case MySqlParser.KW_LAG:
                case MySqlParser.KW_LAST_VALUE:
                case MySqlParser.KW_LEAD:
                case MySqlParser.KW_MAX:
                case MySqlParser.KW_MIN:
                case MySqlParser.KW_NTILE:
                case MySqlParser.KW_NTH_VALUE:
                case MySqlParser.KW_PERCENT_RANK:
                case MySqlParser.KW_RANK:
                case MySqlParser.KW_ROW_NUMBER:
                case MySqlParser.KW_STD:
                case MySqlParser.KW_STDDEV:
                case MySqlParser.KW_STDDEV_POP:
                case MySqlParser.KW_STDDEV_SAMP:
                case MySqlParser.KW_SUM:
                case MySqlParser.KW_VAR_POP:
                case MySqlParser.KW_VAR_SAMP:
                case MySqlParser.KW_VARIANCE:
                case MySqlParser.KW_CURRENT_DATE:
                case MySqlParser.KW_CURRENT_TIME:
                case MySqlParser.KW_CURRENT_TIMESTAMP:
                case MySqlParser.KW_LOCALTIME:
                case MySqlParser.KW_CURDATE:
                case MySqlParser.KW_CURTIME:
                case MySqlParser.KW_DATE_ADD:
                case MySqlParser.KW_DATE_SUB:
                case MySqlParser.KW_LOCALTIMESTAMP:
                case MySqlParser.KW_NOW:
                case MySqlParser.KW_POSITION:
                case MySqlParser.KW_SUBSTR:
                case MySqlParser.KW_SUBSTRING:
                case MySqlParser.KW_SYSDATE:
                case MySqlParser.KW_TRIM:
                case MySqlParser.KW_UTC_DATE:
                case MySqlParser.KW_UTC_TIME:
                case MySqlParser.KW_UTC_TIMESTAMP:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_ACTION:
                case MySqlParser.KW_AFTER:
                case MySqlParser.KW_AGGREGATE:
                case MySqlParser.KW_ALGORITHM:
                case MySqlParser.KW_ANY:
                case MySqlParser.KW_AT:
                case MySqlParser.KW_AUTHORS:
                case MySqlParser.KW_AUTOCOMMIT:
                case MySqlParser.KW_AUTOEXTEND_SIZE:
                case MySqlParser.KW_AUTO_INCREMENT:
                case MySqlParser.KW_AVG_ROW_LENGTH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_BIT:
                case MySqlParser.KW_BLOCK:
                case MySqlParser.KW_BOOL:
                case MySqlParser.KW_BOOLEAN:
                case MySqlParser.KW_BTREE:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CASCADED:
                case MySqlParser.KW_CHAIN:
                case MySqlParser.KW_CHANGED:
                case MySqlParser.KW_CHANNEL:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_CIPHER:
                case MySqlParser.KW_CLASS_ORIGIN:
                case MySqlParser.KW_CLIENT:
                case MySqlParser.KW_CLOSE:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_CODE:
                case MySqlParser.KW_COLUMNS:
                case MySqlParser.KW_COLUMN_FORMAT:
                case MySqlParser.KW_COLUMN_NAME:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_COMPACT:
                case MySqlParser.KW_COMPLETION:
                case MySqlParser.KW_COMPRESSED:
                case MySqlParser.KW_COMPRESSION:
                case MySqlParser.KW_CONCURRENT:
                case MySqlParser.KW_CONNECT:
                case MySqlParser.KW_CONNECTION:
                case MySqlParser.KW_CONSISTENT:
                case MySqlParser.KW_CONSTRAINT_CATALOG:
                case MySqlParser.KW_CONSTRAINT_SCHEMA:
                case MySqlParser.KW_CONSTRAINT_NAME:
                case MySqlParser.KW_CONTAINS:
                case MySqlParser.KW_CONTEXT:
                case MySqlParser.KW_CONTRIBUTORS:
                case MySqlParser.KW_COPY:
                case MySqlParser.KW_CPU:
                case MySqlParser.KW_CURSOR_NAME:
                case MySqlParser.KW_DATA:
                case MySqlParser.KW_DATAFILE:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DEFAULT_AUTH:
                case MySqlParser.KW_DEFINER:
                case MySqlParser.KW_DELAY_KEY_WRITE:
                case MySqlParser.KW_DES_KEY_FILE:
                case MySqlParser.KW_DIRECTORY:
                case MySqlParser.KW_DISABLE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DISK:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_DUMPFILE:
                case MySqlParser.KW_DUPLICATE:
                case MySqlParser.KW_DYNAMIC:
                case MySqlParser.KW_ENABLE:
                case MySqlParser.KW_ENCRYPTION:
                case MySqlParser.KW_END:
                case MySqlParser.KW_ENDS:
                case MySqlParser.KW_ENGINE:
                case MySqlParser.KW_ENGINES:
                case MySqlParser.KW_ERROR:
                case MySqlParser.KW_ERRORS:
                case MySqlParser.KW_ESCAPE:
                case MySqlParser.KW_EVENT:
                case MySqlParser.KW_EVENTS:
                case MySqlParser.KW_EVERY:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_EXCLUSIVE:
                case MySqlParser.KW_EXPIRE:
                case MySqlParser.KW_EXPORT:
                case MySqlParser.KW_EXTENDED:
                case MySqlParser.KW_EXTENT_SIZE:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FAST:
                case MySqlParser.KW_FAULTS:
                case MySqlParser.KW_FIELDS:
                case MySqlParser.KW_FILE_BLOCK_SIZE:
                case MySqlParser.KW_FILTER:
                case MySqlParser.KW_FIRST:
                case MySqlParser.KW_FIXED:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_FOLLOWS:
                case MySqlParser.KW_FOUND:
                case MySqlParser.KW_FULL:
                case MySqlParser.KW_FUNCTION:
                case MySqlParser.KW_GENERAL:
                case MySqlParser.KW_GLOBAL:
                case MySqlParser.KW_GRANTS:
                case MySqlParser.KW_GROUP_REPLICATION:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HASH:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_HISTORY:
                case MySqlParser.KW_HOST:
                case MySqlParser.KW_HOSTS:
                case MySqlParser.KW_IDENTIFIED:
                case MySqlParser.KW_IGNORE_SERVER_IDS:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INDEXES:
                case MySqlParser.KW_INITIAL_SIZE:
                case MySqlParser.KW_INPLACE:
                case MySqlParser.KW_INSERT_METHOD:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_INSTANCE:
                case MySqlParser.KW_INSTANT:
                case MySqlParser.KW_INVISIBLE:
                case MySqlParser.KW_INVOKER:
                case MySqlParser.KW_IO:
                case MySqlParser.KW_IO_THREAD:
                case MySqlParser.KW_IPC:
                case MySqlParser.KW_ISOLATION:
                case MySqlParser.KW_ISSUER:
                case MySqlParser.KW_JSON:
                case MySqlParser.KW_KEY_BLOCK_SIZE:
                case MySqlParser.KW_LANGUAGE:
                case MySqlParser.KW_LAST:
                case MySqlParser.KW_LEAVES:
                case MySqlParser.KW_LESS:
                case MySqlParser.KW_LEVEL:
                case MySqlParser.KW_LIST:
                case MySqlParser.KW_LOCAL:
                case MySqlParser.KW_LOGFILE:
                case MySqlParser.KW_LOGS:
                case MySqlParser.KW_MASTER:
                case MySqlParser.KW_MASTER_AUTO_POSITION:
                case MySqlParser.KW_MASTER_CONNECT_RETRY:
                case MySqlParser.KW_MASTER_DELAY:
                case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
                case MySqlParser.KW_MASTER_HOST:
                case MySqlParser.KW_MASTER_LOG_FILE:
                case MySqlParser.KW_MASTER_LOG_POS:
                case MySqlParser.KW_MASTER_PASSWORD:
                case MySqlParser.KW_MASTER_PORT:
                case MySqlParser.KW_MASTER_RETRY_COUNT:
                case MySqlParser.KW_MASTER_SSL:
                case MySqlParser.KW_MASTER_SSL_CA:
                case MySqlParser.KW_MASTER_SSL_CAPATH:
                case MySqlParser.KW_MASTER_SSL_CERT:
                case MySqlParser.KW_MASTER_SSL_CIPHER:
                case MySqlParser.KW_MASTER_SSL_CRL:
                case MySqlParser.KW_MASTER_SSL_CRLPATH:
                case MySqlParser.KW_MASTER_SSL_KEY:
                case MySqlParser.KW_MASTER_TLS_VERSION:
                case MySqlParser.KW_MASTER_USER:
                case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                case MySqlParser.KW_MAX_ROWS:
                case MySqlParser.KW_MAX_SIZE:
                case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                case MySqlParser.KW_MAX_USER_CONNECTIONS:
                case MySqlParser.KW_MEDIUM:
                case MySqlParser.KW_MEMBER:
                case MySqlParser.KW_MERGE:
                case MySqlParser.KW_MESSAGE_TEXT:
                case MySqlParser.KW_MID:
                case MySqlParser.KW_MIGRATE:
                case MySqlParser.KW_MIN_ROWS:
                case MySqlParser.KW_MODE:
                case MySqlParser.KW_MODIFY:
                case MySqlParser.KW_MUTEX:
                case MySqlParser.KW_MYSQL:
                case MySqlParser.KW_MYSQL_ERRNO:
                case MySqlParser.KW_NAME:
                case MySqlParser.KW_NAMES:
                case MySqlParser.KW_NCHAR:
                case MySqlParser.KW_NEVER:
                case MySqlParser.KW_NEXT:
                case MySqlParser.KW_NO:
                case MySqlParser.KW_NOWAIT:
                case MySqlParser.KW_NODEGROUP:
                case MySqlParser.KW_NONE:
                case MySqlParser.KW_ODBC:
                case MySqlParser.KW_OFFLINE:
                case MySqlParser.KW_OFFSET:
                case MySqlParser.KW_OF:
                case MySqlParser.KW_OLD_PASSWORD:
                case MySqlParser.KW_ONE:
                case MySqlParser.KW_ONLINE:
                case MySqlParser.KW_ONLY:
                case MySqlParser.KW_OPEN:
                case MySqlParser.KW_OPTIMIZER_COSTS:
                case MySqlParser.KW_OPTIONS:
                case MySqlParser.KW_OWNER:
                case MySqlParser.KW_PACK_KEYS:
                case MySqlParser.KW_PAGE:
                case MySqlParser.KW_PAGE_CHECKSUM:
                case MySqlParser.KW_PARSER:
                case MySqlParser.KW_PARTIAL:
                case MySqlParser.KW_PARTITIONING:
                case MySqlParser.KW_PARTITIONS:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PHASE:
                case MySqlParser.KW_PLUGIN:
                case MySqlParser.KW_PLUGIN_DIR:
                case MySqlParser.KW_PLUGINS:
                case MySqlParser.KW_PORT:
                case MySqlParser.KW_PRECEDES:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_PRESERVE:
                case MySqlParser.KW_PREV:
                case MySqlParser.KW_PROCESSLIST:
                case MySqlParser.KW_PROFILE:
                case MySqlParser.KW_PROFILES:
                case MySqlParser.KW_PROXY:
                case MySqlParser.KW_QUERY:
                case MySqlParser.KW_QUICK:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_RECOVER:
                case MySqlParser.KW_RECURSIVE:
                case MySqlParser.KW_REDO_BUFFER_SIZE:
                case MySqlParser.KW_REDUNDANT:
                case MySqlParser.KW_RELAY:
                case MySqlParser.KW_RELAY_LOG_FILE:
                case MySqlParser.KW_RELAY_LOG_POS:
                case MySqlParser.KW_RELAYLOG:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_REPLICATE_DO_DB:
                case MySqlParser.KW_REPLICATE_DO_TABLE:
                case MySqlParser.KW_REPLICATE_IGNORE_DB:
                case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATE_REWRITE_DB:
                case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
                case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATION:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESUME:
                case MySqlParser.KW_RETURNED_SQLSTATE:
                case MySqlParser.KW_RETURNS:
                case MySqlParser.KW_REUSE:
                case MySqlParser.KW_ROLE:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_ROLLUP:
                case MySqlParser.KW_ROTATE:
                case MySqlParser.KW_ROW:
                case MySqlParser.KW_ROWS:
                case MySqlParser.KW_ROW_FORMAT:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_SCHEDULE:
                case MySqlParser.KW_SECURITY:
                case MySqlParser.KW_SERVER:
                case MySqlParser.KW_SESSION:
                case MySqlParser.KW_SHARE:
                case MySqlParser.KW_SHARED:
                case MySqlParser.KW_SIGNED:
                case MySqlParser.KW_SIMPLE:
                case MySqlParser.KW_SLAVE:
                case MySqlParser.KW_SLOW:
                case MySqlParser.KW_SNAPSHOT:
                case MySqlParser.KW_SOCKET:
                case MySqlParser.KW_SOME:
                case MySqlParser.KW_SONAME:
                case MySqlParser.KW_SOUNDS:
                case MySqlParser.KW_SOURCE:
                case MySqlParser.KW_SQL_AFTER_GTIDS:
                case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
                case MySqlParser.KW_SQL_BEFORE_GTIDS:
                case MySqlParser.KW_SQL_BUFFER_RESULT:
                case MySqlParser.KW_SQL_CACHE:
                case MySqlParser.KW_SQL_NO_CACHE:
                case MySqlParser.KW_SQL_THREAD:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STARTS:
                case MySqlParser.KW_STATS_AUTO_RECALC:
                case MySqlParser.KW_STATS_PERSISTENT:
                case MySqlParser.KW_STATS_SAMPLE_PAGES:
                case MySqlParser.KW_STATUS:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_STORAGE:
                case MySqlParser.KW_STRING:
                case MySqlParser.KW_SUBCLASS_ORIGIN:
                case MySqlParser.KW_SUBJECT:
                case MySqlParser.KW_SUBPARTITION:
                case MySqlParser.KW_SUBPARTITIONS:
                case MySqlParser.KW_SUSPEND:
                case MySqlParser.KW_SWAPS:
                case MySqlParser.KW_SWITCHES:
                case MySqlParser.KW_TABLE_NAME:
                case MySqlParser.KW_TABLESPACE:
                case MySqlParser.KW_TABLE_TYPE:
                case MySqlParser.KW_TEMPORARY:
                case MySqlParser.KW_TEMPTABLE:
                case MySqlParser.KW_THAN:
                case MySqlParser.KW_TRADITIONAL:
                case MySqlParser.KW_TRANSACTION:
                case MySqlParser.KW_TRANSACTIONAL:
                case MySqlParser.KW_TRIGGERS:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNBOUNDED:
                case MySqlParser.KW_UNDEFINED:
                case MySqlParser.KW_UNDOFILE:
                case MySqlParser.KW_UNDO_BUFFER_SIZE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UNKNOWN:
                case MySqlParser.KW_UNTIL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_USER:
                case MySqlParser.KW_USE_FRM:
                case MySqlParser.KW_USER_RESOURCES:
                case MySqlParser.KW_VALIDATION:
                case MySqlParser.KW_VALUE:
                case MySqlParser.KW_VARIABLES:
                case MySqlParser.KW_VIEW:
                case MySqlParser.KW_VIRTUAL:
                case MySqlParser.KW_VISIBLE:
                case MySqlParser.KW_WAIT:
                case MySqlParser.KW_WARNINGS:
                case MySqlParser.KW_WITHOUT:
                case MySqlParser.KW_WORK:
                case MySqlParser.KW_WRAPPER:
                case MySqlParser.KW_X509:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_XML:
                case MySqlParser.KW_QUARTER:
                case MySqlParser.KW_MONTH:
                case MySqlParser.KW_DAY:
                case MySqlParser.KW_HOUR:
                case MySqlParser.KW_MINUTE:
                case MySqlParser.KW_WEEK:
                case MySqlParser.KW_SECOND:
                case MySqlParser.KW_MICROSECOND:
                case MySqlParser.KW_ADMIN:
                case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
                case MySqlParser.KW_AUDIT_ADMIN:
                case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
                case MySqlParser.KW_BACKUP_ADMIN:
                case MySqlParser.KW_BINLOG_ADMIN:
                case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
                case MySqlParser.KW_CLONE_ADMIN:
                case MySqlParser.KW_CONNECTION_ADMIN:
                case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_FILE:
                case MySqlParser.KW_FIREWALL_ADMIN:
                case MySqlParser.KW_FIREWALL_EXEMPT:
                case MySqlParser.KW_FIREWALL_USER:
                case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
                case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
                case MySqlParser.KW_INVOKE:
                case MySqlParser.KW_LAMBDA:
                case MySqlParser.KW_NDB_STORED_USER:
                case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
                case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
                case MySqlParser.KW_PRIVILEGES:
                case MySqlParser.KW_PROCESS:
                case MySqlParser.KW_RELOAD:
                case MySqlParser.KW_REPLICATION_APPLIER:
                case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_USER:
                case MySqlParser.KW_ROLE_ADMIN:
                case MySqlParser.KW_ROUTINE:
                case MySqlParser.KW_S3:
                case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
                case MySqlParser.KW_SET_USER_ID:
                case MySqlParser.KW_SHOW_ROUTINE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.KW_SUPER:
                case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
                case MySqlParser.KW_TABLES:
                case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
                case MySqlParser.KW_VERSION_TOKEN_ADMIN:
                case MySqlParser.KW_XA_RECOVER_ADMIN:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.KW_ARCHIVE:
                case MySqlParser.KW_BLACKHOLE:
                case MySqlParser.KW_CSV:
                case MySqlParser.KW_FEDERATED:
                case MySqlParser.KW_INNODB:
                case MySqlParser.KW_MEMORY:
                case MySqlParser.KW_MRG_MYISAM:
                case MySqlParser.KW_MYISAM:
                case MySqlParser.KW_NDB:
                case MySqlParser.KW_NDBCLUSTER:
                case MySqlParser.KW_PERFORMANCE_SCHEMA:
                case MySqlParser.KW_TOKUDB:
                case MySqlParser.KW_REPEATABLE:
                case MySqlParser.KW_COMMITTED:
                case MySqlParser.KW_UNCOMMITTED:
                case MySqlParser.KW_SERIALIZABLE:
                case MySqlParser.KW_GEOMETRYCOLLECTION:
                case MySqlParser.KW_LINESTRING:
                case MySqlParser.KW_MULTILINESTRING:
                case MySqlParser.KW_MULTIPOINT:
                case MySqlParser.KW_MULTIPOLYGON:
                case MySqlParser.KW_POINT:
                case MySqlParser.KW_POLYGON:
                case MySqlParser.KW_CATALOG_NAME:
                case MySqlParser.KW_CHARSET:
                case MySqlParser.KW_COLLATION:
                case MySqlParser.KW_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_FORMAT:
                case MySqlParser.KW_GET_FORMAT:
                case MySqlParser.KW_RANDOM:
                case MySqlParser.KW_REVERSE:
                case MySqlParser.KW_ROW_COUNT:
                case MySqlParser.KW_SCHEMA_NAME:
                case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_SRID:
                case MySqlParser.KW_SYSTEM_USER:
                case MySqlParser.KW_TP_CONNECTION_ADMIN:
                case MySqlParser.KW_WEIGHT_STRING:
                case MySqlParser.MOD:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.ID:
                    {
                    this.state = 2955;
                    this.partitionNames();
                    }
                    break;
                case MySqlParser.KW_ALL:
                    {
                    this.state = 2956;
                    this.match(MySqlParser.KW_ALL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case MySqlParser.KW_CHECK:
                localContext = new AlterByCheckPartitionContext(localContext);
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 2959;
                this.match(MySqlParser.KW_CHECK);
                this.state = 2960;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2963;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_ARRAY:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_BUCKETS:
                case MySqlParser.KW_CONDITION:
                case MySqlParser.KW_CURRENT:
                case MySqlParser.KW_CURRENT_USER:
                case MySqlParser.KW_DATABASE:
                case MySqlParser.KW_DEFAULT:
                case MySqlParser.KW_DIAGNOSTICS:
                case MySqlParser.KW_EMPTY:
                case MySqlParser.KW_ENFORCED:
                case MySqlParser.KW_EXCEPT:
                case MySqlParser.KW_GROUP:
                case MySqlParser.KW_IF:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_LATERAL:
                case MySqlParser.KW_LEFT:
                case MySqlParser.KW_NUMBER:
                case MySqlParser.KW_OPTIONAL:
                case MySqlParser.KW_ORDER:
                case MySqlParser.KW_PRIMARY:
                case MySqlParser.KW_REPEAT:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RIGHT:
                case MySqlParser.KW_SCHEMA:
                case MySqlParser.KW_SKIP_QUERY_REWRITE:
                case MySqlParser.KW_STACKED:
                case MySqlParser.KW_DATE:
                case MySqlParser.KW_TIME:
                case MySqlParser.KW_TIMESTAMP:
                case MySqlParser.KW_DATETIME:
                case MySqlParser.KW_YEAR:
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_TEXT:
                case MySqlParser.KW_ENUM:
                case MySqlParser.KW_SERIAL:
                case MySqlParser.KW_JSON_TABLE:
                case MySqlParser.KW_JSON_VALUE:
                case MySqlParser.KW_NESTED:
                case MySqlParser.KW_ORDINALITY:
                case MySqlParser.KW_PATH:
                case MySqlParser.KW_AVG:
                case MySqlParser.KW_BIT_AND:
                case MySqlParser.KW_BIT_OR:
                case MySqlParser.KW_BIT_XOR:
                case MySqlParser.KW_COUNT:
                case MySqlParser.KW_CUME_DIST:
                case MySqlParser.KW_DENSE_RANK:
                case MySqlParser.KW_FIRST_VALUE:
                case MySqlParser.KW_GROUP_CONCAT:
                case MySqlParser.KW_LAG:
                case MySqlParser.KW_LAST_VALUE:
                case MySqlParser.KW_LEAD:
                case MySqlParser.KW_MAX:
                case MySqlParser.KW_MIN:
                case MySqlParser.KW_NTILE:
                case MySqlParser.KW_NTH_VALUE:
                case MySqlParser.KW_PERCENT_RANK:
                case MySqlParser.KW_RANK:
                case MySqlParser.KW_ROW_NUMBER:
                case MySqlParser.KW_STD:
                case MySqlParser.KW_STDDEV:
                case MySqlParser.KW_STDDEV_POP:
                case MySqlParser.KW_STDDEV_SAMP:
                case MySqlParser.KW_SUM:
                case MySqlParser.KW_VAR_POP:
                case MySqlParser.KW_VAR_SAMP:
                case MySqlParser.KW_VARIANCE:
                case MySqlParser.KW_CURRENT_DATE:
                case MySqlParser.KW_CURRENT_TIME:
                case MySqlParser.KW_CURRENT_TIMESTAMP:
                case MySqlParser.KW_LOCALTIME:
                case MySqlParser.KW_CURDATE:
                case MySqlParser.KW_CURTIME:
                case MySqlParser.KW_DATE_ADD:
                case MySqlParser.KW_DATE_SUB:
                case MySqlParser.KW_LOCALTIMESTAMP:
                case MySqlParser.KW_NOW:
                case MySqlParser.KW_POSITION:
                case MySqlParser.KW_SUBSTR:
                case MySqlParser.KW_SUBSTRING:
                case MySqlParser.KW_SYSDATE:
                case MySqlParser.KW_TRIM:
                case MySqlParser.KW_UTC_DATE:
                case MySqlParser.KW_UTC_TIME:
                case MySqlParser.KW_UTC_TIMESTAMP:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_ACTION:
                case MySqlParser.KW_AFTER:
                case MySqlParser.KW_AGGREGATE:
                case MySqlParser.KW_ALGORITHM:
                case MySqlParser.KW_ANY:
                case MySqlParser.KW_AT:
                case MySqlParser.KW_AUTHORS:
                case MySqlParser.KW_AUTOCOMMIT:
                case MySqlParser.KW_AUTOEXTEND_SIZE:
                case MySqlParser.KW_AUTO_INCREMENT:
                case MySqlParser.KW_AVG_ROW_LENGTH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_BIT:
                case MySqlParser.KW_BLOCK:
                case MySqlParser.KW_BOOL:
                case MySqlParser.KW_BOOLEAN:
                case MySqlParser.KW_BTREE:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CASCADED:
                case MySqlParser.KW_CHAIN:
                case MySqlParser.KW_CHANGED:
                case MySqlParser.KW_CHANNEL:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_CIPHER:
                case MySqlParser.KW_CLASS_ORIGIN:
                case MySqlParser.KW_CLIENT:
                case MySqlParser.KW_CLOSE:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_CODE:
                case MySqlParser.KW_COLUMNS:
                case MySqlParser.KW_COLUMN_FORMAT:
                case MySqlParser.KW_COLUMN_NAME:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_COMPACT:
                case MySqlParser.KW_COMPLETION:
                case MySqlParser.KW_COMPRESSED:
                case MySqlParser.KW_COMPRESSION:
                case MySqlParser.KW_CONCURRENT:
                case MySqlParser.KW_CONNECT:
                case MySqlParser.KW_CONNECTION:
                case MySqlParser.KW_CONSISTENT:
                case MySqlParser.KW_CONSTRAINT_CATALOG:
                case MySqlParser.KW_CONSTRAINT_SCHEMA:
                case MySqlParser.KW_CONSTRAINT_NAME:
                case MySqlParser.KW_CONTAINS:
                case MySqlParser.KW_CONTEXT:
                case MySqlParser.KW_CONTRIBUTORS:
                case MySqlParser.KW_COPY:
                case MySqlParser.KW_CPU:
                case MySqlParser.KW_CURSOR_NAME:
                case MySqlParser.KW_DATA:
                case MySqlParser.KW_DATAFILE:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DEFAULT_AUTH:
                case MySqlParser.KW_DEFINER:
                case MySqlParser.KW_DELAY_KEY_WRITE:
                case MySqlParser.KW_DES_KEY_FILE:
                case MySqlParser.KW_DIRECTORY:
                case MySqlParser.KW_DISABLE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DISK:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_DUMPFILE:
                case MySqlParser.KW_DUPLICATE:
                case MySqlParser.KW_DYNAMIC:
                case MySqlParser.KW_ENABLE:
                case MySqlParser.KW_ENCRYPTION:
                case MySqlParser.KW_END:
                case MySqlParser.KW_ENDS:
                case MySqlParser.KW_ENGINE:
                case MySqlParser.KW_ENGINES:
                case MySqlParser.KW_ERROR:
                case MySqlParser.KW_ERRORS:
                case MySqlParser.KW_ESCAPE:
                case MySqlParser.KW_EVENT:
                case MySqlParser.KW_EVENTS:
                case MySqlParser.KW_EVERY:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_EXCLUSIVE:
                case MySqlParser.KW_EXPIRE:
                case MySqlParser.KW_EXPORT:
                case MySqlParser.KW_EXTENDED:
                case MySqlParser.KW_EXTENT_SIZE:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FAST:
                case MySqlParser.KW_FAULTS:
                case MySqlParser.KW_FIELDS:
                case MySqlParser.KW_FILE_BLOCK_SIZE:
                case MySqlParser.KW_FILTER:
                case MySqlParser.KW_FIRST:
                case MySqlParser.KW_FIXED:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_FOLLOWS:
                case MySqlParser.KW_FOUND:
                case MySqlParser.KW_FULL:
                case MySqlParser.KW_FUNCTION:
                case MySqlParser.KW_GENERAL:
                case MySqlParser.KW_GLOBAL:
                case MySqlParser.KW_GRANTS:
                case MySqlParser.KW_GROUP_REPLICATION:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HASH:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_HISTORY:
                case MySqlParser.KW_HOST:
                case MySqlParser.KW_HOSTS:
                case MySqlParser.KW_IDENTIFIED:
                case MySqlParser.KW_IGNORE_SERVER_IDS:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INDEXES:
                case MySqlParser.KW_INITIAL_SIZE:
                case MySqlParser.KW_INPLACE:
                case MySqlParser.KW_INSERT_METHOD:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_INSTANCE:
                case MySqlParser.KW_INSTANT:
                case MySqlParser.KW_INVISIBLE:
                case MySqlParser.KW_INVOKER:
                case MySqlParser.KW_IO:
                case MySqlParser.KW_IO_THREAD:
                case MySqlParser.KW_IPC:
                case MySqlParser.KW_ISOLATION:
                case MySqlParser.KW_ISSUER:
                case MySqlParser.KW_JSON:
                case MySqlParser.KW_KEY_BLOCK_SIZE:
                case MySqlParser.KW_LANGUAGE:
                case MySqlParser.KW_LAST:
                case MySqlParser.KW_LEAVES:
                case MySqlParser.KW_LESS:
                case MySqlParser.KW_LEVEL:
                case MySqlParser.KW_LIST:
                case MySqlParser.KW_LOCAL:
                case MySqlParser.KW_LOGFILE:
                case MySqlParser.KW_LOGS:
                case MySqlParser.KW_MASTER:
                case MySqlParser.KW_MASTER_AUTO_POSITION:
                case MySqlParser.KW_MASTER_CONNECT_RETRY:
                case MySqlParser.KW_MASTER_DELAY:
                case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
                case MySqlParser.KW_MASTER_HOST:
                case MySqlParser.KW_MASTER_LOG_FILE:
                case MySqlParser.KW_MASTER_LOG_POS:
                case MySqlParser.KW_MASTER_PASSWORD:
                case MySqlParser.KW_MASTER_PORT:
                case MySqlParser.KW_MASTER_RETRY_COUNT:
                case MySqlParser.KW_MASTER_SSL:
                case MySqlParser.KW_MASTER_SSL_CA:
                case MySqlParser.KW_MASTER_SSL_CAPATH:
                case MySqlParser.KW_MASTER_SSL_CERT:
                case MySqlParser.KW_MASTER_SSL_CIPHER:
                case MySqlParser.KW_MASTER_SSL_CRL:
                case MySqlParser.KW_MASTER_SSL_CRLPATH:
                case MySqlParser.KW_MASTER_SSL_KEY:
                case MySqlParser.KW_MASTER_TLS_VERSION:
                case MySqlParser.KW_MASTER_USER:
                case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                case MySqlParser.KW_MAX_ROWS:
                case MySqlParser.KW_MAX_SIZE:
                case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                case MySqlParser.KW_MAX_USER_CONNECTIONS:
                case MySqlParser.KW_MEDIUM:
                case MySqlParser.KW_MEMBER:
                case MySqlParser.KW_MERGE:
                case MySqlParser.KW_MESSAGE_TEXT:
                case MySqlParser.KW_MID:
                case MySqlParser.KW_MIGRATE:
                case MySqlParser.KW_MIN_ROWS:
                case MySqlParser.KW_MODE:
                case MySqlParser.KW_MODIFY:
                case MySqlParser.KW_MUTEX:
                case MySqlParser.KW_MYSQL:
                case MySqlParser.KW_MYSQL_ERRNO:
                case MySqlParser.KW_NAME:
                case MySqlParser.KW_NAMES:
                case MySqlParser.KW_NCHAR:
                case MySqlParser.KW_NEVER:
                case MySqlParser.KW_NEXT:
                case MySqlParser.KW_NO:
                case MySqlParser.KW_NOWAIT:
                case MySqlParser.KW_NODEGROUP:
                case MySqlParser.KW_NONE:
                case MySqlParser.KW_ODBC:
                case MySqlParser.KW_OFFLINE:
                case MySqlParser.KW_OFFSET:
                case MySqlParser.KW_OF:
                case MySqlParser.KW_OLD_PASSWORD:
                case MySqlParser.KW_ONE:
                case MySqlParser.KW_ONLINE:
                case MySqlParser.KW_ONLY:
                case MySqlParser.KW_OPEN:
                case MySqlParser.KW_OPTIMIZER_COSTS:
                case MySqlParser.KW_OPTIONS:
                case MySqlParser.KW_OWNER:
                case MySqlParser.KW_PACK_KEYS:
                case MySqlParser.KW_PAGE:
                case MySqlParser.KW_PAGE_CHECKSUM:
                case MySqlParser.KW_PARSER:
                case MySqlParser.KW_PARTIAL:
                case MySqlParser.KW_PARTITIONING:
                case MySqlParser.KW_PARTITIONS:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PHASE:
                case MySqlParser.KW_PLUGIN:
                case MySqlParser.KW_PLUGIN_DIR:
                case MySqlParser.KW_PLUGINS:
                case MySqlParser.KW_PORT:
                case MySqlParser.KW_PRECEDES:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_PRESERVE:
                case MySqlParser.KW_PREV:
                case MySqlParser.KW_PROCESSLIST:
                case MySqlParser.KW_PROFILE:
                case MySqlParser.KW_PROFILES:
                case MySqlParser.KW_PROXY:
                case MySqlParser.KW_QUERY:
                case MySqlParser.KW_QUICK:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_RECOVER:
                case MySqlParser.KW_RECURSIVE:
                case MySqlParser.KW_REDO_BUFFER_SIZE:
                case MySqlParser.KW_REDUNDANT:
                case MySqlParser.KW_RELAY:
                case MySqlParser.KW_RELAY_LOG_FILE:
                case MySqlParser.KW_RELAY_LOG_POS:
                case MySqlParser.KW_RELAYLOG:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_REPLICATE_DO_DB:
                case MySqlParser.KW_REPLICATE_DO_TABLE:
                case MySqlParser.KW_REPLICATE_IGNORE_DB:
                case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATE_REWRITE_DB:
                case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
                case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATION:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESUME:
                case MySqlParser.KW_RETURNED_SQLSTATE:
                case MySqlParser.KW_RETURNS:
                case MySqlParser.KW_REUSE:
                case MySqlParser.KW_ROLE:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_ROLLUP:
                case MySqlParser.KW_ROTATE:
                case MySqlParser.KW_ROW:
                case MySqlParser.KW_ROWS:
                case MySqlParser.KW_ROW_FORMAT:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_SCHEDULE:
                case MySqlParser.KW_SECURITY:
                case MySqlParser.KW_SERVER:
                case MySqlParser.KW_SESSION:
                case MySqlParser.KW_SHARE:
                case MySqlParser.KW_SHARED:
                case MySqlParser.KW_SIGNED:
                case MySqlParser.KW_SIMPLE:
                case MySqlParser.KW_SLAVE:
                case MySqlParser.KW_SLOW:
                case MySqlParser.KW_SNAPSHOT:
                case MySqlParser.KW_SOCKET:
                case MySqlParser.KW_SOME:
                case MySqlParser.KW_SONAME:
                case MySqlParser.KW_SOUNDS:
                case MySqlParser.KW_SOURCE:
                case MySqlParser.KW_SQL_AFTER_GTIDS:
                case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
                case MySqlParser.KW_SQL_BEFORE_GTIDS:
                case MySqlParser.KW_SQL_BUFFER_RESULT:
                case MySqlParser.KW_SQL_CACHE:
                case MySqlParser.KW_SQL_NO_CACHE:
                case MySqlParser.KW_SQL_THREAD:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STARTS:
                case MySqlParser.KW_STATS_AUTO_RECALC:
                case MySqlParser.KW_STATS_PERSISTENT:
                case MySqlParser.KW_STATS_SAMPLE_PAGES:
                case MySqlParser.KW_STATUS:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_STORAGE:
                case MySqlParser.KW_STRING:
                case MySqlParser.KW_SUBCLASS_ORIGIN:
                case MySqlParser.KW_SUBJECT:
                case MySqlParser.KW_SUBPARTITION:
                case MySqlParser.KW_SUBPARTITIONS:
                case MySqlParser.KW_SUSPEND:
                case MySqlParser.KW_SWAPS:
                case MySqlParser.KW_SWITCHES:
                case MySqlParser.KW_TABLE_NAME:
                case MySqlParser.KW_TABLESPACE:
                case MySqlParser.KW_TABLE_TYPE:
                case MySqlParser.KW_TEMPORARY:
                case MySqlParser.KW_TEMPTABLE:
                case MySqlParser.KW_THAN:
                case MySqlParser.KW_TRADITIONAL:
                case MySqlParser.KW_TRANSACTION:
                case MySqlParser.KW_TRANSACTIONAL:
                case MySqlParser.KW_TRIGGERS:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNBOUNDED:
                case MySqlParser.KW_UNDEFINED:
                case MySqlParser.KW_UNDOFILE:
                case MySqlParser.KW_UNDO_BUFFER_SIZE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UNKNOWN:
                case MySqlParser.KW_UNTIL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_USER:
                case MySqlParser.KW_USE_FRM:
                case MySqlParser.KW_USER_RESOURCES:
                case MySqlParser.KW_VALIDATION:
                case MySqlParser.KW_VALUE:
                case MySqlParser.KW_VARIABLES:
                case MySqlParser.KW_VIEW:
                case MySqlParser.KW_VIRTUAL:
                case MySqlParser.KW_VISIBLE:
                case MySqlParser.KW_WAIT:
                case MySqlParser.KW_WARNINGS:
                case MySqlParser.KW_WITHOUT:
                case MySqlParser.KW_WORK:
                case MySqlParser.KW_WRAPPER:
                case MySqlParser.KW_X509:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_XML:
                case MySqlParser.KW_QUARTER:
                case MySqlParser.KW_MONTH:
                case MySqlParser.KW_DAY:
                case MySqlParser.KW_HOUR:
                case MySqlParser.KW_MINUTE:
                case MySqlParser.KW_WEEK:
                case MySqlParser.KW_SECOND:
                case MySqlParser.KW_MICROSECOND:
                case MySqlParser.KW_ADMIN:
                case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
                case MySqlParser.KW_AUDIT_ADMIN:
                case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
                case MySqlParser.KW_BACKUP_ADMIN:
                case MySqlParser.KW_BINLOG_ADMIN:
                case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
                case MySqlParser.KW_CLONE_ADMIN:
                case MySqlParser.KW_CONNECTION_ADMIN:
                case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_FILE:
                case MySqlParser.KW_FIREWALL_ADMIN:
                case MySqlParser.KW_FIREWALL_EXEMPT:
                case MySqlParser.KW_FIREWALL_USER:
                case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
                case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
                case MySqlParser.KW_INVOKE:
                case MySqlParser.KW_LAMBDA:
                case MySqlParser.KW_NDB_STORED_USER:
                case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
                case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
                case MySqlParser.KW_PRIVILEGES:
                case MySqlParser.KW_PROCESS:
                case MySqlParser.KW_RELOAD:
                case MySqlParser.KW_REPLICATION_APPLIER:
                case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_USER:
                case MySqlParser.KW_ROLE_ADMIN:
                case MySqlParser.KW_ROUTINE:
                case MySqlParser.KW_S3:
                case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
                case MySqlParser.KW_SET_USER_ID:
                case MySqlParser.KW_SHOW_ROUTINE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.KW_SUPER:
                case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
                case MySqlParser.KW_TABLES:
                case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
                case MySqlParser.KW_VERSION_TOKEN_ADMIN:
                case MySqlParser.KW_XA_RECOVER_ADMIN:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.KW_ARCHIVE:
                case MySqlParser.KW_BLACKHOLE:
                case MySqlParser.KW_CSV:
                case MySqlParser.KW_FEDERATED:
                case MySqlParser.KW_INNODB:
                case MySqlParser.KW_MEMORY:
                case MySqlParser.KW_MRG_MYISAM:
                case MySqlParser.KW_MYISAM:
                case MySqlParser.KW_NDB:
                case MySqlParser.KW_NDBCLUSTER:
                case MySqlParser.KW_PERFORMANCE_SCHEMA:
                case MySqlParser.KW_TOKUDB:
                case MySqlParser.KW_REPEATABLE:
                case MySqlParser.KW_COMMITTED:
                case MySqlParser.KW_UNCOMMITTED:
                case MySqlParser.KW_SERIALIZABLE:
                case MySqlParser.KW_GEOMETRYCOLLECTION:
                case MySqlParser.KW_LINESTRING:
                case MySqlParser.KW_MULTILINESTRING:
                case MySqlParser.KW_MULTIPOINT:
                case MySqlParser.KW_MULTIPOLYGON:
                case MySqlParser.KW_POINT:
                case MySqlParser.KW_POLYGON:
                case MySqlParser.KW_CATALOG_NAME:
                case MySqlParser.KW_CHARSET:
                case MySqlParser.KW_COLLATION:
                case MySqlParser.KW_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_FORMAT:
                case MySqlParser.KW_GET_FORMAT:
                case MySqlParser.KW_RANDOM:
                case MySqlParser.KW_REVERSE:
                case MySqlParser.KW_ROW_COUNT:
                case MySqlParser.KW_SCHEMA_NAME:
                case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_SRID:
                case MySqlParser.KW_SYSTEM_USER:
                case MySqlParser.KW_TP_CONNECTION_ADMIN:
                case MySqlParser.KW_WEIGHT_STRING:
                case MySqlParser.MOD:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.ID:
                    {
                    this.state = 2961;
                    this.partitionNames();
                    }
                    break;
                case MySqlParser.KW_ALL:
                    {
                    this.state = 2962;
                    this.match(MySqlParser.KW_ALL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case MySqlParser.KW_OPTIMIZE:
                localContext = new AlterByOptimizePartitionContext(localContext);
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 2965;
                this.match(MySqlParser.KW_OPTIMIZE);
                this.state = 2966;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2969;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_ARRAY:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_BUCKETS:
                case MySqlParser.KW_CONDITION:
                case MySqlParser.KW_CURRENT:
                case MySqlParser.KW_CURRENT_USER:
                case MySqlParser.KW_DATABASE:
                case MySqlParser.KW_DEFAULT:
                case MySqlParser.KW_DIAGNOSTICS:
                case MySqlParser.KW_EMPTY:
                case MySqlParser.KW_ENFORCED:
                case MySqlParser.KW_EXCEPT:
                case MySqlParser.KW_GROUP:
                case MySqlParser.KW_IF:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_LATERAL:
                case MySqlParser.KW_LEFT:
                case MySqlParser.KW_NUMBER:
                case MySqlParser.KW_OPTIONAL:
                case MySqlParser.KW_ORDER:
                case MySqlParser.KW_PRIMARY:
                case MySqlParser.KW_REPEAT:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RIGHT:
                case MySqlParser.KW_SCHEMA:
                case MySqlParser.KW_SKIP_QUERY_REWRITE:
                case MySqlParser.KW_STACKED:
                case MySqlParser.KW_DATE:
                case MySqlParser.KW_TIME:
                case MySqlParser.KW_TIMESTAMP:
                case MySqlParser.KW_DATETIME:
                case MySqlParser.KW_YEAR:
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_TEXT:
                case MySqlParser.KW_ENUM:
                case MySqlParser.KW_SERIAL:
                case MySqlParser.KW_JSON_TABLE:
                case MySqlParser.KW_JSON_VALUE:
                case MySqlParser.KW_NESTED:
                case MySqlParser.KW_ORDINALITY:
                case MySqlParser.KW_PATH:
                case MySqlParser.KW_AVG:
                case MySqlParser.KW_BIT_AND:
                case MySqlParser.KW_BIT_OR:
                case MySqlParser.KW_BIT_XOR:
                case MySqlParser.KW_COUNT:
                case MySqlParser.KW_CUME_DIST:
                case MySqlParser.KW_DENSE_RANK:
                case MySqlParser.KW_FIRST_VALUE:
                case MySqlParser.KW_GROUP_CONCAT:
                case MySqlParser.KW_LAG:
                case MySqlParser.KW_LAST_VALUE:
                case MySqlParser.KW_LEAD:
                case MySqlParser.KW_MAX:
                case MySqlParser.KW_MIN:
                case MySqlParser.KW_NTILE:
                case MySqlParser.KW_NTH_VALUE:
                case MySqlParser.KW_PERCENT_RANK:
                case MySqlParser.KW_RANK:
                case MySqlParser.KW_ROW_NUMBER:
                case MySqlParser.KW_STD:
                case MySqlParser.KW_STDDEV:
                case MySqlParser.KW_STDDEV_POP:
                case MySqlParser.KW_STDDEV_SAMP:
                case MySqlParser.KW_SUM:
                case MySqlParser.KW_VAR_POP:
                case MySqlParser.KW_VAR_SAMP:
                case MySqlParser.KW_VARIANCE:
                case MySqlParser.KW_CURRENT_DATE:
                case MySqlParser.KW_CURRENT_TIME:
                case MySqlParser.KW_CURRENT_TIMESTAMP:
                case MySqlParser.KW_LOCALTIME:
                case MySqlParser.KW_CURDATE:
                case MySqlParser.KW_CURTIME:
                case MySqlParser.KW_DATE_ADD:
                case MySqlParser.KW_DATE_SUB:
                case MySqlParser.KW_LOCALTIMESTAMP:
                case MySqlParser.KW_NOW:
                case MySqlParser.KW_POSITION:
                case MySqlParser.KW_SUBSTR:
                case MySqlParser.KW_SUBSTRING:
                case MySqlParser.KW_SYSDATE:
                case MySqlParser.KW_TRIM:
                case MySqlParser.KW_UTC_DATE:
                case MySqlParser.KW_UTC_TIME:
                case MySqlParser.KW_UTC_TIMESTAMP:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_ACTION:
                case MySqlParser.KW_AFTER:
                case MySqlParser.KW_AGGREGATE:
                case MySqlParser.KW_ALGORITHM:
                case MySqlParser.KW_ANY:
                case MySqlParser.KW_AT:
                case MySqlParser.KW_AUTHORS:
                case MySqlParser.KW_AUTOCOMMIT:
                case MySqlParser.KW_AUTOEXTEND_SIZE:
                case MySqlParser.KW_AUTO_INCREMENT:
                case MySqlParser.KW_AVG_ROW_LENGTH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_BIT:
                case MySqlParser.KW_BLOCK:
                case MySqlParser.KW_BOOL:
                case MySqlParser.KW_BOOLEAN:
                case MySqlParser.KW_BTREE:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CASCADED:
                case MySqlParser.KW_CHAIN:
                case MySqlParser.KW_CHANGED:
                case MySqlParser.KW_CHANNEL:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_CIPHER:
                case MySqlParser.KW_CLASS_ORIGIN:
                case MySqlParser.KW_CLIENT:
                case MySqlParser.KW_CLOSE:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_CODE:
                case MySqlParser.KW_COLUMNS:
                case MySqlParser.KW_COLUMN_FORMAT:
                case MySqlParser.KW_COLUMN_NAME:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_COMPACT:
                case MySqlParser.KW_COMPLETION:
                case MySqlParser.KW_COMPRESSED:
                case MySqlParser.KW_COMPRESSION:
                case MySqlParser.KW_CONCURRENT:
                case MySqlParser.KW_CONNECT:
                case MySqlParser.KW_CONNECTION:
                case MySqlParser.KW_CONSISTENT:
                case MySqlParser.KW_CONSTRAINT_CATALOG:
                case MySqlParser.KW_CONSTRAINT_SCHEMA:
                case MySqlParser.KW_CONSTRAINT_NAME:
                case MySqlParser.KW_CONTAINS:
                case MySqlParser.KW_CONTEXT:
                case MySqlParser.KW_CONTRIBUTORS:
                case MySqlParser.KW_COPY:
                case MySqlParser.KW_CPU:
                case MySqlParser.KW_CURSOR_NAME:
                case MySqlParser.KW_DATA:
                case MySqlParser.KW_DATAFILE:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DEFAULT_AUTH:
                case MySqlParser.KW_DEFINER:
                case MySqlParser.KW_DELAY_KEY_WRITE:
                case MySqlParser.KW_DES_KEY_FILE:
                case MySqlParser.KW_DIRECTORY:
                case MySqlParser.KW_DISABLE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DISK:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_DUMPFILE:
                case MySqlParser.KW_DUPLICATE:
                case MySqlParser.KW_DYNAMIC:
                case MySqlParser.KW_ENABLE:
                case MySqlParser.KW_ENCRYPTION:
                case MySqlParser.KW_END:
                case MySqlParser.KW_ENDS:
                case MySqlParser.KW_ENGINE:
                case MySqlParser.KW_ENGINES:
                case MySqlParser.KW_ERROR:
                case MySqlParser.KW_ERRORS:
                case MySqlParser.KW_ESCAPE:
                case MySqlParser.KW_EVENT:
                case MySqlParser.KW_EVENTS:
                case MySqlParser.KW_EVERY:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_EXCLUSIVE:
                case MySqlParser.KW_EXPIRE:
                case MySqlParser.KW_EXPORT:
                case MySqlParser.KW_EXTENDED:
                case MySqlParser.KW_EXTENT_SIZE:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FAST:
                case MySqlParser.KW_FAULTS:
                case MySqlParser.KW_FIELDS:
                case MySqlParser.KW_FILE_BLOCK_SIZE:
                case MySqlParser.KW_FILTER:
                case MySqlParser.KW_FIRST:
                case MySqlParser.KW_FIXED:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_FOLLOWS:
                case MySqlParser.KW_FOUND:
                case MySqlParser.KW_FULL:
                case MySqlParser.KW_FUNCTION:
                case MySqlParser.KW_GENERAL:
                case MySqlParser.KW_GLOBAL:
                case MySqlParser.KW_GRANTS:
                case MySqlParser.KW_GROUP_REPLICATION:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HASH:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_HISTORY:
                case MySqlParser.KW_HOST:
                case MySqlParser.KW_HOSTS:
                case MySqlParser.KW_IDENTIFIED:
                case MySqlParser.KW_IGNORE_SERVER_IDS:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INDEXES:
                case MySqlParser.KW_INITIAL_SIZE:
                case MySqlParser.KW_INPLACE:
                case MySqlParser.KW_INSERT_METHOD:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_INSTANCE:
                case MySqlParser.KW_INSTANT:
                case MySqlParser.KW_INVISIBLE:
                case MySqlParser.KW_INVOKER:
                case MySqlParser.KW_IO:
                case MySqlParser.KW_IO_THREAD:
                case MySqlParser.KW_IPC:
                case MySqlParser.KW_ISOLATION:
                case MySqlParser.KW_ISSUER:
                case MySqlParser.KW_JSON:
                case MySqlParser.KW_KEY_BLOCK_SIZE:
                case MySqlParser.KW_LANGUAGE:
                case MySqlParser.KW_LAST:
                case MySqlParser.KW_LEAVES:
                case MySqlParser.KW_LESS:
                case MySqlParser.KW_LEVEL:
                case MySqlParser.KW_LIST:
                case MySqlParser.KW_LOCAL:
                case MySqlParser.KW_LOGFILE:
                case MySqlParser.KW_LOGS:
                case MySqlParser.KW_MASTER:
                case MySqlParser.KW_MASTER_AUTO_POSITION:
                case MySqlParser.KW_MASTER_CONNECT_RETRY:
                case MySqlParser.KW_MASTER_DELAY:
                case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
                case MySqlParser.KW_MASTER_HOST:
                case MySqlParser.KW_MASTER_LOG_FILE:
                case MySqlParser.KW_MASTER_LOG_POS:
                case MySqlParser.KW_MASTER_PASSWORD:
                case MySqlParser.KW_MASTER_PORT:
                case MySqlParser.KW_MASTER_RETRY_COUNT:
                case MySqlParser.KW_MASTER_SSL:
                case MySqlParser.KW_MASTER_SSL_CA:
                case MySqlParser.KW_MASTER_SSL_CAPATH:
                case MySqlParser.KW_MASTER_SSL_CERT:
                case MySqlParser.KW_MASTER_SSL_CIPHER:
                case MySqlParser.KW_MASTER_SSL_CRL:
                case MySqlParser.KW_MASTER_SSL_CRLPATH:
                case MySqlParser.KW_MASTER_SSL_KEY:
                case MySqlParser.KW_MASTER_TLS_VERSION:
                case MySqlParser.KW_MASTER_USER:
                case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                case MySqlParser.KW_MAX_ROWS:
                case MySqlParser.KW_MAX_SIZE:
                case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                case MySqlParser.KW_MAX_USER_CONNECTIONS:
                case MySqlParser.KW_MEDIUM:
                case MySqlParser.KW_MEMBER:
                case MySqlParser.KW_MERGE:
                case MySqlParser.KW_MESSAGE_TEXT:
                case MySqlParser.KW_MID:
                case MySqlParser.KW_MIGRATE:
                case MySqlParser.KW_MIN_ROWS:
                case MySqlParser.KW_MODE:
                case MySqlParser.KW_MODIFY:
                case MySqlParser.KW_MUTEX:
                case MySqlParser.KW_MYSQL:
                case MySqlParser.KW_MYSQL_ERRNO:
                case MySqlParser.KW_NAME:
                case MySqlParser.KW_NAMES:
                case MySqlParser.KW_NCHAR:
                case MySqlParser.KW_NEVER:
                case MySqlParser.KW_NEXT:
                case MySqlParser.KW_NO:
                case MySqlParser.KW_NOWAIT:
                case MySqlParser.KW_NODEGROUP:
                case MySqlParser.KW_NONE:
                case MySqlParser.KW_ODBC:
                case MySqlParser.KW_OFFLINE:
                case MySqlParser.KW_OFFSET:
                case MySqlParser.KW_OF:
                case MySqlParser.KW_OLD_PASSWORD:
                case MySqlParser.KW_ONE:
                case MySqlParser.KW_ONLINE:
                case MySqlParser.KW_ONLY:
                case MySqlParser.KW_OPEN:
                case MySqlParser.KW_OPTIMIZER_COSTS:
                case MySqlParser.KW_OPTIONS:
                case MySqlParser.KW_OWNER:
                case MySqlParser.KW_PACK_KEYS:
                case MySqlParser.KW_PAGE:
                case MySqlParser.KW_PAGE_CHECKSUM:
                case MySqlParser.KW_PARSER:
                case MySqlParser.KW_PARTIAL:
                case MySqlParser.KW_PARTITIONING:
                case MySqlParser.KW_PARTITIONS:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PHASE:
                case MySqlParser.KW_PLUGIN:
                case MySqlParser.KW_PLUGIN_DIR:
                case MySqlParser.KW_PLUGINS:
                case MySqlParser.KW_PORT:
                case MySqlParser.KW_PRECEDES:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_PRESERVE:
                case MySqlParser.KW_PREV:
                case MySqlParser.KW_PROCESSLIST:
                case MySqlParser.KW_PROFILE:
                case MySqlParser.KW_PROFILES:
                case MySqlParser.KW_PROXY:
                case MySqlParser.KW_QUERY:
                case MySqlParser.KW_QUICK:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_RECOVER:
                case MySqlParser.KW_RECURSIVE:
                case MySqlParser.KW_REDO_BUFFER_SIZE:
                case MySqlParser.KW_REDUNDANT:
                case MySqlParser.KW_RELAY:
                case MySqlParser.KW_RELAY_LOG_FILE:
                case MySqlParser.KW_RELAY_LOG_POS:
                case MySqlParser.KW_RELAYLOG:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_REPLICATE_DO_DB:
                case MySqlParser.KW_REPLICATE_DO_TABLE:
                case MySqlParser.KW_REPLICATE_IGNORE_DB:
                case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATE_REWRITE_DB:
                case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
                case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATION:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESUME:
                case MySqlParser.KW_RETURNED_SQLSTATE:
                case MySqlParser.KW_RETURNS:
                case MySqlParser.KW_REUSE:
                case MySqlParser.KW_ROLE:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_ROLLUP:
                case MySqlParser.KW_ROTATE:
                case MySqlParser.KW_ROW:
                case MySqlParser.KW_ROWS:
                case MySqlParser.KW_ROW_FORMAT:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_SCHEDULE:
                case MySqlParser.KW_SECURITY:
                case MySqlParser.KW_SERVER:
                case MySqlParser.KW_SESSION:
                case MySqlParser.KW_SHARE:
                case MySqlParser.KW_SHARED:
                case MySqlParser.KW_SIGNED:
                case MySqlParser.KW_SIMPLE:
                case MySqlParser.KW_SLAVE:
                case MySqlParser.KW_SLOW:
                case MySqlParser.KW_SNAPSHOT:
                case MySqlParser.KW_SOCKET:
                case MySqlParser.KW_SOME:
                case MySqlParser.KW_SONAME:
                case MySqlParser.KW_SOUNDS:
                case MySqlParser.KW_SOURCE:
                case MySqlParser.KW_SQL_AFTER_GTIDS:
                case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
                case MySqlParser.KW_SQL_BEFORE_GTIDS:
                case MySqlParser.KW_SQL_BUFFER_RESULT:
                case MySqlParser.KW_SQL_CACHE:
                case MySqlParser.KW_SQL_NO_CACHE:
                case MySqlParser.KW_SQL_THREAD:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STARTS:
                case MySqlParser.KW_STATS_AUTO_RECALC:
                case MySqlParser.KW_STATS_PERSISTENT:
                case MySqlParser.KW_STATS_SAMPLE_PAGES:
                case MySqlParser.KW_STATUS:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_STORAGE:
                case MySqlParser.KW_STRING:
                case MySqlParser.KW_SUBCLASS_ORIGIN:
                case MySqlParser.KW_SUBJECT:
                case MySqlParser.KW_SUBPARTITION:
                case MySqlParser.KW_SUBPARTITIONS:
                case MySqlParser.KW_SUSPEND:
                case MySqlParser.KW_SWAPS:
                case MySqlParser.KW_SWITCHES:
                case MySqlParser.KW_TABLE_NAME:
                case MySqlParser.KW_TABLESPACE:
                case MySqlParser.KW_TABLE_TYPE:
                case MySqlParser.KW_TEMPORARY:
                case MySqlParser.KW_TEMPTABLE:
                case MySqlParser.KW_THAN:
                case MySqlParser.KW_TRADITIONAL:
                case MySqlParser.KW_TRANSACTION:
                case MySqlParser.KW_TRANSACTIONAL:
                case MySqlParser.KW_TRIGGERS:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNBOUNDED:
                case MySqlParser.KW_UNDEFINED:
                case MySqlParser.KW_UNDOFILE:
                case MySqlParser.KW_UNDO_BUFFER_SIZE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UNKNOWN:
                case MySqlParser.KW_UNTIL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_USER:
                case MySqlParser.KW_USE_FRM:
                case MySqlParser.KW_USER_RESOURCES:
                case MySqlParser.KW_VALIDATION:
                case MySqlParser.KW_VALUE:
                case MySqlParser.KW_VARIABLES:
                case MySqlParser.KW_VIEW:
                case MySqlParser.KW_VIRTUAL:
                case MySqlParser.KW_VISIBLE:
                case MySqlParser.KW_WAIT:
                case MySqlParser.KW_WARNINGS:
                case MySqlParser.KW_WITHOUT:
                case MySqlParser.KW_WORK:
                case MySqlParser.KW_WRAPPER:
                case MySqlParser.KW_X509:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_XML:
                case MySqlParser.KW_QUARTER:
                case MySqlParser.KW_MONTH:
                case MySqlParser.KW_DAY:
                case MySqlParser.KW_HOUR:
                case MySqlParser.KW_MINUTE:
                case MySqlParser.KW_WEEK:
                case MySqlParser.KW_SECOND:
                case MySqlParser.KW_MICROSECOND:
                case MySqlParser.KW_ADMIN:
                case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
                case MySqlParser.KW_AUDIT_ADMIN:
                case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
                case MySqlParser.KW_BACKUP_ADMIN:
                case MySqlParser.KW_BINLOG_ADMIN:
                case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
                case MySqlParser.KW_CLONE_ADMIN:
                case MySqlParser.KW_CONNECTION_ADMIN:
                case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_FILE:
                case MySqlParser.KW_FIREWALL_ADMIN:
                case MySqlParser.KW_FIREWALL_EXEMPT:
                case MySqlParser.KW_FIREWALL_USER:
                case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
                case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
                case MySqlParser.KW_INVOKE:
                case MySqlParser.KW_LAMBDA:
                case MySqlParser.KW_NDB_STORED_USER:
                case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
                case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
                case MySqlParser.KW_PRIVILEGES:
                case MySqlParser.KW_PROCESS:
                case MySqlParser.KW_RELOAD:
                case MySqlParser.KW_REPLICATION_APPLIER:
                case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_USER:
                case MySqlParser.KW_ROLE_ADMIN:
                case MySqlParser.KW_ROUTINE:
                case MySqlParser.KW_S3:
                case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
                case MySqlParser.KW_SET_USER_ID:
                case MySqlParser.KW_SHOW_ROUTINE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.KW_SUPER:
                case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
                case MySqlParser.KW_TABLES:
                case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
                case MySqlParser.KW_VERSION_TOKEN_ADMIN:
                case MySqlParser.KW_XA_RECOVER_ADMIN:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.KW_ARCHIVE:
                case MySqlParser.KW_BLACKHOLE:
                case MySqlParser.KW_CSV:
                case MySqlParser.KW_FEDERATED:
                case MySqlParser.KW_INNODB:
                case MySqlParser.KW_MEMORY:
                case MySqlParser.KW_MRG_MYISAM:
                case MySqlParser.KW_MYISAM:
                case MySqlParser.KW_NDB:
                case MySqlParser.KW_NDBCLUSTER:
                case MySqlParser.KW_PERFORMANCE_SCHEMA:
                case MySqlParser.KW_TOKUDB:
                case MySqlParser.KW_REPEATABLE:
                case MySqlParser.KW_COMMITTED:
                case MySqlParser.KW_UNCOMMITTED:
                case MySqlParser.KW_SERIALIZABLE:
                case MySqlParser.KW_GEOMETRYCOLLECTION:
                case MySqlParser.KW_LINESTRING:
                case MySqlParser.KW_MULTILINESTRING:
                case MySqlParser.KW_MULTIPOINT:
                case MySqlParser.KW_MULTIPOLYGON:
                case MySqlParser.KW_POINT:
                case MySqlParser.KW_POLYGON:
                case MySqlParser.KW_CATALOG_NAME:
                case MySqlParser.KW_CHARSET:
                case MySqlParser.KW_COLLATION:
                case MySqlParser.KW_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_FORMAT:
                case MySqlParser.KW_GET_FORMAT:
                case MySqlParser.KW_RANDOM:
                case MySqlParser.KW_REVERSE:
                case MySqlParser.KW_ROW_COUNT:
                case MySqlParser.KW_SCHEMA_NAME:
                case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_SRID:
                case MySqlParser.KW_SYSTEM_USER:
                case MySqlParser.KW_TP_CONNECTION_ADMIN:
                case MySqlParser.KW_WEIGHT_STRING:
                case MySqlParser.MOD:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.ID:
                    {
                    this.state = 2967;
                    this.partitionNames();
                    }
                    break;
                case MySqlParser.KW_ALL:
                    {
                    this.state = 2968;
                    this.match(MySqlParser.KW_ALL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case MySqlParser.KW_REBUILD:
                localContext = new AlterByRebuildPartitionContext(localContext);
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 2971;
                this.match(MySqlParser.KW_REBUILD);
                this.state = 2972;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2975;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_ARRAY:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_BUCKETS:
                case MySqlParser.KW_CONDITION:
                case MySqlParser.KW_CURRENT:
                case MySqlParser.KW_CURRENT_USER:
                case MySqlParser.KW_DATABASE:
                case MySqlParser.KW_DEFAULT:
                case MySqlParser.KW_DIAGNOSTICS:
                case MySqlParser.KW_EMPTY:
                case MySqlParser.KW_ENFORCED:
                case MySqlParser.KW_EXCEPT:
                case MySqlParser.KW_GROUP:
                case MySqlParser.KW_IF:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_LATERAL:
                case MySqlParser.KW_LEFT:
                case MySqlParser.KW_NUMBER:
                case MySqlParser.KW_OPTIONAL:
                case MySqlParser.KW_ORDER:
                case MySqlParser.KW_PRIMARY:
                case MySqlParser.KW_REPEAT:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RIGHT:
                case MySqlParser.KW_SCHEMA:
                case MySqlParser.KW_SKIP_QUERY_REWRITE:
                case MySqlParser.KW_STACKED:
                case MySqlParser.KW_DATE:
                case MySqlParser.KW_TIME:
                case MySqlParser.KW_TIMESTAMP:
                case MySqlParser.KW_DATETIME:
                case MySqlParser.KW_YEAR:
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_TEXT:
                case MySqlParser.KW_ENUM:
                case MySqlParser.KW_SERIAL:
                case MySqlParser.KW_JSON_TABLE:
                case MySqlParser.KW_JSON_VALUE:
                case MySqlParser.KW_NESTED:
                case MySqlParser.KW_ORDINALITY:
                case MySqlParser.KW_PATH:
                case MySqlParser.KW_AVG:
                case MySqlParser.KW_BIT_AND:
                case MySqlParser.KW_BIT_OR:
                case MySqlParser.KW_BIT_XOR:
                case MySqlParser.KW_COUNT:
                case MySqlParser.KW_CUME_DIST:
                case MySqlParser.KW_DENSE_RANK:
                case MySqlParser.KW_FIRST_VALUE:
                case MySqlParser.KW_GROUP_CONCAT:
                case MySqlParser.KW_LAG:
                case MySqlParser.KW_LAST_VALUE:
                case MySqlParser.KW_LEAD:
                case MySqlParser.KW_MAX:
                case MySqlParser.KW_MIN:
                case MySqlParser.KW_NTILE:
                case MySqlParser.KW_NTH_VALUE:
                case MySqlParser.KW_PERCENT_RANK:
                case MySqlParser.KW_RANK:
                case MySqlParser.KW_ROW_NUMBER:
                case MySqlParser.KW_STD:
                case MySqlParser.KW_STDDEV:
                case MySqlParser.KW_STDDEV_POP:
                case MySqlParser.KW_STDDEV_SAMP:
                case MySqlParser.KW_SUM:
                case MySqlParser.KW_VAR_POP:
                case MySqlParser.KW_VAR_SAMP:
                case MySqlParser.KW_VARIANCE:
                case MySqlParser.KW_CURRENT_DATE:
                case MySqlParser.KW_CURRENT_TIME:
                case MySqlParser.KW_CURRENT_TIMESTAMP:
                case MySqlParser.KW_LOCALTIME:
                case MySqlParser.KW_CURDATE:
                case MySqlParser.KW_CURTIME:
                case MySqlParser.KW_DATE_ADD:
                case MySqlParser.KW_DATE_SUB:
                case MySqlParser.KW_LOCALTIMESTAMP:
                case MySqlParser.KW_NOW:
                case MySqlParser.KW_POSITION:
                case MySqlParser.KW_SUBSTR:
                case MySqlParser.KW_SUBSTRING:
                case MySqlParser.KW_SYSDATE:
                case MySqlParser.KW_TRIM:
                case MySqlParser.KW_UTC_DATE:
                case MySqlParser.KW_UTC_TIME:
                case MySqlParser.KW_UTC_TIMESTAMP:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_ACTION:
                case MySqlParser.KW_AFTER:
                case MySqlParser.KW_AGGREGATE:
                case MySqlParser.KW_ALGORITHM:
                case MySqlParser.KW_ANY:
                case MySqlParser.KW_AT:
                case MySqlParser.KW_AUTHORS:
                case MySqlParser.KW_AUTOCOMMIT:
                case MySqlParser.KW_AUTOEXTEND_SIZE:
                case MySqlParser.KW_AUTO_INCREMENT:
                case MySqlParser.KW_AVG_ROW_LENGTH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_BIT:
                case MySqlParser.KW_BLOCK:
                case MySqlParser.KW_BOOL:
                case MySqlParser.KW_BOOLEAN:
                case MySqlParser.KW_BTREE:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CASCADED:
                case MySqlParser.KW_CHAIN:
                case MySqlParser.KW_CHANGED:
                case MySqlParser.KW_CHANNEL:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_CIPHER:
                case MySqlParser.KW_CLASS_ORIGIN:
                case MySqlParser.KW_CLIENT:
                case MySqlParser.KW_CLOSE:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_CODE:
                case MySqlParser.KW_COLUMNS:
                case MySqlParser.KW_COLUMN_FORMAT:
                case MySqlParser.KW_COLUMN_NAME:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_COMPACT:
                case MySqlParser.KW_COMPLETION:
                case MySqlParser.KW_COMPRESSED:
                case MySqlParser.KW_COMPRESSION:
                case MySqlParser.KW_CONCURRENT:
                case MySqlParser.KW_CONNECT:
                case MySqlParser.KW_CONNECTION:
                case MySqlParser.KW_CONSISTENT:
                case MySqlParser.KW_CONSTRAINT_CATALOG:
                case MySqlParser.KW_CONSTRAINT_SCHEMA:
                case MySqlParser.KW_CONSTRAINT_NAME:
                case MySqlParser.KW_CONTAINS:
                case MySqlParser.KW_CONTEXT:
                case MySqlParser.KW_CONTRIBUTORS:
                case MySqlParser.KW_COPY:
                case MySqlParser.KW_CPU:
                case MySqlParser.KW_CURSOR_NAME:
                case MySqlParser.KW_DATA:
                case MySqlParser.KW_DATAFILE:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DEFAULT_AUTH:
                case MySqlParser.KW_DEFINER:
                case MySqlParser.KW_DELAY_KEY_WRITE:
                case MySqlParser.KW_DES_KEY_FILE:
                case MySqlParser.KW_DIRECTORY:
                case MySqlParser.KW_DISABLE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DISK:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_DUMPFILE:
                case MySqlParser.KW_DUPLICATE:
                case MySqlParser.KW_DYNAMIC:
                case MySqlParser.KW_ENABLE:
                case MySqlParser.KW_ENCRYPTION:
                case MySqlParser.KW_END:
                case MySqlParser.KW_ENDS:
                case MySqlParser.KW_ENGINE:
                case MySqlParser.KW_ENGINES:
                case MySqlParser.KW_ERROR:
                case MySqlParser.KW_ERRORS:
                case MySqlParser.KW_ESCAPE:
                case MySqlParser.KW_EVENT:
                case MySqlParser.KW_EVENTS:
                case MySqlParser.KW_EVERY:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_EXCLUSIVE:
                case MySqlParser.KW_EXPIRE:
                case MySqlParser.KW_EXPORT:
                case MySqlParser.KW_EXTENDED:
                case MySqlParser.KW_EXTENT_SIZE:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FAST:
                case MySqlParser.KW_FAULTS:
                case MySqlParser.KW_FIELDS:
                case MySqlParser.KW_FILE_BLOCK_SIZE:
                case MySqlParser.KW_FILTER:
                case MySqlParser.KW_FIRST:
                case MySqlParser.KW_FIXED:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_FOLLOWS:
                case MySqlParser.KW_FOUND:
                case MySqlParser.KW_FULL:
                case MySqlParser.KW_FUNCTION:
                case MySqlParser.KW_GENERAL:
                case MySqlParser.KW_GLOBAL:
                case MySqlParser.KW_GRANTS:
                case MySqlParser.KW_GROUP_REPLICATION:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HASH:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_HISTORY:
                case MySqlParser.KW_HOST:
                case MySqlParser.KW_HOSTS:
                case MySqlParser.KW_IDENTIFIED:
                case MySqlParser.KW_IGNORE_SERVER_IDS:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INDEXES:
                case MySqlParser.KW_INITIAL_SIZE:
                case MySqlParser.KW_INPLACE:
                case MySqlParser.KW_INSERT_METHOD:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_INSTANCE:
                case MySqlParser.KW_INSTANT:
                case MySqlParser.KW_INVISIBLE:
                case MySqlParser.KW_INVOKER:
                case MySqlParser.KW_IO:
                case MySqlParser.KW_IO_THREAD:
                case MySqlParser.KW_IPC:
                case MySqlParser.KW_ISOLATION:
                case MySqlParser.KW_ISSUER:
                case MySqlParser.KW_JSON:
                case MySqlParser.KW_KEY_BLOCK_SIZE:
                case MySqlParser.KW_LANGUAGE:
                case MySqlParser.KW_LAST:
                case MySqlParser.KW_LEAVES:
                case MySqlParser.KW_LESS:
                case MySqlParser.KW_LEVEL:
                case MySqlParser.KW_LIST:
                case MySqlParser.KW_LOCAL:
                case MySqlParser.KW_LOGFILE:
                case MySqlParser.KW_LOGS:
                case MySqlParser.KW_MASTER:
                case MySqlParser.KW_MASTER_AUTO_POSITION:
                case MySqlParser.KW_MASTER_CONNECT_RETRY:
                case MySqlParser.KW_MASTER_DELAY:
                case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
                case MySqlParser.KW_MASTER_HOST:
                case MySqlParser.KW_MASTER_LOG_FILE:
                case MySqlParser.KW_MASTER_LOG_POS:
                case MySqlParser.KW_MASTER_PASSWORD:
                case MySqlParser.KW_MASTER_PORT:
                case MySqlParser.KW_MASTER_RETRY_COUNT:
                case MySqlParser.KW_MASTER_SSL:
                case MySqlParser.KW_MASTER_SSL_CA:
                case MySqlParser.KW_MASTER_SSL_CAPATH:
                case MySqlParser.KW_MASTER_SSL_CERT:
                case MySqlParser.KW_MASTER_SSL_CIPHER:
                case MySqlParser.KW_MASTER_SSL_CRL:
                case MySqlParser.KW_MASTER_SSL_CRLPATH:
                case MySqlParser.KW_MASTER_SSL_KEY:
                case MySqlParser.KW_MASTER_TLS_VERSION:
                case MySqlParser.KW_MASTER_USER:
                case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                case MySqlParser.KW_MAX_ROWS:
                case MySqlParser.KW_MAX_SIZE:
                case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                case MySqlParser.KW_MAX_USER_CONNECTIONS:
                case MySqlParser.KW_MEDIUM:
                case MySqlParser.KW_MEMBER:
                case MySqlParser.KW_MERGE:
                case MySqlParser.KW_MESSAGE_TEXT:
                case MySqlParser.KW_MID:
                case MySqlParser.KW_MIGRATE:
                case MySqlParser.KW_MIN_ROWS:
                case MySqlParser.KW_MODE:
                case MySqlParser.KW_MODIFY:
                case MySqlParser.KW_MUTEX:
                case MySqlParser.KW_MYSQL:
                case MySqlParser.KW_MYSQL_ERRNO:
                case MySqlParser.KW_NAME:
                case MySqlParser.KW_NAMES:
                case MySqlParser.KW_NCHAR:
                case MySqlParser.KW_NEVER:
                case MySqlParser.KW_NEXT:
                case MySqlParser.KW_NO:
                case MySqlParser.KW_NOWAIT:
                case MySqlParser.KW_NODEGROUP:
                case MySqlParser.KW_NONE:
                case MySqlParser.KW_ODBC:
                case MySqlParser.KW_OFFLINE:
                case MySqlParser.KW_OFFSET:
                case MySqlParser.KW_OF:
                case MySqlParser.KW_OLD_PASSWORD:
                case MySqlParser.KW_ONE:
                case MySqlParser.KW_ONLINE:
                case MySqlParser.KW_ONLY:
                case MySqlParser.KW_OPEN:
                case MySqlParser.KW_OPTIMIZER_COSTS:
                case MySqlParser.KW_OPTIONS:
                case MySqlParser.KW_OWNER:
                case MySqlParser.KW_PACK_KEYS:
                case MySqlParser.KW_PAGE:
                case MySqlParser.KW_PAGE_CHECKSUM:
                case MySqlParser.KW_PARSER:
                case MySqlParser.KW_PARTIAL:
                case MySqlParser.KW_PARTITIONING:
                case MySqlParser.KW_PARTITIONS:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PHASE:
                case MySqlParser.KW_PLUGIN:
                case MySqlParser.KW_PLUGIN_DIR:
                case MySqlParser.KW_PLUGINS:
                case MySqlParser.KW_PORT:
                case MySqlParser.KW_PRECEDES:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_PRESERVE:
                case MySqlParser.KW_PREV:
                case MySqlParser.KW_PROCESSLIST:
                case MySqlParser.KW_PROFILE:
                case MySqlParser.KW_PROFILES:
                case MySqlParser.KW_PROXY:
                case MySqlParser.KW_QUERY:
                case MySqlParser.KW_QUICK:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_RECOVER:
                case MySqlParser.KW_RECURSIVE:
                case MySqlParser.KW_REDO_BUFFER_SIZE:
                case MySqlParser.KW_REDUNDANT:
                case MySqlParser.KW_RELAY:
                case MySqlParser.KW_RELAY_LOG_FILE:
                case MySqlParser.KW_RELAY_LOG_POS:
                case MySqlParser.KW_RELAYLOG:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_REPLICATE_DO_DB:
                case MySqlParser.KW_REPLICATE_DO_TABLE:
                case MySqlParser.KW_REPLICATE_IGNORE_DB:
                case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATE_REWRITE_DB:
                case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
                case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATION:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESUME:
                case MySqlParser.KW_RETURNED_SQLSTATE:
                case MySqlParser.KW_RETURNS:
                case MySqlParser.KW_REUSE:
                case MySqlParser.KW_ROLE:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_ROLLUP:
                case MySqlParser.KW_ROTATE:
                case MySqlParser.KW_ROW:
                case MySqlParser.KW_ROWS:
                case MySqlParser.KW_ROW_FORMAT:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_SCHEDULE:
                case MySqlParser.KW_SECURITY:
                case MySqlParser.KW_SERVER:
                case MySqlParser.KW_SESSION:
                case MySqlParser.KW_SHARE:
                case MySqlParser.KW_SHARED:
                case MySqlParser.KW_SIGNED:
                case MySqlParser.KW_SIMPLE:
                case MySqlParser.KW_SLAVE:
                case MySqlParser.KW_SLOW:
                case MySqlParser.KW_SNAPSHOT:
                case MySqlParser.KW_SOCKET:
                case MySqlParser.KW_SOME:
                case MySqlParser.KW_SONAME:
                case MySqlParser.KW_SOUNDS:
                case MySqlParser.KW_SOURCE:
                case MySqlParser.KW_SQL_AFTER_GTIDS:
                case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
                case MySqlParser.KW_SQL_BEFORE_GTIDS:
                case MySqlParser.KW_SQL_BUFFER_RESULT:
                case MySqlParser.KW_SQL_CACHE:
                case MySqlParser.KW_SQL_NO_CACHE:
                case MySqlParser.KW_SQL_THREAD:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STARTS:
                case MySqlParser.KW_STATS_AUTO_RECALC:
                case MySqlParser.KW_STATS_PERSISTENT:
                case MySqlParser.KW_STATS_SAMPLE_PAGES:
                case MySqlParser.KW_STATUS:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_STORAGE:
                case MySqlParser.KW_STRING:
                case MySqlParser.KW_SUBCLASS_ORIGIN:
                case MySqlParser.KW_SUBJECT:
                case MySqlParser.KW_SUBPARTITION:
                case MySqlParser.KW_SUBPARTITIONS:
                case MySqlParser.KW_SUSPEND:
                case MySqlParser.KW_SWAPS:
                case MySqlParser.KW_SWITCHES:
                case MySqlParser.KW_TABLE_NAME:
                case MySqlParser.KW_TABLESPACE:
                case MySqlParser.KW_TABLE_TYPE:
                case MySqlParser.KW_TEMPORARY:
                case MySqlParser.KW_TEMPTABLE:
                case MySqlParser.KW_THAN:
                case MySqlParser.KW_TRADITIONAL:
                case MySqlParser.KW_TRANSACTION:
                case MySqlParser.KW_TRANSACTIONAL:
                case MySqlParser.KW_TRIGGERS:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNBOUNDED:
                case MySqlParser.KW_UNDEFINED:
                case MySqlParser.KW_UNDOFILE:
                case MySqlParser.KW_UNDO_BUFFER_SIZE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UNKNOWN:
                case MySqlParser.KW_UNTIL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_USER:
                case MySqlParser.KW_USE_FRM:
                case MySqlParser.KW_USER_RESOURCES:
                case MySqlParser.KW_VALIDATION:
                case MySqlParser.KW_VALUE:
                case MySqlParser.KW_VARIABLES:
                case MySqlParser.KW_VIEW:
                case MySqlParser.KW_VIRTUAL:
                case MySqlParser.KW_VISIBLE:
                case MySqlParser.KW_WAIT:
                case MySqlParser.KW_WARNINGS:
                case MySqlParser.KW_WITHOUT:
                case MySqlParser.KW_WORK:
                case MySqlParser.KW_WRAPPER:
                case MySqlParser.KW_X509:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_XML:
                case MySqlParser.KW_QUARTER:
                case MySqlParser.KW_MONTH:
                case MySqlParser.KW_DAY:
                case MySqlParser.KW_HOUR:
                case MySqlParser.KW_MINUTE:
                case MySqlParser.KW_WEEK:
                case MySqlParser.KW_SECOND:
                case MySqlParser.KW_MICROSECOND:
                case MySqlParser.KW_ADMIN:
                case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
                case MySqlParser.KW_AUDIT_ADMIN:
                case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
                case MySqlParser.KW_BACKUP_ADMIN:
                case MySqlParser.KW_BINLOG_ADMIN:
                case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
                case MySqlParser.KW_CLONE_ADMIN:
                case MySqlParser.KW_CONNECTION_ADMIN:
                case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_FILE:
                case MySqlParser.KW_FIREWALL_ADMIN:
                case MySqlParser.KW_FIREWALL_EXEMPT:
                case MySqlParser.KW_FIREWALL_USER:
                case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
                case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
                case MySqlParser.KW_INVOKE:
                case MySqlParser.KW_LAMBDA:
                case MySqlParser.KW_NDB_STORED_USER:
                case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
                case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
                case MySqlParser.KW_PRIVILEGES:
                case MySqlParser.KW_PROCESS:
                case MySqlParser.KW_RELOAD:
                case MySqlParser.KW_REPLICATION_APPLIER:
                case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_USER:
                case MySqlParser.KW_ROLE_ADMIN:
                case MySqlParser.KW_ROUTINE:
                case MySqlParser.KW_S3:
                case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
                case MySqlParser.KW_SET_USER_ID:
                case MySqlParser.KW_SHOW_ROUTINE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.KW_SUPER:
                case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
                case MySqlParser.KW_TABLES:
                case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
                case MySqlParser.KW_VERSION_TOKEN_ADMIN:
                case MySqlParser.KW_XA_RECOVER_ADMIN:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.KW_ARCHIVE:
                case MySqlParser.KW_BLACKHOLE:
                case MySqlParser.KW_CSV:
                case MySqlParser.KW_FEDERATED:
                case MySqlParser.KW_INNODB:
                case MySqlParser.KW_MEMORY:
                case MySqlParser.KW_MRG_MYISAM:
                case MySqlParser.KW_MYISAM:
                case MySqlParser.KW_NDB:
                case MySqlParser.KW_NDBCLUSTER:
                case MySqlParser.KW_PERFORMANCE_SCHEMA:
                case MySqlParser.KW_TOKUDB:
                case MySqlParser.KW_REPEATABLE:
                case MySqlParser.KW_COMMITTED:
                case MySqlParser.KW_UNCOMMITTED:
                case MySqlParser.KW_SERIALIZABLE:
                case MySqlParser.KW_GEOMETRYCOLLECTION:
                case MySqlParser.KW_LINESTRING:
                case MySqlParser.KW_MULTILINESTRING:
                case MySqlParser.KW_MULTIPOINT:
                case MySqlParser.KW_MULTIPOLYGON:
                case MySqlParser.KW_POINT:
                case MySqlParser.KW_POLYGON:
                case MySqlParser.KW_CATALOG_NAME:
                case MySqlParser.KW_CHARSET:
                case MySqlParser.KW_COLLATION:
                case MySqlParser.KW_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_FORMAT:
                case MySqlParser.KW_GET_FORMAT:
                case MySqlParser.KW_RANDOM:
                case MySqlParser.KW_REVERSE:
                case MySqlParser.KW_ROW_COUNT:
                case MySqlParser.KW_SCHEMA_NAME:
                case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_SRID:
                case MySqlParser.KW_SYSTEM_USER:
                case MySqlParser.KW_TP_CONNECTION_ADMIN:
                case MySqlParser.KW_WEIGHT_STRING:
                case MySqlParser.MOD:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.ID:
                    {
                    this.state = 2973;
                    this.partitionNames();
                    }
                    break;
                case MySqlParser.KW_ALL:
                    {
                    this.state = 2974;
                    this.match(MySqlParser.KW_ALL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case MySqlParser.KW_REPAIR:
                localContext = new AlterByRepairPartitionContext(localContext);
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 2977;
                this.match(MySqlParser.KW_REPAIR);
                this.state = 2978;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 2981;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_ARRAY:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_BUCKETS:
                case MySqlParser.KW_CONDITION:
                case MySqlParser.KW_CURRENT:
                case MySqlParser.KW_CURRENT_USER:
                case MySqlParser.KW_DATABASE:
                case MySqlParser.KW_DEFAULT:
                case MySqlParser.KW_DIAGNOSTICS:
                case MySqlParser.KW_EMPTY:
                case MySqlParser.KW_ENFORCED:
                case MySqlParser.KW_EXCEPT:
                case MySqlParser.KW_GROUP:
                case MySqlParser.KW_IF:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_LATERAL:
                case MySqlParser.KW_LEFT:
                case MySqlParser.KW_NUMBER:
                case MySqlParser.KW_OPTIONAL:
                case MySqlParser.KW_ORDER:
                case MySqlParser.KW_PRIMARY:
                case MySqlParser.KW_REPEAT:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RIGHT:
                case MySqlParser.KW_SCHEMA:
                case MySqlParser.KW_SKIP_QUERY_REWRITE:
                case MySqlParser.KW_STACKED:
                case MySqlParser.KW_DATE:
                case MySqlParser.KW_TIME:
                case MySqlParser.KW_TIMESTAMP:
                case MySqlParser.KW_DATETIME:
                case MySqlParser.KW_YEAR:
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_TEXT:
                case MySqlParser.KW_ENUM:
                case MySqlParser.KW_SERIAL:
                case MySqlParser.KW_JSON_TABLE:
                case MySqlParser.KW_JSON_VALUE:
                case MySqlParser.KW_NESTED:
                case MySqlParser.KW_ORDINALITY:
                case MySqlParser.KW_PATH:
                case MySqlParser.KW_AVG:
                case MySqlParser.KW_BIT_AND:
                case MySqlParser.KW_BIT_OR:
                case MySqlParser.KW_BIT_XOR:
                case MySqlParser.KW_COUNT:
                case MySqlParser.KW_CUME_DIST:
                case MySqlParser.KW_DENSE_RANK:
                case MySqlParser.KW_FIRST_VALUE:
                case MySqlParser.KW_GROUP_CONCAT:
                case MySqlParser.KW_LAG:
                case MySqlParser.KW_LAST_VALUE:
                case MySqlParser.KW_LEAD:
                case MySqlParser.KW_MAX:
                case MySqlParser.KW_MIN:
                case MySqlParser.KW_NTILE:
                case MySqlParser.KW_NTH_VALUE:
                case MySqlParser.KW_PERCENT_RANK:
                case MySqlParser.KW_RANK:
                case MySqlParser.KW_ROW_NUMBER:
                case MySqlParser.KW_STD:
                case MySqlParser.KW_STDDEV:
                case MySqlParser.KW_STDDEV_POP:
                case MySqlParser.KW_STDDEV_SAMP:
                case MySqlParser.KW_SUM:
                case MySqlParser.KW_VAR_POP:
                case MySqlParser.KW_VAR_SAMP:
                case MySqlParser.KW_VARIANCE:
                case MySqlParser.KW_CURRENT_DATE:
                case MySqlParser.KW_CURRENT_TIME:
                case MySqlParser.KW_CURRENT_TIMESTAMP:
                case MySqlParser.KW_LOCALTIME:
                case MySqlParser.KW_CURDATE:
                case MySqlParser.KW_CURTIME:
                case MySqlParser.KW_DATE_ADD:
                case MySqlParser.KW_DATE_SUB:
                case MySqlParser.KW_LOCALTIMESTAMP:
                case MySqlParser.KW_NOW:
                case MySqlParser.KW_POSITION:
                case MySqlParser.KW_SUBSTR:
                case MySqlParser.KW_SUBSTRING:
                case MySqlParser.KW_SYSDATE:
                case MySqlParser.KW_TRIM:
                case MySqlParser.KW_UTC_DATE:
                case MySqlParser.KW_UTC_TIME:
                case MySqlParser.KW_UTC_TIMESTAMP:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_ACTION:
                case MySqlParser.KW_AFTER:
                case MySqlParser.KW_AGGREGATE:
                case MySqlParser.KW_ALGORITHM:
                case MySqlParser.KW_ANY:
                case MySqlParser.KW_AT:
                case MySqlParser.KW_AUTHORS:
                case MySqlParser.KW_AUTOCOMMIT:
                case MySqlParser.KW_AUTOEXTEND_SIZE:
                case MySqlParser.KW_AUTO_INCREMENT:
                case MySqlParser.KW_AVG_ROW_LENGTH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_BIT:
                case MySqlParser.KW_BLOCK:
                case MySqlParser.KW_BOOL:
                case MySqlParser.KW_BOOLEAN:
                case MySqlParser.KW_BTREE:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CASCADED:
                case MySqlParser.KW_CHAIN:
                case MySqlParser.KW_CHANGED:
                case MySqlParser.KW_CHANNEL:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_CIPHER:
                case MySqlParser.KW_CLASS_ORIGIN:
                case MySqlParser.KW_CLIENT:
                case MySqlParser.KW_CLOSE:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_CODE:
                case MySqlParser.KW_COLUMNS:
                case MySqlParser.KW_COLUMN_FORMAT:
                case MySqlParser.KW_COLUMN_NAME:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_COMPACT:
                case MySqlParser.KW_COMPLETION:
                case MySqlParser.KW_COMPRESSED:
                case MySqlParser.KW_COMPRESSION:
                case MySqlParser.KW_CONCURRENT:
                case MySqlParser.KW_CONNECT:
                case MySqlParser.KW_CONNECTION:
                case MySqlParser.KW_CONSISTENT:
                case MySqlParser.KW_CONSTRAINT_CATALOG:
                case MySqlParser.KW_CONSTRAINT_SCHEMA:
                case MySqlParser.KW_CONSTRAINT_NAME:
                case MySqlParser.KW_CONTAINS:
                case MySqlParser.KW_CONTEXT:
                case MySqlParser.KW_CONTRIBUTORS:
                case MySqlParser.KW_COPY:
                case MySqlParser.KW_CPU:
                case MySqlParser.KW_CURSOR_NAME:
                case MySqlParser.KW_DATA:
                case MySqlParser.KW_DATAFILE:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DEFAULT_AUTH:
                case MySqlParser.KW_DEFINER:
                case MySqlParser.KW_DELAY_KEY_WRITE:
                case MySqlParser.KW_DES_KEY_FILE:
                case MySqlParser.KW_DIRECTORY:
                case MySqlParser.KW_DISABLE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DISK:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_DUMPFILE:
                case MySqlParser.KW_DUPLICATE:
                case MySqlParser.KW_DYNAMIC:
                case MySqlParser.KW_ENABLE:
                case MySqlParser.KW_ENCRYPTION:
                case MySqlParser.KW_END:
                case MySqlParser.KW_ENDS:
                case MySqlParser.KW_ENGINE:
                case MySqlParser.KW_ENGINES:
                case MySqlParser.KW_ERROR:
                case MySqlParser.KW_ERRORS:
                case MySqlParser.KW_ESCAPE:
                case MySqlParser.KW_EVENT:
                case MySqlParser.KW_EVENTS:
                case MySqlParser.KW_EVERY:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_EXCLUSIVE:
                case MySqlParser.KW_EXPIRE:
                case MySqlParser.KW_EXPORT:
                case MySqlParser.KW_EXTENDED:
                case MySqlParser.KW_EXTENT_SIZE:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FAST:
                case MySqlParser.KW_FAULTS:
                case MySqlParser.KW_FIELDS:
                case MySqlParser.KW_FILE_BLOCK_SIZE:
                case MySqlParser.KW_FILTER:
                case MySqlParser.KW_FIRST:
                case MySqlParser.KW_FIXED:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_FOLLOWS:
                case MySqlParser.KW_FOUND:
                case MySqlParser.KW_FULL:
                case MySqlParser.KW_FUNCTION:
                case MySqlParser.KW_GENERAL:
                case MySqlParser.KW_GLOBAL:
                case MySqlParser.KW_GRANTS:
                case MySqlParser.KW_GROUP_REPLICATION:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HASH:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_HISTORY:
                case MySqlParser.KW_HOST:
                case MySqlParser.KW_HOSTS:
                case MySqlParser.KW_IDENTIFIED:
                case MySqlParser.KW_IGNORE_SERVER_IDS:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INDEXES:
                case MySqlParser.KW_INITIAL_SIZE:
                case MySqlParser.KW_INPLACE:
                case MySqlParser.KW_INSERT_METHOD:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_INSTANCE:
                case MySqlParser.KW_INSTANT:
                case MySqlParser.KW_INVISIBLE:
                case MySqlParser.KW_INVOKER:
                case MySqlParser.KW_IO:
                case MySqlParser.KW_IO_THREAD:
                case MySqlParser.KW_IPC:
                case MySqlParser.KW_ISOLATION:
                case MySqlParser.KW_ISSUER:
                case MySqlParser.KW_JSON:
                case MySqlParser.KW_KEY_BLOCK_SIZE:
                case MySqlParser.KW_LANGUAGE:
                case MySqlParser.KW_LAST:
                case MySqlParser.KW_LEAVES:
                case MySqlParser.KW_LESS:
                case MySqlParser.KW_LEVEL:
                case MySqlParser.KW_LIST:
                case MySqlParser.KW_LOCAL:
                case MySqlParser.KW_LOGFILE:
                case MySqlParser.KW_LOGS:
                case MySqlParser.KW_MASTER:
                case MySqlParser.KW_MASTER_AUTO_POSITION:
                case MySqlParser.KW_MASTER_CONNECT_RETRY:
                case MySqlParser.KW_MASTER_DELAY:
                case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
                case MySqlParser.KW_MASTER_HOST:
                case MySqlParser.KW_MASTER_LOG_FILE:
                case MySqlParser.KW_MASTER_LOG_POS:
                case MySqlParser.KW_MASTER_PASSWORD:
                case MySqlParser.KW_MASTER_PORT:
                case MySqlParser.KW_MASTER_RETRY_COUNT:
                case MySqlParser.KW_MASTER_SSL:
                case MySqlParser.KW_MASTER_SSL_CA:
                case MySqlParser.KW_MASTER_SSL_CAPATH:
                case MySqlParser.KW_MASTER_SSL_CERT:
                case MySqlParser.KW_MASTER_SSL_CIPHER:
                case MySqlParser.KW_MASTER_SSL_CRL:
                case MySqlParser.KW_MASTER_SSL_CRLPATH:
                case MySqlParser.KW_MASTER_SSL_KEY:
                case MySqlParser.KW_MASTER_TLS_VERSION:
                case MySqlParser.KW_MASTER_USER:
                case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                case MySqlParser.KW_MAX_ROWS:
                case MySqlParser.KW_MAX_SIZE:
                case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                case MySqlParser.KW_MAX_USER_CONNECTIONS:
                case MySqlParser.KW_MEDIUM:
                case MySqlParser.KW_MEMBER:
                case MySqlParser.KW_MERGE:
                case MySqlParser.KW_MESSAGE_TEXT:
                case MySqlParser.KW_MID:
                case MySqlParser.KW_MIGRATE:
                case MySqlParser.KW_MIN_ROWS:
                case MySqlParser.KW_MODE:
                case MySqlParser.KW_MODIFY:
                case MySqlParser.KW_MUTEX:
                case MySqlParser.KW_MYSQL:
                case MySqlParser.KW_MYSQL_ERRNO:
                case MySqlParser.KW_NAME:
                case MySqlParser.KW_NAMES:
                case MySqlParser.KW_NCHAR:
                case MySqlParser.KW_NEVER:
                case MySqlParser.KW_NEXT:
                case MySqlParser.KW_NO:
                case MySqlParser.KW_NOWAIT:
                case MySqlParser.KW_NODEGROUP:
                case MySqlParser.KW_NONE:
                case MySqlParser.KW_ODBC:
                case MySqlParser.KW_OFFLINE:
                case MySqlParser.KW_OFFSET:
                case MySqlParser.KW_OF:
                case MySqlParser.KW_OLD_PASSWORD:
                case MySqlParser.KW_ONE:
                case MySqlParser.KW_ONLINE:
                case MySqlParser.KW_ONLY:
                case MySqlParser.KW_OPEN:
                case MySqlParser.KW_OPTIMIZER_COSTS:
                case MySqlParser.KW_OPTIONS:
                case MySqlParser.KW_OWNER:
                case MySqlParser.KW_PACK_KEYS:
                case MySqlParser.KW_PAGE:
                case MySqlParser.KW_PAGE_CHECKSUM:
                case MySqlParser.KW_PARSER:
                case MySqlParser.KW_PARTIAL:
                case MySqlParser.KW_PARTITIONING:
                case MySqlParser.KW_PARTITIONS:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PHASE:
                case MySqlParser.KW_PLUGIN:
                case MySqlParser.KW_PLUGIN_DIR:
                case MySqlParser.KW_PLUGINS:
                case MySqlParser.KW_PORT:
                case MySqlParser.KW_PRECEDES:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_PRESERVE:
                case MySqlParser.KW_PREV:
                case MySqlParser.KW_PROCESSLIST:
                case MySqlParser.KW_PROFILE:
                case MySqlParser.KW_PROFILES:
                case MySqlParser.KW_PROXY:
                case MySqlParser.KW_QUERY:
                case MySqlParser.KW_QUICK:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_RECOVER:
                case MySqlParser.KW_RECURSIVE:
                case MySqlParser.KW_REDO_BUFFER_SIZE:
                case MySqlParser.KW_REDUNDANT:
                case MySqlParser.KW_RELAY:
                case MySqlParser.KW_RELAY_LOG_FILE:
                case MySqlParser.KW_RELAY_LOG_POS:
                case MySqlParser.KW_RELAYLOG:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_REPLICATE_DO_DB:
                case MySqlParser.KW_REPLICATE_DO_TABLE:
                case MySqlParser.KW_REPLICATE_IGNORE_DB:
                case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATE_REWRITE_DB:
                case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
                case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATION:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESUME:
                case MySqlParser.KW_RETURNED_SQLSTATE:
                case MySqlParser.KW_RETURNS:
                case MySqlParser.KW_REUSE:
                case MySqlParser.KW_ROLE:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_ROLLUP:
                case MySqlParser.KW_ROTATE:
                case MySqlParser.KW_ROW:
                case MySqlParser.KW_ROWS:
                case MySqlParser.KW_ROW_FORMAT:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_SCHEDULE:
                case MySqlParser.KW_SECURITY:
                case MySqlParser.KW_SERVER:
                case MySqlParser.KW_SESSION:
                case MySqlParser.KW_SHARE:
                case MySqlParser.KW_SHARED:
                case MySqlParser.KW_SIGNED:
                case MySqlParser.KW_SIMPLE:
                case MySqlParser.KW_SLAVE:
                case MySqlParser.KW_SLOW:
                case MySqlParser.KW_SNAPSHOT:
                case MySqlParser.KW_SOCKET:
                case MySqlParser.KW_SOME:
                case MySqlParser.KW_SONAME:
                case MySqlParser.KW_SOUNDS:
                case MySqlParser.KW_SOURCE:
                case MySqlParser.KW_SQL_AFTER_GTIDS:
                case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
                case MySqlParser.KW_SQL_BEFORE_GTIDS:
                case MySqlParser.KW_SQL_BUFFER_RESULT:
                case MySqlParser.KW_SQL_CACHE:
                case MySqlParser.KW_SQL_NO_CACHE:
                case MySqlParser.KW_SQL_THREAD:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STARTS:
                case MySqlParser.KW_STATS_AUTO_RECALC:
                case MySqlParser.KW_STATS_PERSISTENT:
                case MySqlParser.KW_STATS_SAMPLE_PAGES:
                case MySqlParser.KW_STATUS:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_STORAGE:
                case MySqlParser.KW_STRING:
                case MySqlParser.KW_SUBCLASS_ORIGIN:
                case MySqlParser.KW_SUBJECT:
                case MySqlParser.KW_SUBPARTITION:
                case MySqlParser.KW_SUBPARTITIONS:
                case MySqlParser.KW_SUSPEND:
                case MySqlParser.KW_SWAPS:
                case MySqlParser.KW_SWITCHES:
                case MySqlParser.KW_TABLE_NAME:
                case MySqlParser.KW_TABLESPACE:
                case MySqlParser.KW_TABLE_TYPE:
                case MySqlParser.KW_TEMPORARY:
                case MySqlParser.KW_TEMPTABLE:
                case MySqlParser.KW_THAN:
                case MySqlParser.KW_TRADITIONAL:
                case MySqlParser.KW_TRANSACTION:
                case MySqlParser.KW_TRANSACTIONAL:
                case MySqlParser.KW_TRIGGERS:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNBOUNDED:
                case MySqlParser.KW_UNDEFINED:
                case MySqlParser.KW_UNDOFILE:
                case MySqlParser.KW_UNDO_BUFFER_SIZE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UNKNOWN:
                case MySqlParser.KW_UNTIL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_USER:
                case MySqlParser.KW_USE_FRM:
                case MySqlParser.KW_USER_RESOURCES:
                case MySqlParser.KW_VALIDATION:
                case MySqlParser.KW_VALUE:
                case MySqlParser.KW_VARIABLES:
                case MySqlParser.KW_VIEW:
                case MySqlParser.KW_VIRTUAL:
                case MySqlParser.KW_VISIBLE:
                case MySqlParser.KW_WAIT:
                case MySqlParser.KW_WARNINGS:
                case MySqlParser.KW_WITHOUT:
                case MySqlParser.KW_WORK:
                case MySqlParser.KW_WRAPPER:
                case MySqlParser.KW_X509:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_XML:
                case MySqlParser.KW_QUARTER:
                case MySqlParser.KW_MONTH:
                case MySqlParser.KW_DAY:
                case MySqlParser.KW_HOUR:
                case MySqlParser.KW_MINUTE:
                case MySqlParser.KW_WEEK:
                case MySqlParser.KW_SECOND:
                case MySqlParser.KW_MICROSECOND:
                case MySqlParser.KW_ADMIN:
                case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
                case MySqlParser.KW_AUDIT_ADMIN:
                case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
                case MySqlParser.KW_BACKUP_ADMIN:
                case MySqlParser.KW_BINLOG_ADMIN:
                case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
                case MySqlParser.KW_CLONE_ADMIN:
                case MySqlParser.KW_CONNECTION_ADMIN:
                case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_FILE:
                case MySqlParser.KW_FIREWALL_ADMIN:
                case MySqlParser.KW_FIREWALL_EXEMPT:
                case MySqlParser.KW_FIREWALL_USER:
                case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
                case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
                case MySqlParser.KW_INVOKE:
                case MySqlParser.KW_LAMBDA:
                case MySqlParser.KW_NDB_STORED_USER:
                case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
                case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
                case MySqlParser.KW_PRIVILEGES:
                case MySqlParser.KW_PROCESS:
                case MySqlParser.KW_RELOAD:
                case MySqlParser.KW_REPLICATION_APPLIER:
                case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_USER:
                case MySqlParser.KW_ROLE_ADMIN:
                case MySqlParser.KW_ROUTINE:
                case MySqlParser.KW_S3:
                case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
                case MySqlParser.KW_SET_USER_ID:
                case MySqlParser.KW_SHOW_ROUTINE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.KW_SUPER:
                case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
                case MySqlParser.KW_TABLES:
                case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
                case MySqlParser.KW_VERSION_TOKEN_ADMIN:
                case MySqlParser.KW_XA_RECOVER_ADMIN:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.KW_ARCHIVE:
                case MySqlParser.KW_BLACKHOLE:
                case MySqlParser.KW_CSV:
                case MySqlParser.KW_FEDERATED:
                case MySqlParser.KW_INNODB:
                case MySqlParser.KW_MEMORY:
                case MySqlParser.KW_MRG_MYISAM:
                case MySqlParser.KW_MYISAM:
                case MySqlParser.KW_NDB:
                case MySqlParser.KW_NDBCLUSTER:
                case MySqlParser.KW_PERFORMANCE_SCHEMA:
                case MySqlParser.KW_TOKUDB:
                case MySqlParser.KW_REPEATABLE:
                case MySqlParser.KW_COMMITTED:
                case MySqlParser.KW_UNCOMMITTED:
                case MySqlParser.KW_SERIALIZABLE:
                case MySqlParser.KW_GEOMETRYCOLLECTION:
                case MySqlParser.KW_LINESTRING:
                case MySqlParser.KW_MULTILINESTRING:
                case MySqlParser.KW_MULTIPOINT:
                case MySqlParser.KW_MULTIPOLYGON:
                case MySqlParser.KW_POINT:
                case MySqlParser.KW_POLYGON:
                case MySqlParser.KW_CATALOG_NAME:
                case MySqlParser.KW_CHARSET:
                case MySqlParser.KW_COLLATION:
                case MySqlParser.KW_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_FORMAT:
                case MySqlParser.KW_GET_FORMAT:
                case MySqlParser.KW_RANDOM:
                case MySqlParser.KW_REVERSE:
                case MySqlParser.KW_ROW_COUNT:
                case MySqlParser.KW_SCHEMA_NAME:
                case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_SRID:
                case MySqlParser.KW_SYSTEM_USER:
                case MySqlParser.KW_TP_CONNECTION_ADMIN:
                case MySqlParser.KW_WEIGHT_STRING:
                case MySqlParser.MOD:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.ID:
                    {
                    this.state = 2979;
                    this.partitionNames();
                    }
                    break;
                case MySqlParser.KW_ALL:
                    {
                    this.state = 2980;
                    this.match(MySqlParser.KW_ALL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case MySqlParser.KW_REMOVE:
                localContext = new AlterByRemovePartitioningContext(localContext);
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 2983;
                this.match(MySqlParser.KW_REMOVE);
                this.state = 2984;
                this.match(MySqlParser.KW_PARTITIONING);
                }
                break;
            case MySqlParser.KW_UPGRADE:
                localContext = new AlterByUpgradePartitioningContext(localContext);
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 2985;
                this.match(MySqlParser.KW_UPGRADE);
                this.state = 2986;
                this.match(MySqlParser.KW_PARTITIONING);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropDatabase(): DropDatabaseContext {
        let localContext = new DropDatabaseContext(this.context, this.state);
        this.enterRule(localContext, 144, MySqlParser.RULE_dropDatabase);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2989;
            this.match(MySqlParser.KW_DROP);
            this.state = 2990;
            localContext._dbFormat = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 39 || _la === 152)) {
                localContext._dbFormat = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2992;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 361, this.context) ) {
            case 1:
                {
                this.state = 2991;
                this.ifExists();
                }
                break;
            }
            this.state = 2994;
            this.databaseName();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropEvent(): DropEventContext {
        let localContext = new DropEventContext(this.context, this.state);
        this.enterRule(localContext, 146, MySqlParser.RULE_dropEvent);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 2996;
            this.match(MySqlParser.KW_DROP);
            this.state = 2997;
            this.match(MySqlParser.KW_EVENT);
            this.state = 2999;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 362, this.context) ) {
            case 1:
                {
                this.state = 2998;
                this.ifExists();
                }
                break;
            }
            this.state = 3001;
            localContext._event_name = this.fullId();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropIndex(): DropIndexContext {
        let localContext = new DropIndexContext(this.context, this.state);
        this.enterRule(localContext, 148, MySqlParser.RULE_dropIndex);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3003;
            this.match(MySqlParser.KW_DROP);
            this.state = 3004;
            this.match(MySqlParser.KW_INDEX);
            this.state = 3006;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 363, this.context) ) {
            case 1:
                {
                this.state = 3005;
                localContext._intimeAction = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 508 || _la === 514)) {
                    localContext._intimeAction = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            }
            this.state = 3008;
            this.indexName();
            this.state = 3009;
            this.match(MySqlParser.KW_ON);
            this.state = 3010;
            this.tableName();
            this.state = 3023;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 367, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    this.state = 3021;
                    this.errorHandler.sync(this);
                    switch (this.tokenStream.LA(1)) {
                    case MySqlParser.KW_ALGORITHM:
                        {
                        this.state = 3011;
                        this.match(MySqlParser.KW_ALGORITHM);
                        this.state = 3013;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 857) {
                            {
                            this.state = 3012;
                            this.match(MySqlParser.EQUAL_SYMBOL);
                            }
                        }

                        this.state = 3015;
                        localContext._algType = this.tokenStream.LT(1);
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 42 || _la === 357 || _la === 430)) {
                            localContext._algType = this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        }
                        break;
                    case MySqlParser.KW_LOCK:
                        {
                        this.state = 3016;
                        this.match(MySqlParser.KW_LOCK);
                        this.state = 3018;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 857) {
                            {
                            this.state = 3017;
                            this.match(MySqlParser.EQUAL_SYMBOL);
                            }
                        }

                        this.state = 3020;
                        localContext._lockType = this.tokenStream.LT(1);
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 42 || _la === 389 || _la === 505 || _la === 595)) {
                            localContext._lockType = this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    }
                }
                this.state = 3025;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 367, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropLogfileGroup(): DropLogfileGroupContext {
        let localContext = new DropLogfileGroupContext(this.context, this.state);
        this.enterRule(localContext, 150, MySqlParser.RULE_dropLogfileGroup);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3026;
            this.match(MySqlParser.KW_DROP);
            this.state = 3027;
            this.match(MySqlParser.KW_LOGFILE);
            this.state = 3028;
            this.match(MySqlParser.KW_GROUP);
            this.state = 3029;
            localContext._logfileGroupName = this.uid();
            this.state = 3030;
            this.match(MySqlParser.KW_ENGINE);
            this.state = 3032;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 857) {
                {
                this.state = 3031;
                this.match(MySqlParser.EQUAL_SYMBOL);
                }
            }

            this.state = 3034;
            this.engineName();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropProcedure(): DropProcedureContext {
        let localContext = new DropProcedureContext(this.context, this.state);
        this.enterRule(localContext, 152, MySqlParser.RULE_dropProcedure);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3036;
            this.match(MySqlParser.KW_DROP);
            this.state = 3037;
            this.match(MySqlParser.KW_PROCEDURE);
            this.state = 3039;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 369, this.context) ) {
            case 1:
                {
                this.state = 3038;
                this.ifExists();
                }
                break;
            }
            this.state = 3041;
            localContext._sp_name = this.fullId();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropFunction(): DropFunctionContext {
        let localContext = new DropFunctionContext(this.context, this.state);
        this.enterRule(localContext, 154, MySqlParser.RULE_dropFunction);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3043;
            this.match(MySqlParser.KW_DROP);
            this.state = 3044;
            this.match(MySqlParser.KW_FUNCTION);
            this.state = 3046;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 370, this.context) ) {
            case 1:
                {
                this.state = 3045;
                this.ifExists();
                }
                break;
            }
            this.state = 3048;
            this.functionName();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropServer(): DropServerContext {
        let localContext = new DropServerContext(this.context, this.state);
        this.enterRule(localContext, 156, MySqlParser.RULE_dropServer);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3050;
            this.match(MySqlParser.KW_DROP);
            this.state = 3051;
            this.match(MySqlParser.KW_SERVER);
            this.state = 3053;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 371, this.context) ) {
            case 1:
                {
                this.state = 3052;
                this.ifExists();
                }
                break;
            }
            this.state = 3055;
            localContext._serverName = this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropSpatial(): DropSpatialContext {
        let localContext = new DropSpatialContext(this.context, this.state);
        this.enterRule(localContext, 158, MySqlParser.RULE_dropSpatial);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3057;
            this.match(MySqlParser.KW_DROP);
            this.state = 3058;
            this.match(MySqlParser.KW_SPATIAL);
            this.state = 3059;
            this.match(MySqlParser.KW_REFERENCE);
            this.state = 3060;
            this.match(MySqlParser.KW_SYSTEM);
            this.state = 3062;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 78) {
                {
                this.state = 3061;
                this.ifExists();
                }
            }

            this.state = 3064;
            this.match(MySqlParser.DECIMAL_LITERAL);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropTable(): DropTableContext {
        let localContext = new DropTableContext(this.context, this.state);
        this.enterRule(localContext, 160, MySqlParser.RULE_dropTable);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3066;
            this.match(MySqlParser.KW_DROP);
            this.state = 3068;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 660) {
                {
                this.state = 3067;
                this.match(MySqlParser.KW_TEMPORARY);
                }
            }

            this.state = 3070;
            this.match(MySqlParser.KW_TABLE);
            this.state = 3072;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 374, this.context) ) {
            case 1:
                {
                this.state = 3071;
                this.ifExists();
                }
                break;
            }
            this.state = 3074;
            this.tableNames();
            this.state = 3076;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 22 || _la === 146) {
                {
                this.state = 3075;
                localContext._dropType = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 22 || _la === 146)) {
                    localContext._dropType = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropTablespace(): DropTablespaceContext {
        let localContext = new DropTablespaceContext(this.context, this.state);
        this.enterRule(localContext, 162, MySqlParser.RULE_dropTablespace);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3078;
            this.match(MySqlParser.KW_DROP);
            this.state = 3080;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 180) {
                {
                this.state = 3079;
                this.match(MySqlParser.KW_UNDO);
                }
            }

            this.state = 3082;
            this.match(MySqlParser.KW_TABLESPACE);
            this.state = 3083;
            this.tablespaceName();
            this.state = 3089;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 380) {
                {
                this.state = 3084;
                this.match(MySqlParser.KW_ENGINE);
                this.state = 3086;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 3085;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 3088;
                this.engineName();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropTrigger(): DropTriggerContext {
        let localContext = new DropTriggerContext(this.context, this.state);
        this.enterRule(localContext, 164, MySqlParser.RULE_dropTrigger);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3091;
            this.match(MySqlParser.KW_DROP);
            this.state = 3092;
            this.match(MySqlParser.KW_TRIGGER);
            this.state = 3094;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 379, this.context) ) {
            case 1:
                {
                this.state = 3093;
                this.ifExists();
                }
                break;
            }
            this.state = 3096;
            localContext._trigger_name = this.fullId();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropView(): DropViewContext {
        let localContext = new DropViewContext(this.context, this.state);
        this.enterRule(localContext, 166, MySqlParser.RULE_dropView);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3098;
            this.match(MySqlParser.KW_DROP);
            this.state = 3099;
            this.match(MySqlParser.KW_VIEW);
            this.state = 3101;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 380, this.context) ) {
            case 1:
                {
                this.state = 3100;
                this.ifExists();
                }
                break;
            }
            this.state = 3103;
            this.viewName();
            this.state = 3108;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 3104;
                this.match(MySqlParser.COMMA);
                this.state = 3105;
                this.viewName();
                }
                }
                this.state = 3110;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 3112;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 22 || _la === 146) {
                {
                this.state = 3111;
                localContext._dropType = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 22 || _la === 146)) {
                    localContext._dropType = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropRole(): DropRoleContext {
        let localContext = new DropRoleContext(this.context, this.state);
        this.enterRule(localContext, 168, MySqlParser.RULE_dropRole);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3114;
            this.match(MySqlParser.KW_DROP);
            this.state = 3115;
            this.match(MySqlParser.KW_ROLE);
            this.state = 3117;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 383, this.context) ) {
            case 1:
                {
                this.state = 3116;
                this.ifExists();
                }
                break;
            }
            this.state = 3119;
            this.userOrRoleNames();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public setRole(): SetRoleContext {
        let localContext = new SetRoleContext(this.context, this.state);
        this.enterRule(localContext, 170, MySqlParser.RULE_setRole);
        let _la: number;
        try {
            this.state = 3141;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 386, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3121;
                this.match(MySqlParser.KW_SET);
                this.state = 3122;
                this.match(MySqlParser.KW_DEFAULT);
                this.state = 3123;
                this.match(MySqlParser.KW_ROLE);
                this.state = 3127;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 384, this.context) ) {
                case 1:
                    {
                    this.state = 3124;
                    this.match(MySqlParser.KW_NONE);
                    }
                    break;
                case 2:
                    {
                    this.state = 3125;
                    this.match(MySqlParser.KW_ALL);
                    }
                    break;
                case 3:
                    {
                    this.state = 3126;
                    this.userOrRoleNames();
                    }
                    break;
                }
                this.state = 3129;
                this.match(MySqlParser.KW_TO);
                {
                this.state = 3130;
                this.userOrRoleName();
                }
                this.state = 3135;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 3131;
                    this.match(MySqlParser.COMMA);
                    {
                    this.state = 3132;
                    this.userOrRoleName();
                    }
                    }
                    }
                    this.state = 3137;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3138;
                this.match(MySqlParser.KW_SET);
                this.state = 3139;
                this.match(MySqlParser.KW_ROLE);
                this.state = 3140;
                this.roleOption();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public renameTable(): RenameTableContext {
        let localContext = new RenameTableContext(this.context, this.state);
        this.enterRule(localContext, 172, MySqlParser.RULE_renameTable);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3143;
            this.match(MySqlParser.KW_RENAME);
            this.state = 3144;
            this.match(MySqlParser.KW_TABLE);
            this.state = 3145;
            this.renameTableClause();
            this.state = 3150;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 3146;
                this.match(MySqlParser.COMMA);
                this.state = 3147;
                this.renameTableClause();
                }
                }
                this.state = 3152;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public renameTableClause(): RenameTableClauseContext {
        let localContext = new RenameTableClauseContext(this.context, this.state);
        this.enterRule(localContext, 174, MySqlParser.RULE_renameTableClause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3153;
            this.tableName();
            this.state = 3154;
            this.match(MySqlParser.KW_TO);
            this.state = 3155;
            this.tableNameCreate();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public truncateTable(): TruncateTableContext {
        let localContext = new TruncateTableContext(this.context, this.state);
        this.enterRule(localContext, 176, MySqlParser.RULE_truncateTable);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3157;
            this.match(MySqlParser.KW_TRUNCATE);
            this.state = 3159;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 173) {
                {
                this.state = 3158;
                this.match(MySqlParser.KW_TABLE);
                }
            }

            this.state = 3161;
            this.tableName();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public callStatement(): CallStatementContext {
        let localContext = new CallStatementContext(this.context, this.state);
        this.enterRule(localContext, 178, MySqlParser.RULE_callStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3163;
            this.match(MySqlParser.KW_CALL);
            this.state = 3164;
            localContext._sp_name = this.fullId();
            this.state = 3171;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 390, this.context) ) {
            case 1:
                {
                this.state = 3165;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 3168;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 389, this.context) ) {
                case 1:
                    {
                    this.state = 3166;
                    this.constants();
                    }
                    break;
                case 2:
                    {
                    this.state = 3167;
                    this.expressions();
                    }
                    break;
                }
                this.state = 3170;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public deleteStatement(): DeleteStatementContext {
        let localContext = new DeleteStatementContext(this.context, this.state);
        this.enterRule(localContext, 180, MySqlParser.RULE_deleteStatement);
        try {
            this.state = 3175;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 391, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3173;
                this.singleDeleteStatement();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3174;
                this.multipleDeleteStatement();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public doStatement(): DoStatementContext {
        let localContext = new DoStatementContext(this.context, this.state);
        this.enterRule(localContext, 182, MySqlParser.RULE_doStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3177;
            this.match(MySqlParser.KW_DO);
            this.state = 3178;
            this.expressions();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public handlerStatement(): HandlerStatementContext {
        let localContext = new HandlerStatementContext(this.context, this.state);
        this.enterRule(localContext, 184, MySqlParser.RULE_handlerStatement);
        try {
            this.state = 3184;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 392, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3180;
                this.handlerOpenStatement();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3181;
                this.handlerReadIndexStatement();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3182;
                this.handlerReadStatement();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 3183;
                this.handlerCloseStatement();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public insertStatement(): InsertStatementContext {
        let localContext = new InsertStatementContext(this.context, this.state);
        this.enterRule(localContext, 186, MySqlParser.RULE_insertStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3186;
            this.match(MySqlParser.KW_INSERT);
            this.state = 3188;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 43 || _la === 76 || _la === 107) {
                {
                this.state = 3187;
                localContext._priority = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 43 || _la === 76 || _la === 107)) {
                    localContext._priority = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 3191;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 79) {
                {
                this.state = 3190;
                this.match(MySqlParser.KW_IGNORE);
                }
            }

            this.state = 3194;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 88) {
                {
                this.state = 3193;
                this.match(MySqlParser.KW_INTO);
                }
            }

            this.state = 3196;
            this.tableName();
            this.state = 3203;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 130) {
                {
                this.state = 3197;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 3198;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 3200;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                    {
                    this.state = 3199;
                    this.partitionNames();
                    }
                }

                this.state = 3202;
                this.match(MySqlParser.RR_BRACKET);
                }
            }

            this.state = 3216;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 401, this.context) ) {
            case 1:
                {
                this.state = 3206;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 398, this.context) ) {
                case 1:
                    {
                    this.state = 3205;
                    this.fullColumnNames();
                    }
                    break;
                }
                this.state = 3210;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 399, this.context) ) {
                case 1:
                    {
                    this.state = 3208;
                    this.valuesOrValueList();
                    }
                    break;
                case 2:
                    {
                    this.state = 3209;
                    this.selectOrTableOrValues();
                    }
                    break;
                }
                this.state = 3213;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 400, this.context) ) {
                case 1:
                    {
                    this.state = 3212;
                    this.asRowAlias();
                    }
                    break;
                }
                }
                break;
            case 2:
                {
                this.state = 3215;
                this.setAssignmentList();
                }
                break;
            }
            this.state = 3219;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 13) {
                {
                this.state = 3218;
                this.asRowAlias();
                }
            }

            this.state = 3233;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 119) {
                {
                this.state = 3221;
                this.match(MySqlParser.KW_ON);
                this.state = 3222;
                this.match(MySqlParser.KW_DUPLICATE);
                this.state = 3223;
                this.match(MySqlParser.KW_KEY);
                this.state = 3224;
                this.match(MySqlParser.KW_UPDATE);
                this.state = 3225;
                localContext._duplicatedFirst = this.updatedElement();
                this.state = 3230;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 3226;
                    this.match(MySqlParser.COMMA);
                    this.state = 3227;
                    localContext._updatedElement = this.updatedElement();
                    localContext._duplicatedElements.push(localContext._updatedElement);
                    }
                    }
                    this.state = 3232;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public asRowAlias(): AsRowAliasContext {
        let localContext = new AsRowAliasContext(this.context, this.state);
        this.enterRule(localContext, 188, MySqlParser.RULE_asRowAlias);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3235;
            this.match(MySqlParser.KW_AS);
            this.state = 3236;
            localContext._rowAlias = this.uid();
            this.state = 3238;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 405, this.context) ) {
            case 1:
                {
                this.state = 3237;
                this.fullColumnNames();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public selectOrTableOrValues(): SelectOrTableOrValuesContext {
        let localContext = new SelectOrTableOrValuesContext(this.context, this.state);
        this.enterRule(localContext, 190, MySqlParser.RULE_selectOrTableOrValues);
        try {
            this.state = 3244;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_SELECT:
            case MySqlParser.LR_BRACKET:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3240;
                this.selectStatement();
                }
                break;
            case MySqlParser.KW_TABLE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3241;
                this.match(MySqlParser.KW_TABLE);
                this.state = 3242;
                this.tableName();
                }
                break;
            case MySqlParser.KW_VALUES:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3243;
                this.rowValuesList();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public interSectStatement(): InterSectStatementContext {
        let localContext = new InterSectStatementContext(this.context, this.state);
        this.enterRule(localContext, 192, MySqlParser.RULE_interSectStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3246;
            this.interSectQuery();
            this.state = 3252;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            do {
                {
                {
                this.state = 3247;
                this.match(MySqlParser.KW_INTERSECT);
                this.state = 3249;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 7 || _la === 49) {
                    {
                    this.state = 3248;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 7 || _la === 49)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 3251;
                this.interSectQuery();
                }
                }
                this.state = 3254;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            } while (_la === 828);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public interSectQuery(): InterSectQueryContext {
        let localContext = new InterSectQueryContext(this.context, this.state);
        this.enterRule(localContext, 194, MySqlParser.RULE_interSectQuery);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3257;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 866) {
                {
                this.state = 3256;
                this.match(MySqlParser.LR_BRACKET);
                }
            }

            this.state = 3259;
            this.querySpecification();
            this.state = 3261;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 410, this.context) ) {
            case 1:
                {
                this.state = 3260;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public loadDataStatement(): LoadDataStatementContext {
        let localContext = new LoadDataStatementContext(this.context, this.state);
        this.enterRule(localContext, 196, MySqlParser.RULE_loadDataStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3263;
            this.match(MySqlParser.KW_LOAD);
            this.state = 3264;
            this.match(MySqlParser.KW_DATA);
            this.state = 3266;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 107 || _la === 347) {
                {
                this.state = 3265;
                localContext._priority = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 107 || _la === 347)) {
                    localContext._priority = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 3269;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 450) {
                {
                this.state = 3268;
                this.match(MySqlParser.KW_LOCAL);
                }
            }

            this.state = 3271;
            this.match(MySqlParser.KW_INFILE);
            this.state = 3272;
            localContext._filename = this.match(MySqlParser.STRING_LITERAL);
            this.state = 3274;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 79 || _la === 143) {
                {
                this.state = 3273;
                localContext._violation = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 79 || _la === 143)) {
                    localContext._violation = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 3276;
            this.match(MySqlParser.KW_INTO);
            this.state = 3277;
            this.match(MySqlParser.KW_TABLE);
            this.state = 3278;
            this.tableName();
            this.state = 3284;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 130) {
                {
                this.state = 3279;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 3280;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 3281;
                this.partitionNames();
                this.state = 3282;
                this.match(MySqlParser.RR_BRACKET);
                }
            }

            this.state = 3289;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 26) {
                {
                this.state = 3286;
                this.match(MySqlParser.KW_CHARACTER);
                this.state = 3287;
                this.match(MySqlParser.KW_SET);
                this.state = 3288;
                localContext._charset = this.charsetName();
                }
            }

            this.state = 3297;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 337 || _la === 398) {
                {
                this.state = 3291;
                localContext._fieldsFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 337 || _la === 398)) {
                    localContext._fieldsFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 3293;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                do {
                    {
                    {
                    this.state = 3292;
                    this.selectFieldsInto();
                    }
                    }
                    this.state = 3295;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                } while (_la === 56 || _la === 58 || _la === 123 || _la === 174);
                }
            }

            this.state = 3305;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 102) {
                {
                this.state = 3299;
                this.match(MySqlParser.KW_LINES);
                this.state = 3301;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                do {
                    {
                    {
                    this.state = 3300;
                    this.selectLinesInto();
                    }
                    }
                    this.state = 3303;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                } while (_la === 171 || _la === 174);
                }
            }

            this.state = 3311;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 79) {
                {
                this.state = 3307;
                this.match(MySqlParser.KW_IGNORE);
                this.state = 3308;
                this.decimalLiteral();
                this.state = 3309;
                localContext._linesFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 102 || _la === 587)) {
                    localContext._linesFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 3324;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 422, this.context) ) {
            case 1:
                {
                this.state = 3313;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 3314;
                this.assignmentField();
                this.state = 3319;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 3315;
                    this.match(MySqlParser.COMMA);
                    this.state = 3316;
                    this.assignmentField();
                    }
                    }
                    this.state = 3321;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 3322;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
            this.state = 3335;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 424, this.context) ) {
            case 1:
                {
                this.state = 3326;
                this.match(MySqlParser.KW_SET);
                this.state = 3327;
                this.updatedElement();
                this.state = 3332;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 3328;
                    this.match(MySqlParser.COMMA);
                    this.state = 3329;
                    this.updatedElement();
                    }
                    }
                    this.state = 3334;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public loadXmlStatement(): LoadXmlStatementContext {
        let localContext = new LoadXmlStatementContext(this.context, this.state);
        this.enterRule(localContext, 198, MySqlParser.RULE_loadXmlStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3337;
            this.match(MySqlParser.KW_LOAD);
            this.state = 3338;
            this.match(MySqlParser.KW_XML);
            this.state = 3340;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 107 || _la === 347) {
                {
                this.state = 3339;
                localContext._priority = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 107 || _la === 347)) {
                    localContext._priority = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 3343;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 450) {
                {
                this.state = 3342;
                this.match(MySqlParser.KW_LOCAL);
                }
            }

            this.state = 3345;
            this.match(MySqlParser.KW_INFILE);
            this.state = 3346;
            localContext._filename = this.match(MySqlParser.STRING_LITERAL);
            this.state = 3348;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 79 || _la === 143) {
                {
                this.state = 3347;
                localContext._violation = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 79 || _la === 143)) {
                    localContext._violation = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 3350;
            this.match(MySqlParser.KW_INTO);
            this.state = 3351;
            this.match(MySqlParser.KW_TABLE);
            this.state = 3352;
            this.tableName();
            this.state = 3356;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 26) {
                {
                this.state = 3353;
                this.match(MySqlParser.KW_CHARACTER);
                this.state = 3354;
                this.match(MySqlParser.KW_SET);
                this.state = 3355;
                localContext._charset = this.charsetName();
                }
            }

            this.state = 3368;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 587) {
                {
                this.state = 3358;
                this.match(MySqlParser.KW_ROWS);
                this.state = 3359;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 3360;
                this.match(MySqlParser.KW_BY);
                this.state = 3362;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 859) {
                    {
                    this.state = 3361;
                    this.match(MySqlParser.LESS_SYMBOL);
                    }
                }

                this.state = 3364;
                localContext._tag = this.match(MySqlParser.STRING_LITERAL);
                this.state = 3366;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 858) {
                    {
                    this.state = 3365;
                    this.match(MySqlParser.GREATER_SYMBOL);
                    }
                }

                }
            }

            this.state = 3374;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 79) {
                {
                this.state = 3370;
                this.match(MySqlParser.KW_IGNORE);
                this.state = 3371;
                this.decimalLiteral();
                this.state = 3372;
                localContext._linesFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 102 || _la === 587)) {
                    localContext._linesFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 3387;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 434, this.context) ) {
            case 1:
                {
                this.state = 3376;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 3377;
                this.assignmentField();
                this.state = 3382;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 3378;
                    this.match(MySqlParser.COMMA);
                    this.state = 3379;
                    this.assignmentField();
                    }
                    }
                    this.state = 3384;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 3385;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
            this.state = 3398;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 436, this.context) ) {
            case 1:
                {
                this.state = 3389;
                this.match(MySqlParser.KW_SET);
                this.state = 3390;
                this.updatedElement();
                this.state = 3395;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 3391;
                    this.match(MySqlParser.COMMA);
                    this.state = 3392;
                    this.updatedElement();
                    }
                    }
                    this.state = 3397;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public parenthesizedQuery(): ParenthesizedQueryContext {
        let localContext = new ParenthesizedQueryContext(this.context, this.state);
        this.enterRule(localContext, 200, MySqlParser.RULE_parenthesizedQuery);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3400;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 3401;
            this.parenthesizedQueryExpression();
            this.state = 3403;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 125) {
                {
                this.state = 3402;
                this.orderByClause();
                }
            }

            this.state = 3406;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 3405;
                this.limitClause();
                }
            }

            this.state = 3408;
            this.match(MySqlParser.RR_BRACKET);
            this.state = 3410;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 125) {
                {
                this.state = 3409;
                this.orderByClause();
                }
            }

            this.state = 3413;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 3412;
                this.limitClause();
                }
            }

            this.state = 3416;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 88) {
                {
                this.state = 3415;
                this.intoClause();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public replaceStatement(): ReplaceStatementContext {
        let localContext = new ReplaceStatementContext(this.context, this.state);
        this.enterRule(localContext, 202, MySqlParser.RULE_replaceStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3418;
            this.match(MySqlParser.KW_REPLACE);
            this.state = 3420;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 43 || _la === 107) {
                {
                this.state = 3419;
                localContext._priority = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 43 || _la === 107)) {
                    localContext._priority = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 3423;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 88) {
                {
                this.state = 3422;
                this.match(MySqlParser.KW_INTO);
                }
            }

            this.state = 3425;
            this.tableName();
            this.state = 3431;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 130) {
                {
                this.state = 3426;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 3427;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 3428;
                this.partitionNames();
                this.state = 3429;
                this.match(MySqlParser.RR_BRACKET);
                }
            }

            this.state = 3441;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_SELECT:
            case MySqlParser.KW_TABLE:
            case MySqlParser.KW_VALUES:
            case MySqlParser.KW_VALUE:
            case MySqlParser.LR_BRACKET:
                {
                this.state = 3437;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 445, this.context) ) {
                case 1:
                    {
                    this.state = 3433;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 3434;
                    this.columnNames();
                    this.state = 3435;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                }
                this.state = 3439;
                this.replaceStatementValuesOrSelectOrTable();
                }
                break;
            case MySqlParser.KW_SET:
                {
                this.state = 3440;
                this.setAssignmentList();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public selectStatement(): SelectStatementContext {
        let localContext = new SelectStatementContext(this.context, this.state);
        this.enterRule(localContext, 204, MySqlParser.RULE_selectStatement);
        let _la: number;
        try {
            let alternative: number;
            this.state = 3502;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_SELECT:
                localContext = new UnionAndLateralSelectContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3443;
                this.querySpecification();
                this.state = 3447;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 447, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 3444;
                        this.unionStatement();
                        }
                        }
                    }
                    this.state = 3449;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 447, this.context);
                }
                this.state = 3458;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 450, this.context) ) {
                case 1:
                    {
                    this.state = 3450;
                    this.match(MySqlParser.KW_UNION);
                    this.state = 3452;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 7 || _la === 49) {
                        {
                        this.state = 3451;
                        (localContext as UnionAndLateralSelectContext)._unionType = this.tokenStream.LT(1);
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 7 || _la === 49)) {
                            (localContext as UnionAndLateralSelectContext)._unionType = this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        }
                    }

                    this.state = 3456;
                    this.errorHandler.sync(this);
                    switch (this.tokenStream.LA(1)) {
                    case MySqlParser.KW_SELECT:
                        {
                        this.state = 3454;
                        this.querySpecification();
                        }
                        break;
                    case MySqlParser.LR_BRACKET:
                        {
                        this.state = 3455;
                        this.queryExpression();
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    }
                    break;
                }
                this.state = 3464;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 451, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 3460;
                        this.match(MySqlParser.COMMA);
                        this.state = 3461;
                        this.lateralStatement();
                        }
                        }
                    }
                    this.state = 3466;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 451, this.context);
                }
                this.state = 3468;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 452, this.context) ) {
                case 1:
                    {
                    this.state = 3467;
                    this.orderByClause();
                    }
                    break;
                }
                this.state = 3471;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 453, this.context) ) {
                case 1:
                    {
                    this.state = 3470;
                    this.limitClause();
                    }
                    break;
                }
                this.state = 3474;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 454, this.context) ) {
                case 1:
                    {
                    this.state = 3473;
                    this.lockClause();
                    }
                    break;
                }
                this.state = 3477;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 455, this.context) ) {
                case 1:
                    {
                    this.state = 3476;
                    this.intoClause();
                    }
                    break;
                }
                }
                break;
            case MySqlParser.LR_BRACKET:
                localContext = new SelectExpressionContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3479;
                this.queryExpression();
                this.state = 3483;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 456, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 3480;
                        this.unionStatement();
                        }
                        }
                    }
                    this.state = 3485;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 456, this.context);
                }
                this.state = 3491;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 458, this.context) ) {
                case 1:
                    {
                    this.state = 3486;
                    this.match(MySqlParser.KW_UNION);
                    this.state = 3488;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 7 || _la === 49) {
                        {
                        this.state = 3487;
                        (localContext as SelectExpressionContext)._unionType = this.tokenStream.LT(1);
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 7 || _la === 49)) {
                            (localContext as SelectExpressionContext)._unionType = this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        }
                    }

                    this.state = 3490;
                    this.queryExpression();
                    }
                    break;
                }
                this.state = 3494;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 459, this.context) ) {
                case 1:
                    {
                    this.state = 3493;
                    this.orderByClause();
                    }
                    break;
                }
                this.state = 3497;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 460, this.context) ) {
                case 1:
                    {
                    this.state = 3496;
                    this.limitClause();
                    }
                    break;
                }
                this.state = 3500;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 461, this.context) ) {
                case 1:
                    {
                    this.state = 3499;
                    this.lockClause();
                    }
                    break;
                }
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public setOperations(): SetOperationsContext {
        let localContext = new SetOperationsContext(this.context, this.state);
        this.enterRule(localContext, 206, MySqlParser.RULE_setOperations);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3505;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 194) {
                {
                this.state = 3504;
                this.withClause();
                }
            }

            this.state = 3507;
            this.queryExpressionBody(0);
            this.state = 3509;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 125) {
                {
                this.state = 3508;
                this.orderByClause();
                }
            }

            this.state = 3512;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 3511;
                this.limitClause();
                }
            }

            this.state = 3515;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 88) {
                {
                this.state = 3514;
                this.intoClause();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }

    public queryExpressionBody(): QueryExpressionBodyContext;
    public queryExpressionBody(_p: number): QueryExpressionBodyContext;
    public queryExpressionBody(_p?: number): QueryExpressionBodyContext {
        if (_p === undefined) {
            _p = 0;
        }

        let parentContext = this.context;
        let parentState = this.state;
        let localContext = new QueryExpressionBodyContext(this.context, parentState);
        let previousContext = localContext;
        let _startState = 208;
        this.enterRecursionRule(localContext, 208, MySqlParser.RULE_queryExpressionBody, _p);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            {
            this.state = 3518;
            this.queryItem(0);
            }
            this.context!.stop = this.tokenStream.LT(-1);
            this.state = 3534;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 470, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    if (this._parseListeners != null) {
                        this.triggerExitRuleEvent();
                    }
                    previousContext = localContext;
                    {
                    this.state = 3532;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 469, this.context) ) {
                    case 1:
                        {
                        localContext = new QueryExpressionBodyContext(parentContext, parentState);
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_queryExpressionBody);
                        this.state = 3520;
                        if (!(this.precpred(this.context, 2))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 2)");
                        }
                        this.state = 3521;
                        this.match(MySqlParser.KW_UNION);
                        this.state = 3523;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 7 || _la === 49) {
                            {
                            this.state = 3522;
                            _la = this.tokenStream.LA(1);
                            if(!(_la === 7 || _la === 49)) {
                            this.errorHandler.recoverInline(this);
                            }
                            else {
                                this.errorHandler.reportMatch(this);
                                this.consume();
                            }
                            }
                        }

                        this.state = 3525;
                        this.queryItem(0);
                        }
                        break;
                    case 2:
                        {
                        localContext = new QueryExpressionBodyContext(parentContext, parentState);
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_queryExpressionBody);
                        this.state = 3526;
                        if (!(this.precpred(this.context, 1))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 1)");
                        }
                        this.state = 3527;
                        this.match(MySqlParser.KW_EXCEPT);
                        this.state = 3529;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 7 || _la === 49) {
                            {
                            this.state = 3528;
                            _la = this.tokenStream.LA(1);
                            if(!(_la === 7 || _la === 49)) {
                            this.errorHandler.recoverInline(this);
                            }
                            else {
                                this.errorHandler.reportMatch(this);
                                this.consume();
                            }
                            }
                        }

                        this.state = 3531;
                        this.queryItem(0);
                        }
                        break;
                    }
                    }
                }
                this.state = 3536;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 470, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.unrollRecursionContexts(parentContext);
        }
        return localContext;
    }

    public queryItem(): QueryItemContext;
    public queryItem(_p: number): QueryItemContext;
    public queryItem(_p?: number): QueryItemContext {
        if (_p === undefined) {
            _p = 0;
        }

        let parentContext = this.context;
        let parentState = this.state;
        let localContext = new QueryItemContext(this.context, parentState);
        let previousContext = localContext;
        let _startState = 210;
        this.enterRecursionRule(localContext, 210, MySqlParser.RULE_queryItem, _p);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            {
            this.state = 3538;
            this.queryPrimary();
            }
            this.context!.stop = this.tokenStream.LT(-1);
            this.state = 3548;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 472, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    if (this._parseListeners != null) {
                        this.triggerExitRuleEvent();
                    }
                    previousContext = localContext;
                    {
                    {
                    localContext = new QueryItemContext(parentContext, parentState);
                    this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_queryItem);
                    this.state = 3540;
                    if (!(this.precpred(this.context, 1))) {
                        throw this.createFailedPredicateException("this.precpred(this.context, 1)");
                    }
                    this.state = 3541;
                    this.match(MySqlParser.KW_INTERSECT);
                    this.state = 3543;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 7 || _la === 49) {
                        {
                        this.state = 3542;
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 7 || _la === 49)) {
                        this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        }
                    }

                    this.state = 3545;
                    this.queryPrimary();
                    }
                    }
                }
                this.state = 3550;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 472, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.unrollRecursionContexts(parentContext);
        }
        return localContext;
    }
    public queryPrimary(): QueryPrimaryContext {
        let localContext = new QueryPrimaryContext(this.context, this.state);
        this.enterRule(localContext, 212, MySqlParser.RULE_queryPrimary);
        let _la: number;
        try {
            this.state = 3565;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 476, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3551;
                this.queryBlock();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3552;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 3553;
                this.queryExpressionBody(0);
                this.state = 3555;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 125) {
                    {
                    this.state = 3554;
                    this.orderByClause();
                    }
                }

                this.state = 3558;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 3557;
                    this.limitClause();
                    }
                }

                this.state = 3561;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 88) {
                    {
                    this.state = 3560;
                    this.intoClause();
                    }
                }

                this.state = 3563;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public updateStatement(): UpdateStatementContext {
        let localContext = new UpdateStatementContext(this.context, this.state);
        this.enterRule(localContext, 214, MySqlParser.RULE_updateStatement);
        try {
            this.state = 3569;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 477, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3567;
                this.singleUpdateStatement();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3568;
                this.multipleUpdateStatement();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public valuesStatement(): ValuesStatementContext {
        let localContext = new ValuesStatementContext(this.context, this.state);
        this.enterRule(localContext, 216, MySqlParser.RULE_valuesStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3571;
            this.rowValuesList();
            this.state = 3575;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 478, this.context) ) {
            case 1:
                {
                this.state = 3572;
                this.match(MySqlParser.KW_ORDER);
                this.state = 3573;
                this.match(MySqlParser.KW_BY);
                this.state = 3574;
                this.indexColumnName();
                }
                break;
            }
            this.state = 3579;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 479, this.context) ) {
            case 1:
                {
                this.state = 3577;
                this.match(MySqlParser.KW_LIMIT);
                this.state = 3578;
                this.limitClauseAtom();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public parenthesizedQueryExpression(): ParenthesizedQueryExpressionContext {
        let localContext = new ParenthesizedQueryExpressionContext(this.context, this.state);
        this.enterRule(localContext, 218, MySqlParser.RULE_parenthesizedQueryExpression);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3581;
            this.queryBlock();
            this.state = 3586;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 59 || _la === 181 || _la === 828) {
                {
                {
                this.state = 3582;
                _la = this.tokenStream.LA(1);
                if(!(_la === 59 || _la === 181 || _la === 828)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 3583;
                this.queryBlock();
                }
                }
                this.state = 3588;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 3590;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 481, this.context) ) {
            case 1:
                {
                this.state = 3589;
                this.orderByClause();
                }
                break;
            }
            this.state = 3593;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 482, this.context) ) {
            case 1:
                {
                this.state = 3592;
                this.limitClause();
                }
                break;
            }
            this.state = 3596;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 88) {
                {
                this.state = 3595;
                this.intoClause();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public queryBlock(): QueryBlockContext {
        let localContext = new QueryBlockContext(this.context, this.state);
        this.enterRule(localContext, 220, MySqlParser.RULE_queryBlock);
        try {
            this.state = 3601;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_SELECT:
            case MySqlParser.LR_BRACKET:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3598;
                this.selectStatement();
                }
                break;
            case MySqlParser.KW_TABLE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3599;
                this.tableStatement();
                }
                break;
            case MySqlParser.KW_VALUES:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3600;
                this.valuesStatement();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public replaceStatementValuesOrSelectOrTable(): ReplaceStatementValuesOrSelectOrTableContext {
        let localContext = new ReplaceStatementValuesOrSelectOrTableContext(this.context, this.state);
        this.enterRule(localContext, 222, MySqlParser.RULE_replaceStatementValuesOrSelectOrTable);
        try {
            this.state = 3608;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 485, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3603;
                this.selectStatement();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3604;
                this.match(MySqlParser.KW_TABLE);
                this.state = 3605;
                this.tableName();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3606;
                this.valuesOrValueList();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 3607;
                this.rowValuesList();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public rowValuesList(): RowValuesListContext {
        let localContext = new RowValuesListContext(this.context, this.state);
        this.enterRule(localContext, 224, MySqlParser.RULE_rowValuesList);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3610;
            this.match(MySqlParser.KW_VALUES);
            this.state = 3611;
            this.match(MySqlParser.KW_ROW);
            this.state = 3612;
            this.expressionsWithDefaults();
            this.state = 3618;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 486, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 3613;
                    this.match(MySqlParser.COMMA);
                    this.state = 3614;
                    this.match(MySqlParser.KW_ROW);
                    this.state = 3615;
                    this.expressionsWithDefaults();
                    }
                    }
                }
                this.state = 3620;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 486, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public setAssignmentList(): SetAssignmentListContext {
        let localContext = new SetAssignmentListContext(this.context, this.state);
        this.enterRule(localContext, 226, MySqlParser.RULE_setAssignmentList);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3621;
            this.match(MySqlParser.KW_SET);
            this.state = 3622;
            localContext._setFirst = this.updatedElement();
            this.state = 3627;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 3623;
                this.match(MySqlParser.COMMA);
                this.state = 3624;
                localContext._updatedElement = this.updatedElement();
                localContext._setElements.push(localContext._updatedElement);
                }
                }
                this.state = 3629;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public updatedElement(): UpdatedElementContext {
        let localContext = new UpdatedElementContext(this.context, this.state);
        this.enterRule(localContext, 228, MySqlParser.RULE_updatedElement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3630;
            this.columnName();
            this.state = 3631;
            this.match(MySqlParser.EQUAL_SYMBOL);
            this.state = 3632;
            this.expressionOrDefault();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public assignmentField(): AssignmentFieldContext {
        let localContext = new AssignmentFieldContext(this.context, this.state);
        this.enterRule(localContext, 230, MySqlParser.RULE_assignmentField);
        try {
            this.state = 3636;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_ARRAY:
            case MySqlParser.KW_ATTRIBUTE:
            case MySqlParser.KW_BUCKETS:
            case MySqlParser.KW_CONDITION:
            case MySqlParser.KW_CURRENT:
            case MySqlParser.KW_CURRENT_USER:
            case MySqlParser.KW_DATABASE:
            case MySqlParser.KW_DEFAULT:
            case MySqlParser.KW_DIAGNOSTICS:
            case MySqlParser.KW_EMPTY:
            case MySqlParser.KW_ENFORCED:
            case MySqlParser.KW_EXCEPT:
            case MySqlParser.KW_GROUP:
            case MySqlParser.KW_IF:
            case MySqlParser.KW_INSERT:
            case MySqlParser.KW_LATERAL:
            case MySqlParser.KW_LEFT:
            case MySqlParser.KW_NUMBER:
            case MySqlParser.KW_OPTIONAL:
            case MySqlParser.KW_ORDER:
            case MySqlParser.KW_PRIMARY:
            case MySqlParser.KW_REPEAT:
            case MySqlParser.KW_REPLACE:
            case MySqlParser.KW_RIGHT:
            case MySqlParser.KW_SCHEMA:
            case MySqlParser.KW_SKIP_QUERY_REWRITE:
            case MySqlParser.KW_STACKED:
            case MySqlParser.KW_DATE:
            case MySqlParser.KW_TIME:
            case MySqlParser.KW_TIMESTAMP:
            case MySqlParser.KW_DATETIME:
            case MySqlParser.KW_YEAR:
            case MySqlParser.KW_BINARY:
            case MySqlParser.KW_TEXT:
            case MySqlParser.KW_ENUM:
            case MySqlParser.KW_SERIAL:
            case MySqlParser.KW_JSON_TABLE:
            case MySqlParser.KW_JSON_VALUE:
            case MySqlParser.KW_NESTED:
            case MySqlParser.KW_ORDINALITY:
            case MySqlParser.KW_PATH:
            case MySqlParser.KW_AVG:
            case MySqlParser.KW_BIT_AND:
            case MySqlParser.KW_BIT_OR:
            case MySqlParser.KW_BIT_XOR:
            case MySqlParser.KW_COUNT:
            case MySqlParser.KW_CUME_DIST:
            case MySqlParser.KW_DENSE_RANK:
            case MySqlParser.KW_FIRST_VALUE:
            case MySqlParser.KW_GROUP_CONCAT:
            case MySqlParser.KW_LAG:
            case MySqlParser.KW_LAST_VALUE:
            case MySqlParser.KW_LEAD:
            case MySqlParser.KW_MAX:
            case MySqlParser.KW_MIN:
            case MySqlParser.KW_NTILE:
            case MySqlParser.KW_NTH_VALUE:
            case MySqlParser.KW_PERCENT_RANK:
            case MySqlParser.KW_RANK:
            case MySqlParser.KW_ROW_NUMBER:
            case MySqlParser.KW_STD:
            case MySqlParser.KW_STDDEV:
            case MySqlParser.KW_STDDEV_POP:
            case MySqlParser.KW_STDDEV_SAMP:
            case MySqlParser.KW_SUM:
            case MySqlParser.KW_VAR_POP:
            case MySqlParser.KW_VAR_SAMP:
            case MySqlParser.KW_VARIANCE:
            case MySqlParser.KW_CURRENT_DATE:
            case MySqlParser.KW_CURRENT_TIME:
            case MySqlParser.KW_CURRENT_TIMESTAMP:
            case MySqlParser.KW_LOCALTIME:
            case MySqlParser.KW_CURDATE:
            case MySqlParser.KW_CURTIME:
            case MySqlParser.KW_DATE_ADD:
            case MySqlParser.KW_DATE_SUB:
            case MySqlParser.KW_LOCALTIMESTAMP:
            case MySqlParser.KW_NOW:
            case MySqlParser.KW_POSITION:
            case MySqlParser.KW_SUBSTR:
            case MySqlParser.KW_SUBSTRING:
            case MySqlParser.KW_SYSDATE:
            case MySqlParser.KW_TRIM:
            case MySqlParser.KW_UTC_DATE:
            case MySqlParser.KW_UTC_TIME:
            case MySqlParser.KW_UTC_TIMESTAMP:
            case MySqlParser.KW_ACCOUNT:
            case MySqlParser.KW_ACTION:
            case MySqlParser.KW_AFTER:
            case MySqlParser.KW_AGGREGATE:
            case MySqlParser.KW_ALGORITHM:
            case MySqlParser.KW_ANY:
            case MySqlParser.KW_AT:
            case MySqlParser.KW_AUTHORS:
            case MySqlParser.KW_AUTOCOMMIT:
            case MySqlParser.KW_AUTOEXTEND_SIZE:
            case MySqlParser.KW_AUTO_INCREMENT:
            case MySqlParser.KW_AVG_ROW_LENGTH:
            case MySqlParser.KW_BEGIN:
            case MySqlParser.KW_BINLOG:
            case MySqlParser.KW_BIT:
            case MySqlParser.KW_BLOCK:
            case MySqlParser.KW_BOOL:
            case MySqlParser.KW_BOOLEAN:
            case MySqlParser.KW_BTREE:
            case MySqlParser.KW_CACHE:
            case MySqlParser.KW_CASCADED:
            case MySqlParser.KW_CHAIN:
            case MySqlParser.KW_CHANGED:
            case MySqlParser.KW_CHANNEL:
            case MySqlParser.KW_CHECKSUM:
            case MySqlParser.KW_CIPHER:
            case MySqlParser.KW_CLASS_ORIGIN:
            case MySqlParser.KW_CLIENT:
            case MySqlParser.KW_CLOSE:
            case MySqlParser.KW_COALESCE:
            case MySqlParser.KW_CODE:
            case MySqlParser.KW_COLUMNS:
            case MySqlParser.KW_COLUMN_FORMAT:
            case MySqlParser.KW_COLUMN_NAME:
            case MySqlParser.KW_COMMENT:
            case MySqlParser.KW_COMMIT:
            case MySqlParser.KW_COMPACT:
            case MySqlParser.KW_COMPLETION:
            case MySqlParser.KW_COMPRESSED:
            case MySqlParser.KW_COMPRESSION:
            case MySqlParser.KW_CONCURRENT:
            case MySqlParser.KW_CONNECT:
            case MySqlParser.KW_CONNECTION:
            case MySqlParser.KW_CONSISTENT:
            case MySqlParser.KW_CONSTRAINT_CATALOG:
            case MySqlParser.KW_CONSTRAINT_SCHEMA:
            case MySqlParser.KW_CONSTRAINT_NAME:
            case MySqlParser.KW_CONTAINS:
            case MySqlParser.KW_CONTEXT:
            case MySqlParser.KW_CONTRIBUTORS:
            case MySqlParser.KW_COPY:
            case MySqlParser.KW_CPU:
            case MySqlParser.KW_CURSOR_NAME:
            case MySqlParser.KW_DATA:
            case MySqlParser.KW_DATAFILE:
            case MySqlParser.KW_DEALLOCATE:
            case MySqlParser.KW_DEFAULT_AUTH:
            case MySqlParser.KW_DEFINER:
            case MySqlParser.KW_DELAY_KEY_WRITE:
            case MySqlParser.KW_DES_KEY_FILE:
            case MySqlParser.KW_DIRECTORY:
            case MySqlParser.KW_DISABLE:
            case MySqlParser.KW_DISCARD:
            case MySqlParser.KW_DISK:
            case MySqlParser.KW_DO:
            case MySqlParser.KW_DUMPFILE:
            case MySqlParser.KW_DUPLICATE:
            case MySqlParser.KW_DYNAMIC:
            case MySqlParser.KW_ENABLE:
            case MySqlParser.KW_ENCRYPTION:
            case MySqlParser.KW_END:
            case MySqlParser.KW_ENDS:
            case MySqlParser.KW_ENGINE:
            case MySqlParser.KW_ENGINES:
            case MySqlParser.KW_ERROR:
            case MySqlParser.KW_ERRORS:
            case MySqlParser.KW_ESCAPE:
            case MySqlParser.KW_EVENT:
            case MySqlParser.KW_EVENTS:
            case MySqlParser.KW_EVERY:
            case MySqlParser.KW_EXCHANGE:
            case MySqlParser.KW_EXCLUSIVE:
            case MySqlParser.KW_EXPIRE:
            case MySqlParser.KW_EXPORT:
            case MySqlParser.KW_EXTENDED:
            case MySqlParser.KW_EXTENT_SIZE:
            case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
            case MySqlParser.KW_FAST:
            case MySqlParser.KW_FAULTS:
            case MySqlParser.KW_FIELDS:
            case MySqlParser.KW_FILE_BLOCK_SIZE:
            case MySqlParser.KW_FILTER:
            case MySqlParser.KW_FIRST:
            case MySqlParser.KW_FIXED:
            case MySqlParser.KW_FLUSH:
            case MySqlParser.KW_FOLLOWS:
            case MySqlParser.KW_FOUND:
            case MySqlParser.KW_FULL:
            case MySqlParser.KW_FUNCTION:
            case MySqlParser.KW_GENERAL:
            case MySqlParser.KW_GLOBAL:
            case MySqlParser.KW_GRANTS:
            case MySqlParser.KW_GROUP_REPLICATION:
            case MySqlParser.KW_HANDLER:
            case MySqlParser.KW_HASH:
            case MySqlParser.KW_HELP:
            case MySqlParser.KW_HISTORY:
            case MySqlParser.KW_HOST:
            case MySqlParser.KW_HOSTS:
            case MySqlParser.KW_IDENTIFIED:
            case MySqlParser.KW_IGNORE_SERVER_IDS:
            case MySqlParser.KW_IMPORT:
            case MySqlParser.KW_INDEXES:
            case MySqlParser.KW_INITIAL_SIZE:
            case MySqlParser.KW_INPLACE:
            case MySqlParser.KW_INSERT_METHOD:
            case MySqlParser.KW_INSTALL:
            case MySqlParser.KW_INSTANCE:
            case MySqlParser.KW_INSTANT:
            case MySqlParser.KW_INVISIBLE:
            case MySqlParser.KW_INVOKER:
            case MySqlParser.KW_IO:
            case MySqlParser.KW_IO_THREAD:
            case MySqlParser.KW_IPC:
            case MySqlParser.KW_ISOLATION:
            case MySqlParser.KW_ISSUER:
            case MySqlParser.KW_JSON:
            case MySqlParser.KW_KEY_BLOCK_SIZE:
            case MySqlParser.KW_LANGUAGE:
            case MySqlParser.KW_LAST:
            case MySqlParser.KW_LEAVES:
            case MySqlParser.KW_LESS:
            case MySqlParser.KW_LEVEL:
            case MySqlParser.KW_LIST:
            case MySqlParser.KW_LOCAL:
            case MySqlParser.KW_LOGFILE:
            case MySqlParser.KW_LOGS:
            case MySqlParser.KW_MASTER:
            case MySqlParser.KW_MASTER_AUTO_POSITION:
            case MySqlParser.KW_MASTER_CONNECT_RETRY:
            case MySqlParser.KW_MASTER_DELAY:
            case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
            case MySqlParser.KW_MASTER_HOST:
            case MySqlParser.KW_MASTER_LOG_FILE:
            case MySqlParser.KW_MASTER_LOG_POS:
            case MySqlParser.KW_MASTER_PASSWORD:
            case MySqlParser.KW_MASTER_PORT:
            case MySqlParser.KW_MASTER_RETRY_COUNT:
            case MySqlParser.KW_MASTER_SSL:
            case MySqlParser.KW_MASTER_SSL_CA:
            case MySqlParser.KW_MASTER_SSL_CAPATH:
            case MySqlParser.KW_MASTER_SSL_CERT:
            case MySqlParser.KW_MASTER_SSL_CIPHER:
            case MySqlParser.KW_MASTER_SSL_CRL:
            case MySqlParser.KW_MASTER_SSL_CRLPATH:
            case MySqlParser.KW_MASTER_SSL_KEY:
            case MySqlParser.KW_MASTER_TLS_VERSION:
            case MySqlParser.KW_MASTER_USER:
            case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
            case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
            case MySqlParser.KW_MAX_ROWS:
            case MySqlParser.KW_MAX_SIZE:
            case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
            case MySqlParser.KW_MAX_USER_CONNECTIONS:
            case MySqlParser.KW_MEDIUM:
            case MySqlParser.KW_MEMBER:
            case MySqlParser.KW_MERGE:
            case MySqlParser.KW_MESSAGE_TEXT:
            case MySqlParser.KW_MID:
            case MySqlParser.KW_MIGRATE:
            case MySqlParser.KW_MIN_ROWS:
            case MySqlParser.KW_MODE:
            case MySqlParser.KW_MODIFY:
            case MySqlParser.KW_MUTEX:
            case MySqlParser.KW_MYSQL:
            case MySqlParser.KW_MYSQL_ERRNO:
            case MySqlParser.KW_NAME:
            case MySqlParser.KW_NAMES:
            case MySqlParser.KW_NCHAR:
            case MySqlParser.KW_NEVER:
            case MySqlParser.KW_NEXT:
            case MySqlParser.KW_NO:
            case MySqlParser.KW_NOWAIT:
            case MySqlParser.KW_NODEGROUP:
            case MySqlParser.KW_NONE:
            case MySqlParser.KW_ODBC:
            case MySqlParser.KW_OFFLINE:
            case MySqlParser.KW_OFFSET:
            case MySqlParser.KW_OF:
            case MySqlParser.KW_OLD_PASSWORD:
            case MySqlParser.KW_ONE:
            case MySqlParser.KW_ONLINE:
            case MySqlParser.KW_ONLY:
            case MySqlParser.KW_OPEN:
            case MySqlParser.KW_OPTIMIZER_COSTS:
            case MySqlParser.KW_OPTIONS:
            case MySqlParser.KW_OWNER:
            case MySqlParser.KW_PACK_KEYS:
            case MySqlParser.KW_PAGE:
            case MySqlParser.KW_PAGE_CHECKSUM:
            case MySqlParser.KW_PARSER:
            case MySqlParser.KW_PARTIAL:
            case MySqlParser.KW_PARTITIONING:
            case MySqlParser.KW_PARTITIONS:
            case MySqlParser.KW_PASSWORD:
            case MySqlParser.KW_PASSWORD_LOCK_TIME:
            case MySqlParser.KW_PHASE:
            case MySqlParser.KW_PLUGIN:
            case MySqlParser.KW_PLUGIN_DIR:
            case MySqlParser.KW_PLUGINS:
            case MySqlParser.KW_PORT:
            case MySqlParser.KW_PRECEDES:
            case MySqlParser.KW_PREPARE:
            case MySqlParser.KW_PRESERVE:
            case MySqlParser.KW_PREV:
            case MySqlParser.KW_PROCESSLIST:
            case MySqlParser.KW_PROFILE:
            case MySqlParser.KW_PROFILES:
            case MySqlParser.KW_PROXY:
            case MySqlParser.KW_QUERY:
            case MySqlParser.KW_QUICK:
            case MySqlParser.KW_REBUILD:
            case MySqlParser.KW_RECOVER:
            case MySqlParser.KW_RECURSIVE:
            case MySqlParser.KW_REDO_BUFFER_SIZE:
            case MySqlParser.KW_REDUNDANT:
            case MySqlParser.KW_RELAY:
            case MySqlParser.KW_RELAY_LOG_FILE:
            case MySqlParser.KW_RELAY_LOG_POS:
            case MySqlParser.KW_RELAYLOG:
            case MySqlParser.KW_REMOVE:
            case MySqlParser.KW_REORGANIZE:
            case MySqlParser.KW_REPAIR:
            case MySqlParser.KW_REPLICATE_DO_DB:
            case MySqlParser.KW_REPLICATE_DO_TABLE:
            case MySqlParser.KW_REPLICATE_IGNORE_DB:
            case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATE_REWRITE_DB:
            case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
            case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATION:
            case MySqlParser.KW_RESET:
            case MySqlParser.KW_RESUME:
            case MySqlParser.KW_RETURNED_SQLSTATE:
            case MySqlParser.KW_RETURNS:
            case MySqlParser.KW_REUSE:
            case MySqlParser.KW_ROLE:
            case MySqlParser.KW_ROLLBACK:
            case MySqlParser.KW_ROLLUP:
            case MySqlParser.KW_ROTATE:
            case MySqlParser.KW_ROW:
            case MySqlParser.KW_ROWS:
            case MySqlParser.KW_ROW_FORMAT:
            case MySqlParser.KW_SAVEPOINT:
            case MySqlParser.KW_SCHEDULE:
            case MySqlParser.KW_SECURITY:
            case MySqlParser.KW_SERVER:
            case MySqlParser.KW_SESSION:
            case MySqlParser.KW_SHARE:
            case MySqlParser.KW_SHARED:
            case MySqlParser.KW_SIGNED:
            case MySqlParser.KW_SIMPLE:
            case MySqlParser.KW_SLAVE:
            case MySqlParser.KW_SLOW:
            case MySqlParser.KW_SNAPSHOT:
            case MySqlParser.KW_SOCKET:
            case MySqlParser.KW_SOME:
            case MySqlParser.KW_SONAME:
            case MySqlParser.KW_SOUNDS:
            case MySqlParser.KW_SOURCE:
            case MySqlParser.KW_SQL_AFTER_GTIDS:
            case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
            case MySqlParser.KW_SQL_BEFORE_GTIDS:
            case MySqlParser.KW_SQL_BUFFER_RESULT:
            case MySqlParser.KW_SQL_CACHE:
            case MySqlParser.KW_SQL_NO_CACHE:
            case MySqlParser.KW_SQL_THREAD:
            case MySqlParser.KW_START:
            case MySqlParser.KW_STARTS:
            case MySqlParser.KW_STATS_AUTO_RECALC:
            case MySqlParser.KW_STATS_PERSISTENT:
            case MySqlParser.KW_STATS_SAMPLE_PAGES:
            case MySqlParser.KW_STATUS:
            case MySqlParser.KW_STOP:
            case MySqlParser.KW_STORAGE:
            case MySqlParser.KW_STRING:
            case MySqlParser.KW_SUBCLASS_ORIGIN:
            case MySqlParser.KW_SUBJECT:
            case MySqlParser.KW_SUBPARTITION:
            case MySqlParser.KW_SUBPARTITIONS:
            case MySqlParser.KW_SUSPEND:
            case MySqlParser.KW_SWAPS:
            case MySqlParser.KW_SWITCHES:
            case MySqlParser.KW_TABLE_NAME:
            case MySqlParser.KW_TABLESPACE:
            case MySqlParser.KW_TABLE_TYPE:
            case MySqlParser.KW_TEMPORARY:
            case MySqlParser.KW_TEMPTABLE:
            case MySqlParser.KW_THAN:
            case MySqlParser.KW_TRADITIONAL:
            case MySqlParser.KW_TRANSACTION:
            case MySqlParser.KW_TRANSACTIONAL:
            case MySqlParser.KW_TRIGGERS:
            case MySqlParser.KW_TRUNCATE:
            case MySqlParser.KW_UNBOUNDED:
            case MySqlParser.KW_UNDEFINED:
            case MySqlParser.KW_UNDOFILE:
            case MySqlParser.KW_UNDO_BUFFER_SIZE:
            case MySqlParser.KW_UNINSTALL:
            case MySqlParser.KW_UNKNOWN:
            case MySqlParser.KW_UNTIL:
            case MySqlParser.KW_UPGRADE:
            case MySqlParser.KW_USER:
            case MySqlParser.KW_USE_FRM:
            case MySqlParser.KW_USER_RESOURCES:
            case MySqlParser.KW_VALIDATION:
            case MySqlParser.KW_VALUE:
            case MySqlParser.KW_VARIABLES:
            case MySqlParser.KW_VIEW:
            case MySqlParser.KW_VIRTUAL:
            case MySqlParser.KW_VISIBLE:
            case MySqlParser.KW_WAIT:
            case MySqlParser.KW_WARNINGS:
            case MySqlParser.KW_WITHOUT:
            case MySqlParser.KW_WORK:
            case MySqlParser.KW_WRAPPER:
            case MySqlParser.KW_X509:
            case MySqlParser.KW_XA:
            case MySqlParser.KW_XML:
            case MySqlParser.KW_QUARTER:
            case MySqlParser.KW_MONTH:
            case MySqlParser.KW_DAY:
            case MySqlParser.KW_HOUR:
            case MySqlParser.KW_MINUTE:
            case MySqlParser.KW_WEEK:
            case MySqlParser.KW_SECOND:
            case MySqlParser.KW_MICROSECOND:
            case MySqlParser.KW_ADMIN:
            case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
            case MySqlParser.KW_AUDIT_ADMIN:
            case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
            case MySqlParser.KW_BACKUP_ADMIN:
            case MySqlParser.KW_BINLOG_ADMIN:
            case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
            case MySqlParser.KW_CLONE_ADMIN:
            case MySqlParser.KW_CONNECTION_ADMIN:
            case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
            case MySqlParser.KW_EXECUTE:
            case MySqlParser.KW_FILE:
            case MySqlParser.KW_FIREWALL_ADMIN:
            case MySqlParser.KW_FIREWALL_EXEMPT:
            case MySqlParser.KW_FIREWALL_USER:
            case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
            case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
            case MySqlParser.KW_INVOKE:
            case MySqlParser.KW_LAMBDA:
            case MySqlParser.KW_NDB_STORED_USER:
            case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
            case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
            case MySqlParser.KW_PRIVILEGES:
            case MySqlParser.KW_PROCESS:
            case MySqlParser.KW_RELOAD:
            case MySqlParser.KW_REPLICATION_APPLIER:
            case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_USER:
            case MySqlParser.KW_ROLE_ADMIN:
            case MySqlParser.KW_ROUTINE:
            case MySqlParser.KW_S3:
            case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
            case MySqlParser.KW_SET_USER_ID:
            case MySqlParser.KW_SHOW_ROUTINE:
            case MySqlParser.KW_SHUTDOWN:
            case MySqlParser.KW_SUPER:
            case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
            case MySqlParser.KW_TABLES:
            case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
            case MySqlParser.KW_VERSION_TOKEN_ADMIN:
            case MySqlParser.KW_XA_RECOVER_ADMIN:
            case MySqlParser.KW_ARMSCII8:
            case MySqlParser.KW_ASCII:
            case MySqlParser.KW_BIG5:
            case MySqlParser.KW_CP1250:
            case MySqlParser.KW_CP1251:
            case MySqlParser.KW_CP1256:
            case MySqlParser.KW_CP1257:
            case MySqlParser.KW_CP850:
            case MySqlParser.KW_CP852:
            case MySqlParser.KW_CP866:
            case MySqlParser.KW_CP932:
            case MySqlParser.KW_DEC8:
            case MySqlParser.KW_EUCJPMS:
            case MySqlParser.KW_EUCKR:
            case MySqlParser.KW_GB18030:
            case MySqlParser.KW_GB2312:
            case MySqlParser.KW_GBK:
            case MySqlParser.KW_GEOSTD8:
            case MySqlParser.KW_GREEK:
            case MySqlParser.KW_HEBREW:
            case MySqlParser.KW_HP8:
            case MySqlParser.KW_KEYBCS2:
            case MySqlParser.KW_KOI8R:
            case MySqlParser.KW_KOI8U:
            case MySqlParser.KW_LATIN1:
            case MySqlParser.KW_LATIN2:
            case MySqlParser.KW_LATIN5:
            case MySqlParser.KW_LATIN7:
            case MySqlParser.KW_MACCE:
            case MySqlParser.KW_MACROMAN:
            case MySqlParser.KW_SJIS:
            case MySqlParser.KW_SWE7:
            case MySqlParser.KW_TIS620:
            case MySqlParser.KW_UCS2:
            case MySqlParser.KW_UJIS:
            case MySqlParser.KW_UTF16:
            case MySqlParser.KW_UTF16LE:
            case MySqlParser.KW_UTF32:
            case MySqlParser.KW_UTF8:
            case MySqlParser.KW_UTF8MB3:
            case MySqlParser.KW_UTF8MB4:
            case MySqlParser.KW_ARCHIVE:
            case MySqlParser.KW_BLACKHOLE:
            case MySqlParser.KW_CSV:
            case MySqlParser.KW_FEDERATED:
            case MySqlParser.KW_INNODB:
            case MySqlParser.KW_MEMORY:
            case MySqlParser.KW_MRG_MYISAM:
            case MySqlParser.KW_MYISAM:
            case MySqlParser.KW_NDB:
            case MySqlParser.KW_NDBCLUSTER:
            case MySqlParser.KW_PERFORMANCE_SCHEMA:
            case MySqlParser.KW_TOKUDB:
            case MySqlParser.KW_REPEATABLE:
            case MySqlParser.KW_COMMITTED:
            case MySqlParser.KW_UNCOMMITTED:
            case MySqlParser.KW_SERIALIZABLE:
            case MySqlParser.KW_GEOMETRYCOLLECTION:
            case MySqlParser.KW_LINESTRING:
            case MySqlParser.KW_MULTILINESTRING:
            case MySqlParser.KW_MULTIPOINT:
            case MySqlParser.KW_MULTIPOLYGON:
            case MySqlParser.KW_POINT:
            case MySqlParser.KW_POLYGON:
            case MySqlParser.KW_CATALOG_NAME:
            case MySqlParser.KW_CHARSET:
            case MySqlParser.KW_COLLATION:
            case MySqlParser.KW_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_FORMAT:
            case MySqlParser.KW_GET_FORMAT:
            case MySqlParser.KW_RANDOM:
            case MySqlParser.KW_REVERSE:
            case MySqlParser.KW_ROW_COUNT:
            case MySqlParser.KW_SCHEMA_NAME:
            case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_SRID:
            case MySqlParser.KW_SYSTEM_USER:
            case MySqlParser.KW_TP_CONNECTION_ADMIN:
            case MySqlParser.KW_WEIGHT_STRING:
            case MySqlParser.MOD:
            case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
            case MySqlParser.STRING_LITERAL:
            case MySqlParser.ID:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3634;
                localContext._var_name = this.uid();
                }
                break;
            case MySqlParser.LOCAL_ID:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3635;
                this.match(MySqlParser.LOCAL_ID);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public lockClause(): LockClauseContext {
        let localContext = new LockClauseContext(this.context, this.state);
        this.enterRule(localContext, 232, MySqlParser.RULE_lockClause);
        let _la: number;
        try {
            let alternative: number;
            this.state = 3659;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_FOR:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3638;
                this.match(MySqlParser.KW_FOR);
                this.state = 3639;
                _la = this.tokenStream.LA(1);
                if(!(_la === 185 || _la === 594)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 3649;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 490, this.context) ) {
                case 1:
                    {
                    this.state = 3640;
                    this.match(MySqlParser.KW_OF);
                    this.state = 3641;
                    this.tableName();
                    this.state = 3646;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 489, this.context);
                    while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                        if (alternative === 1) {
                            {
                            {
                            this.state = 3642;
                            this.match(MySqlParser.COMMA);
                            this.state = 3643;
                            this.tableName();
                            }
                            }
                        }
                        this.state = 3648;
                        this.errorHandler.sync(this);
                        alternative = this.interpreter.adaptivePredict(this.tokenStream, 489, this.context);
                    }
                    }
                    break;
                }
                this.state = 3653;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 491, this.context) ) {
                case 1:
                    {
                    this.state = 3651;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 159 || _la === 503)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 3652;
                    this.match(MySqlParser.KW_LOCKED);
                    }
                    break;
                }
                }
                break;
            case MySqlParser.KW_LOCK:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3655;
                this.match(MySqlParser.KW_LOCK);
                this.state = 3656;
                this.match(MySqlParser.KW_IN);
                this.state = 3657;
                this.match(MySqlParser.KW_SHARE);
                this.state = 3658;
                this.match(MySqlParser.KW_MODE);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public singleDeleteStatement(): SingleDeleteStatementContext {
        let localContext = new SingleDeleteStatementContext(this.context, this.state);
        this.enterRule(localContext, 234, MySqlParser.RULE_singleDeleteStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3661;
            this.match(MySqlParser.KW_DELETE);
            this.state = 3663;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 107) {
                {
                this.state = 3662;
                localContext._priority = this.match(MySqlParser.KW_LOW_PRIORITY);
                }
            }

            this.state = 3666;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 549) {
                {
                this.state = 3665;
                this.match(MySqlParser.KW_QUICK);
                }
            }

            this.state = 3669;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 79) {
                {
                this.state = 3668;
                this.match(MySqlParser.KW_IGNORE);
                }
            }

            this.state = 3671;
            this.match(MySqlParser.KW_FROM);
            this.state = 3672;
            this.tableName();
            this.state = 3677;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 497, this.context) ) {
            case 1:
                {
                this.state = 3674;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 13) {
                    {
                    this.state = 3673;
                    this.match(MySqlParser.KW_AS);
                    }
                }

                this.state = 3676;
                localContext._table_alias = this.uid();
                }
                break;
            }
            this.state = 3684;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 130) {
                {
                this.state = 3679;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 3680;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 3681;
                this.partitionNames();
                this.state = 3682;
                this.match(MySqlParser.RR_BRACKET);
                }
            }

            this.state = 3688;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 192) {
                {
                this.state = 3686;
                this.match(MySqlParser.KW_WHERE);
                this.state = 3687;
                this.expression(0);
                }
            }

            this.state = 3691;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 125) {
                {
                this.state = 3690;
                this.orderByClause();
                }
            }

            this.state = 3695;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 3693;
                this.match(MySqlParser.KW_LIMIT);
                this.state = 3694;
                this.limitClauseAtom();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public multipleDeleteStatement(): MultipleDeleteStatementContext {
        let localContext = new MultipleDeleteStatementContext(this.context, this.state);
        this.enterRule(localContext, 236, MySqlParser.RULE_multipleDeleteStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3697;
            this.match(MySqlParser.KW_DELETE);
            this.state = 3699;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 107) {
                {
                this.state = 3698;
                localContext._priority = this.match(MySqlParser.KW_LOW_PRIORITY);
                }
            }

            this.state = 3702;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 503, this.context) ) {
            case 1:
                {
                this.state = 3701;
                this.match(MySqlParser.KW_QUICK);
                }
                break;
            }
            this.state = 3705;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 79) {
                {
                this.state = 3704;
                this.match(MySqlParser.KW_IGNORE);
                }
            }

            this.state = 3746;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_ARRAY:
            case MySqlParser.KW_ATTRIBUTE:
            case MySqlParser.KW_BUCKETS:
            case MySqlParser.KW_CONDITION:
            case MySqlParser.KW_CURRENT:
            case MySqlParser.KW_CURRENT_USER:
            case MySqlParser.KW_DATABASE:
            case MySqlParser.KW_DEFAULT:
            case MySqlParser.KW_DIAGNOSTICS:
            case MySqlParser.KW_EMPTY:
            case MySqlParser.KW_ENFORCED:
            case MySqlParser.KW_EXCEPT:
            case MySqlParser.KW_GROUP:
            case MySqlParser.KW_IF:
            case MySqlParser.KW_INSERT:
            case MySqlParser.KW_LATERAL:
            case MySqlParser.KW_LEFT:
            case MySqlParser.KW_NUMBER:
            case MySqlParser.KW_OPTIONAL:
            case MySqlParser.KW_ORDER:
            case MySqlParser.KW_PRIMARY:
            case MySqlParser.KW_REPEAT:
            case MySqlParser.KW_REPLACE:
            case MySqlParser.KW_RIGHT:
            case MySqlParser.KW_SCHEMA:
            case MySqlParser.KW_SKIP_QUERY_REWRITE:
            case MySqlParser.KW_STACKED:
            case MySqlParser.KW_DATE:
            case MySqlParser.KW_TIME:
            case MySqlParser.KW_TIMESTAMP:
            case MySqlParser.KW_DATETIME:
            case MySqlParser.KW_YEAR:
            case MySqlParser.KW_BINARY:
            case MySqlParser.KW_TEXT:
            case MySqlParser.KW_ENUM:
            case MySqlParser.KW_SERIAL:
            case MySqlParser.KW_JSON_TABLE:
            case MySqlParser.KW_JSON_VALUE:
            case MySqlParser.KW_NESTED:
            case MySqlParser.KW_ORDINALITY:
            case MySqlParser.KW_PATH:
            case MySqlParser.KW_AVG:
            case MySqlParser.KW_BIT_AND:
            case MySqlParser.KW_BIT_OR:
            case MySqlParser.KW_BIT_XOR:
            case MySqlParser.KW_COUNT:
            case MySqlParser.KW_CUME_DIST:
            case MySqlParser.KW_DENSE_RANK:
            case MySqlParser.KW_FIRST_VALUE:
            case MySqlParser.KW_GROUP_CONCAT:
            case MySqlParser.KW_LAG:
            case MySqlParser.KW_LAST_VALUE:
            case MySqlParser.KW_LEAD:
            case MySqlParser.KW_MAX:
            case MySqlParser.KW_MIN:
            case MySqlParser.KW_NTILE:
            case MySqlParser.KW_NTH_VALUE:
            case MySqlParser.KW_PERCENT_RANK:
            case MySqlParser.KW_RANK:
            case MySqlParser.KW_ROW_NUMBER:
            case MySqlParser.KW_STD:
            case MySqlParser.KW_STDDEV:
            case MySqlParser.KW_STDDEV_POP:
            case MySqlParser.KW_STDDEV_SAMP:
            case MySqlParser.KW_SUM:
            case MySqlParser.KW_VAR_POP:
            case MySqlParser.KW_VAR_SAMP:
            case MySqlParser.KW_VARIANCE:
            case MySqlParser.KW_CURRENT_DATE:
            case MySqlParser.KW_CURRENT_TIME:
            case MySqlParser.KW_CURRENT_TIMESTAMP:
            case MySqlParser.KW_LOCALTIME:
            case MySqlParser.KW_CURDATE:
            case MySqlParser.KW_CURTIME:
            case MySqlParser.KW_DATE_ADD:
            case MySqlParser.KW_DATE_SUB:
            case MySqlParser.KW_LOCALTIMESTAMP:
            case MySqlParser.KW_NOW:
            case MySqlParser.KW_POSITION:
            case MySqlParser.KW_SUBSTR:
            case MySqlParser.KW_SUBSTRING:
            case MySqlParser.KW_SYSDATE:
            case MySqlParser.KW_TRIM:
            case MySqlParser.KW_UTC_DATE:
            case MySqlParser.KW_UTC_TIME:
            case MySqlParser.KW_UTC_TIMESTAMP:
            case MySqlParser.KW_ACCOUNT:
            case MySqlParser.KW_ACTION:
            case MySqlParser.KW_AFTER:
            case MySqlParser.KW_AGGREGATE:
            case MySqlParser.KW_ALGORITHM:
            case MySqlParser.KW_ANY:
            case MySqlParser.KW_AT:
            case MySqlParser.KW_AUTHORS:
            case MySqlParser.KW_AUTOCOMMIT:
            case MySqlParser.KW_AUTOEXTEND_SIZE:
            case MySqlParser.KW_AUTO_INCREMENT:
            case MySqlParser.KW_AVG_ROW_LENGTH:
            case MySqlParser.KW_BEGIN:
            case MySqlParser.KW_BINLOG:
            case MySqlParser.KW_BIT:
            case MySqlParser.KW_BLOCK:
            case MySqlParser.KW_BOOL:
            case MySqlParser.KW_BOOLEAN:
            case MySqlParser.KW_BTREE:
            case MySqlParser.KW_CACHE:
            case MySqlParser.KW_CASCADED:
            case MySqlParser.KW_CHAIN:
            case MySqlParser.KW_CHANGED:
            case MySqlParser.KW_CHANNEL:
            case MySqlParser.KW_CHECKSUM:
            case MySqlParser.KW_CIPHER:
            case MySqlParser.KW_CLASS_ORIGIN:
            case MySqlParser.KW_CLIENT:
            case MySqlParser.KW_CLOSE:
            case MySqlParser.KW_COALESCE:
            case MySqlParser.KW_CODE:
            case MySqlParser.KW_COLUMNS:
            case MySqlParser.KW_COLUMN_FORMAT:
            case MySqlParser.KW_COLUMN_NAME:
            case MySqlParser.KW_COMMENT:
            case MySqlParser.KW_COMMIT:
            case MySqlParser.KW_COMPACT:
            case MySqlParser.KW_COMPLETION:
            case MySqlParser.KW_COMPRESSED:
            case MySqlParser.KW_COMPRESSION:
            case MySqlParser.KW_CONCURRENT:
            case MySqlParser.KW_CONNECT:
            case MySqlParser.KW_CONNECTION:
            case MySqlParser.KW_CONSISTENT:
            case MySqlParser.KW_CONSTRAINT_CATALOG:
            case MySqlParser.KW_CONSTRAINT_SCHEMA:
            case MySqlParser.KW_CONSTRAINT_NAME:
            case MySqlParser.KW_CONTAINS:
            case MySqlParser.KW_CONTEXT:
            case MySqlParser.KW_CONTRIBUTORS:
            case MySqlParser.KW_COPY:
            case MySqlParser.KW_CPU:
            case MySqlParser.KW_CURSOR_NAME:
            case MySqlParser.KW_DATA:
            case MySqlParser.KW_DATAFILE:
            case MySqlParser.KW_DEALLOCATE:
            case MySqlParser.KW_DEFAULT_AUTH:
            case MySqlParser.KW_DEFINER:
            case MySqlParser.KW_DELAY_KEY_WRITE:
            case MySqlParser.KW_DES_KEY_FILE:
            case MySqlParser.KW_DIRECTORY:
            case MySqlParser.KW_DISABLE:
            case MySqlParser.KW_DISCARD:
            case MySqlParser.KW_DISK:
            case MySqlParser.KW_DO:
            case MySqlParser.KW_DUMPFILE:
            case MySqlParser.KW_DUPLICATE:
            case MySqlParser.KW_DYNAMIC:
            case MySqlParser.KW_ENABLE:
            case MySqlParser.KW_ENCRYPTION:
            case MySqlParser.KW_END:
            case MySqlParser.KW_ENDS:
            case MySqlParser.KW_ENGINE:
            case MySqlParser.KW_ENGINES:
            case MySqlParser.KW_ERROR:
            case MySqlParser.KW_ERRORS:
            case MySqlParser.KW_ESCAPE:
            case MySqlParser.KW_EVENT:
            case MySqlParser.KW_EVENTS:
            case MySqlParser.KW_EVERY:
            case MySqlParser.KW_EXCHANGE:
            case MySqlParser.KW_EXCLUSIVE:
            case MySqlParser.KW_EXPIRE:
            case MySqlParser.KW_EXPORT:
            case MySqlParser.KW_EXTENDED:
            case MySqlParser.KW_EXTENT_SIZE:
            case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
            case MySqlParser.KW_FAST:
            case MySqlParser.KW_FAULTS:
            case MySqlParser.KW_FIELDS:
            case MySqlParser.KW_FILE_BLOCK_SIZE:
            case MySqlParser.KW_FILTER:
            case MySqlParser.KW_FIRST:
            case MySqlParser.KW_FIXED:
            case MySqlParser.KW_FLUSH:
            case MySqlParser.KW_FOLLOWS:
            case MySqlParser.KW_FOUND:
            case MySqlParser.KW_FULL:
            case MySqlParser.KW_FUNCTION:
            case MySqlParser.KW_GENERAL:
            case MySqlParser.KW_GLOBAL:
            case MySqlParser.KW_GRANTS:
            case MySqlParser.KW_GROUP_REPLICATION:
            case MySqlParser.KW_HANDLER:
            case MySqlParser.KW_HASH:
            case MySqlParser.KW_HELP:
            case MySqlParser.KW_HISTORY:
            case MySqlParser.KW_HOST:
            case MySqlParser.KW_HOSTS:
            case MySqlParser.KW_IDENTIFIED:
            case MySqlParser.KW_IGNORE_SERVER_IDS:
            case MySqlParser.KW_IMPORT:
            case MySqlParser.KW_INDEXES:
            case MySqlParser.KW_INITIAL_SIZE:
            case MySqlParser.KW_INPLACE:
            case MySqlParser.KW_INSERT_METHOD:
            case MySqlParser.KW_INSTALL:
            case MySqlParser.KW_INSTANCE:
            case MySqlParser.KW_INSTANT:
            case MySqlParser.KW_INVISIBLE:
            case MySqlParser.KW_INVOKER:
            case MySqlParser.KW_IO:
            case MySqlParser.KW_IO_THREAD:
            case MySqlParser.KW_IPC:
            case MySqlParser.KW_ISOLATION:
            case MySqlParser.KW_ISSUER:
            case MySqlParser.KW_JSON:
            case MySqlParser.KW_KEY_BLOCK_SIZE:
            case MySqlParser.KW_LANGUAGE:
            case MySqlParser.KW_LAST:
            case MySqlParser.KW_LEAVES:
            case MySqlParser.KW_LESS:
            case MySqlParser.KW_LEVEL:
            case MySqlParser.KW_LIST:
            case MySqlParser.KW_LOCAL:
            case MySqlParser.KW_LOGFILE:
            case MySqlParser.KW_LOGS:
            case MySqlParser.KW_MASTER:
            case MySqlParser.KW_MASTER_AUTO_POSITION:
            case MySqlParser.KW_MASTER_CONNECT_RETRY:
            case MySqlParser.KW_MASTER_DELAY:
            case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
            case MySqlParser.KW_MASTER_HOST:
            case MySqlParser.KW_MASTER_LOG_FILE:
            case MySqlParser.KW_MASTER_LOG_POS:
            case MySqlParser.KW_MASTER_PASSWORD:
            case MySqlParser.KW_MASTER_PORT:
            case MySqlParser.KW_MASTER_RETRY_COUNT:
            case MySqlParser.KW_MASTER_SSL:
            case MySqlParser.KW_MASTER_SSL_CA:
            case MySqlParser.KW_MASTER_SSL_CAPATH:
            case MySqlParser.KW_MASTER_SSL_CERT:
            case MySqlParser.KW_MASTER_SSL_CIPHER:
            case MySqlParser.KW_MASTER_SSL_CRL:
            case MySqlParser.KW_MASTER_SSL_CRLPATH:
            case MySqlParser.KW_MASTER_SSL_KEY:
            case MySqlParser.KW_MASTER_TLS_VERSION:
            case MySqlParser.KW_MASTER_USER:
            case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
            case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
            case MySqlParser.KW_MAX_ROWS:
            case MySqlParser.KW_MAX_SIZE:
            case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
            case MySqlParser.KW_MAX_USER_CONNECTIONS:
            case MySqlParser.KW_MEDIUM:
            case MySqlParser.KW_MEMBER:
            case MySqlParser.KW_MERGE:
            case MySqlParser.KW_MESSAGE_TEXT:
            case MySqlParser.KW_MID:
            case MySqlParser.KW_MIGRATE:
            case MySqlParser.KW_MIN_ROWS:
            case MySqlParser.KW_MODE:
            case MySqlParser.KW_MODIFY:
            case MySqlParser.KW_MUTEX:
            case MySqlParser.KW_MYSQL:
            case MySqlParser.KW_MYSQL_ERRNO:
            case MySqlParser.KW_NAME:
            case MySqlParser.KW_NAMES:
            case MySqlParser.KW_NCHAR:
            case MySqlParser.KW_NEVER:
            case MySqlParser.KW_NEXT:
            case MySqlParser.KW_NO:
            case MySqlParser.KW_NOWAIT:
            case MySqlParser.KW_NODEGROUP:
            case MySqlParser.KW_NONE:
            case MySqlParser.KW_ODBC:
            case MySqlParser.KW_OFFLINE:
            case MySqlParser.KW_OFFSET:
            case MySqlParser.KW_OF:
            case MySqlParser.KW_OLD_PASSWORD:
            case MySqlParser.KW_ONE:
            case MySqlParser.KW_ONLINE:
            case MySqlParser.KW_ONLY:
            case MySqlParser.KW_OPEN:
            case MySqlParser.KW_OPTIMIZER_COSTS:
            case MySqlParser.KW_OPTIONS:
            case MySqlParser.KW_OWNER:
            case MySqlParser.KW_PACK_KEYS:
            case MySqlParser.KW_PAGE:
            case MySqlParser.KW_PAGE_CHECKSUM:
            case MySqlParser.KW_PARSER:
            case MySqlParser.KW_PARTIAL:
            case MySqlParser.KW_PARTITIONING:
            case MySqlParser.KW_PARTITIONS:
            case MySqlParser.KW_PASSWORD:
            case MySqlParser.KW_PASSWORD_LOCK_TIME:
            case MySqlParser.KW_PHASE:
            case MySqlParser.KW_PLUGIN:
            case MySqlParser.KW_PLUGIN_DIR:
            case MySqlParser.KW_PLUGINS:
            case MySqlParser.KW_PORT:
            case MySqlParser.KW_PRECEDES:
            case MySqlParser.KW_PREPARE:
            case MySqlParser.KW_PRESERVE:
            case MySqlParser.KW_PREV:
            case MySqlParser.KW_PROCESSLIST:
            case MySqlParser.KW_PROFILE:
            case MySqlParser.KW_PROFILES:
            case MySqlParser.KW_PROXY:
            case MySqlParser.KW_QUERY:
            case MySqlParser.KW_QUICK:
            case MySqlParser.KW_REBUILD:
            case MySqlParser.KW_RECOVER:
            case MySqlParser.KW_RECURSIVE:
            case MySqlParser.KW_REDO_BUFFER_SIZE:
            case MySqlParser.KW_REDUNDANT:
            case MySqlParser.KW_RELAY:
            case MySqlParser.KW_RELAY_LOG_FILE:
            case MySqlParser.KW_RELAY_LOG_POS:
            case MySqlParser.KW_RELAYLOG:
            case MySqlParser.KW_REMOVE:
            case MySqlParser.KW_REORGANIZE:
            case MySqlParser.KW_REPAIR:
            case MySqlParser.KW_REPLICATE_DO_DB:
            case MySqlParser.KW_REPLICATE_DO_TABLE:
            case MySqlParser.KW_REPLICATE_IGNORE_DB:
            case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATE_REWRITE_DB:
            case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
            case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATION:
            case MySqlParser.KW_RESET:
            case MySqlParser.KW_RESUME:
            case MySqlParser.KW_RETURNED_SQLSTATE:
            case MySqlParser.KW_RETURNS:
            case MySqlParser.KW_REUSE:
            case MySqlParser.KW_ROLE:
            case MySqlParser.KW_ROLLBACK:
            case MySqlParser.KW_ROLLUP:
            case MySqlParser.KW_ROTATE:
            case MySqlParser.KW_ROW:
            case MySqlParser.KW_ROWS:
            case MySqlParser.KW_ROW_FORMAT:
            case MySqlParser.KW_SAVEPOINT:
            case MySqlParser.KW_SCHEDULE:
            case MySqlParser.KW_SECURITY:
            case MySqlParser.KW_SERVER:
            case MySqlParser.KW_SESSION:
            case MySqlParser.KW_SHARE:
            case MySqlParser.KW_SHARED:
            case MySqlParser.KW_SIGNED:
            case MySqlParser.KW_SIMPLE:
            case MySqlParser.KW_SLAVE:
            case MySqlParser.KW_SLOW:
            case MySqlParser.KW_SNAPSHOT:
            case MySqlParser.KW_SOCKET:
            case MySqlParser.KW_SOME:
            case MySqlParser.KW_SONAME:
            case MySqlParser.KW_SOUNDS:
            case MySqlParser.KW_SOURCE:
            case MySqlParser.KW_SQL_AFTER_GTIDS:
            case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
            case MySqlParser.KW_SQL_BEFORE_GTIDS:
            case MySqlParser.KW_SQL_BUFFER_RESULT:
            case MySqlParser.KW_SQL_CACHE:
            case MySqlParser.KW_SQL_NO_CACHE:
            case MySqlParser.KW_SQL_THREAD:
            case MySqlParser.KW_START:
            case MySqlParser.KW_STARTS:
            case MySqlParser.KW_STATS_AUTO_RECALC:
            case MySqlParser.KW_STATS_PERSISTENT:
            case MySqlParser.KW_STATS_SAMPLE_PAGES:
            case MySqlParser.KW_STATUS:
            case MySqlParser.KW_STOP:
            case MySqlParser.KW_STORAGE:
            case MySqlParser.KW_STRING:
            case MySqlParser.KW_SUBCLASS_ORIGIN:
            case MySqlParser.KW_SUBJECT:
            case MySqlParser.KW_SUBPARTITION:
            case MySqlParser.KW_SUBPARTITIONS:
            case MySqlParser.KW_SUSPEND:
            case MySqlParser.KW_SWAPS:
            case MySqlParser.KW_SWITCHES:
            case MySqlParser.KW_TABLE_NAME:
            case MySqlParser.KW_TABLESPACE:
            case MySqlParser.KW_TABLE_TYPE:
            case MySqlParser.KW_TEMPORARY:
            case MySqlParser.KW_TEMPTABLE:
            case MySqlParser.KW_THAN:
            case MySqlParser.KW_TRADITIONAL:
            case MySqlParser.KW_TRANSACTION:
            case MySqlParser.KW_TRANSACTIONAL:
            case MySqlParser.KW_TRIGGERS:
            case MySqlParser.KW_TRUNCATE:
            case MySqlParser.KW_UNBOUNDED:
            case MySqlParser.KW_UNDEFINED:
            case MySqlParser.KW_UNDOFILE:
            case MySqlParser.KW_UNDO_BUFFER_SIZE:
            case MySqlParser.KW_UNINSTALL:
            case MySqlParser.KW_UNKNOWN:
            case MySqlParser.KW_UNTIL:
            case MySqlParser.KW_UPGRADE:
            case MySqlParser.KW_USER:
            case MySqlParser.KW_USE_FRM:
            case MySqlParser.KW_USER_RESOURCES:
            case MySqlParser.KW_VALIDATION:
            case MySqlParser.KW_VALUE:
            case MySqlParser.KW_VARIABLES:
            case MySqlParser.KW_VIEW:
            case MySqlParser.KW_VIRTUAL:
            case MySqlParser.KW_VISIBLE:
            case MySqlParser.KW_WAIT:
            case MySqlParser.KW_WARNINGS:
            case MySqlParser.KW_WITHOUT:
            case MySqlParser.KW_WORK:
            case MySqlParser.KW_WRAPPER:
            case MySqlParser.KW_X509:
            case MySqlParser.KW_XA:
            case MySqlParser.KW_XML:
            case MySqlParser.KW_QUARTER:
            case MySqlParser.KW_MONTH:
            case MySqlParser.KW_DAY:
            case MySqlParser.KW_HOUR:
            case MySqlParser.KW_MINUTE:
            case MySqlParser.KW_WEEK:
            case MySqlParser.KW_SECOND:
            case MySqlParser.KW_MICROSECOND:
            case MySqlParser.KW_ADMIN:
            case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
            case MySqlParser.KW_AUDIT_ADMIN:
            case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
            case MySqlParser.KW_BACKUP_ADMIN:
            case MySqlParser.KW_BINLOG_ADMIN:
            case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
            case MySqlParser.KW_CLONE_ADMIN:
            case MySqlParser.KW_CONNECTION_ADMIN:
            case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
            case MySqlParser.KW_EXECUTE:
            case MySqlParser.KW_FILE:
            case MySqlParser.KW_FIREWALL_ADMIN:
            case MySqlParser.KW_FIREWALL_EXEMPT:
            case MySqlParser.KW_FIREWALL_USER:
            case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
            case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
            case MySqlParser.KW_INVOKE:
            case MySqlParser.KW_LAMBDA:
            case MySqlParser.KW_NDB_STORED_USER:
            case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
            case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
            case MySqlParser.KW_PRIVILEGES:
            case MySqlParser.KW_PROCESS:
            case MySqlParser.KW_RELOAD:
            case MySqlParser.KW_REPLICATION_APPLIER:
            case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_USER:
            case MySqlParser.KW_ROLE_ADMIN:
            case MySqlParser.KW_ROUTINE:
            case MySqlParser.KW_S3:
            case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
            case MySqlParser.KW_SET_USER_ID:
            case MySqlParser.KW_SHOW_ROUTINE:
            case MySqlParser.KW_SHUTDOWN:
            case MySqlParser.KW_SUPER:
            case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
            case MySqlParser.KW_TABLES:
            case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
            case MySqlParser.KW_VERSION_TOKEN_ADMIN:
            case MySqlParser.KW_XA_RECOVER_ADMIN:
            case MySqlParser.KW_ARMSCII8:
            case MySqlParser.KW_ASCII:
            case MySqlParser.KW_BIG5:
            case MySqlParser.KW_CP1250:
            case MySqlParser.KW_CP1251:
            case MySqlParser.KW_CP1256:
            case MySqlParser.KW_CP1257:
            case MySqlParser.KW_CP850:
            case MySqlParser.KW_CP852:
            case MySqlParser.KW_CP866:
            case MySqlParser.KW_CP932:
            case MySqlParser.KW_DEC8:
            case MySqlParser.KW_EUCJPMS:
            case MySqlParser.KW_EUCKR:
            case MySqlParser.KW_GB18030:
            case MySqlParser.KW_GB2312:
            case MySqlParser.KW_GBK:
            case MySqlParser.KW_GEOSTD8:
            case MySqlParser.KW_GREEK:
            case MySqlParser.KW_HEBREW:
            case MySqlParser.KW_HP8:
            case MySqlParser.KW_KEYBCS2:
            case MySqlParser.KW_KOI8R:
            case MySqlParser.KW_KOI8U:
            case MySqlParser.KW_LATIN1:
            case MySqlParser.KW_LATIN2:
            case MySqlParser.KW_LATIN5:
            case MySqlParser.KW_LATIN7:
            case MySqlParser.KW_MACCE:
            case MySqlParser.KW_MACROMAN:
            case MySqlParser.KW_SJIS:
            case MySqlParser.KW_SWE7:
            case MySqlParser.KW_TIS620:
            case MySqlParser.KW_UCS2:
            case MySqlParser.KW_UJIS:
            case MySqlParser.KW_UTF16:
            case MySqlParser.KW_UTF16LE:
            case MySqlParser.KW_UTF32:
            case MySqlParser.KW_UTF8:
            case MySqlParser.KW_UTF8MB3:
            case MySqlParser.KW_UTF8MB4:
            case MySqlParser.KW_ARCHIVE:
            case MySqlParser.KW_BLACKHOLE:
            case MySqlParser.KW_CSV:
            case MySqlParser.KW_FEDERATED:
            case MySqlParser.KW_INNODB:
            case MySqlParser.KW_MEMORY:
            case MySqlParser.KW_MRG_MYISAM:
            case MySqlParser.KW_MYISAM:
            case MySqlParser.KW_NDB:
            case MySqlParser.KW_NDBCLUSTER:
            case MySqlParser.KW_PERFORMANCE_SCHEMA:
            case MySqlParser.KW_TOKUDB:
            case MySqlParser.KW_REPEATABLE:
            case MySqlParser.KW_COMMITTED:
            case MySqlParser.KW_UNCOMMITTED:
            case MySqlParser.KW_SERIALIZABLE:
            case MySqlParser.KW_GEOMETRYCOLLECTION:
            case MySqlParser.KW_LINESTRING:
            case MySqlParser.KW_MULTILINESTRING:
            case MySqlParser.KW_MULTIPOINT:
            case MySqlParser.KW_MULTIPOLYGON:
            case MySqlParser.KW_POINT:
            case MySqlParser.KW_POLYGON:
            case MySqlParser.KW_CATALOG_NAME:
            case MySqlParser.KW_CHARSET:
            case MySqlParser.KW_COLLATION:
            case MySqlParser.KW_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_FORMAT:
            case MySqlParser.KW_GET_FORMAT:
            case MySqlParser.KW_RANDOM:
            case MySqlParser.KW_REVERSE:
            case MySqlParser.KW_ROW_COUNT:
            case MySqlParser.KW_SCHEMA_NAME:
            case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_SRID:
            case MySqlParser.KW_SYSTEM_USER:
            case MySqlParser.KW_TP_CONNECTION_ADMIN:
            case MySqlParser.KW_WEIGHT_STRING:
            case MySqlParser.MOD:
            case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
            case MySqlParser.STRING_LITERAL:
            case MySqlParser.ID:
                {
                this.state = 3707;
                this.tableName();
                this.state = 3710;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 865) {
                    {
                    this.state = 3708;
                    this.match(MySqlParser.DOT);
                    this.state = 3709;
                    this.match(MySqlParser.STAR);
                    }
                }

                this.state = 3720;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 3712;
                    this.match(MySqlParser.COMMA);
                    this.state = 3713;
                    this.tableName();
                    this.state = 3716;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 865) {
                        {
                        this.state = 3714;
                        this.match(MySqlParser.DOT);
                        this.state = 3715;
                        this.match(MySqlParser.STAR);
                        }
                    }

                    }
                    }
                    this.state = 3722;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 3723;
                this.match(MySqlParser.KW_FROM);
                this.state = 3724;
                this.tableSources();
                }
                break;
            case MySqlParser.KW_FROM:
                {
                this.state = 3726;
                this.match(MySqlParser.KW_FROM);
                this.state = 3727;
                this.tableName();
                this.state = 3730;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 865) {
                    {
                    this.state = 3728;
                    this.match(MySqlParser.DOT);
                    this.state = 3729;
                    this.match(MySqlParser.STAR);
                    }
                }

                this.state = 3740;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 3732;
                    this.match(MySqlParser.COMMA);
                    this.state = 3733;
                    this.tableName();
                    this.state = 3736;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 865) {
                        {
                        this.state = 3734;
                        this.match(MySqlParser.DOT);
                        this.state = 3735;
                        this.match(MySqlParser.STAR);
                        }
                    }

                    }
                    }
                    this.state = 3742;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 3743;
                this.match(MySqlParser.KW_USING);
                this.state = 3744;
                this.tableSources();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 3750;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 192) {
                {
                this.state = 3748;
                this.match(MySqlParser.KW_WHERE);
                this.state = 3749;
                this.expression(0);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public handlerOpenStatement(): HandlerOpenStatementContext {
        let localContext = new HandlerOpenStatementContext(this.context, this.state);
        this.enterRule(localContext, 238, MySqlParser.RULE_handlerOpenStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3752;
            this.match(MySqlParser.KW_HANDLER);
            this.state = 3753;
            this.tableName();
            this.state = 3754;
            this.match(MySqlParser.KW_OPEN);
            this.state = 3759;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 514, this.context) ) {
            case 1:
                {
                this.state = 3756;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 13) {
                    {
                    this.state = 3755;
                    this.match(MySqlParser.KW_AS);
                    }
                }

                this.state = 3758;
                localContext._table_alias = this.uid();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public handlerReadIndexStatement(): HandlerReadIndexStatementContext {
        let localContext = new HandlerReadIndexStatementContext(this.context, this.state);
        this.enterRule(localContext, 240, MySqlParser.RULE_handlerReadIndexStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3761;
            this.match(MySqlParser.KW_HANDLER);
            this.state = 3762;
            this.tableName();
            this.state = 3763;
            this.match(MySqlParser.KW_READ);
            this.state = 3764;
            this.indexName();
            this.state = 3771;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.EQUAL_SYMBOL:
            case MySqlParser.GREATER_SYMBOL:
            case MySqlParser.LESS_SYMBOL:
                {
                this.state = 3765;
                this.comparisonBase();
                this.state = 3766;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 3767;
                this.constants();
                this.state = 3768;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case MySqlParser.KW_FIRST:
            case MySqlParser.KW_LAST:
            case MySqlParser.KW_NEXT:
            case MySqlParser.KW_PREV:
                {
                this.state = 3770;
                localContext._moveOrder = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 402 || _la === 445 || _la === 501 || _la === 542)) {
                    localContext._moveOrder = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 3775;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 192) {
                {
                this.state = 3773;
                this.match(MySqlParser.KW_WHERE);
                this.state = 3774;
                this.expression(0);
                }
            }

            this.state = 3779;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 3777;
                this.match(MySqlParser.KW_LIMIT);
                this.state = 3778;
                this.limitClauseAtom();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public handlerReadStatement(): HandlerReadStatementContext {
        let localContext = new HandlerReadStatementContext(this.context, this.state);
        this.enterRule(localContext, 242, MySqlParser.RULE_handlerReadStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3781;
            this.match(MySqlParser.KW_HANDLER);
            this.state = 3782;
            this.tableName();
            this.state = 3783;
            this.match(MySqlParser.KW_READ);
            this.state = 3784;
            localContext._moveOrder = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 402 || _la === 501)) {
                localContext._moveOrder = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 3787;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 192) {
                {
                this.state = 3785;
                this.match(MySqlParser.KW_WHERE);
                this.state = 3786;
                this.expression(0);
                }
            }

            this.state = 3791;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 3789;
                this.match(MySqlParser.KW_LIMIT);
                this.state = 3790;
                this.limitClauseAtom();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public handlerCloseStatement(): HandlerCloseStatementContext {
        let localContext = new HandlerCloseStatementContext(this.context, this.state);
        this.enterRule(localContext, 244, MySqlParser.RULE_handlerCloseStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3793;
            this.match(MySqlParser.KW_HANDLER);
            this.state = 3794;
            this.tableName();
            this.state = 3795;
            this.match(MySqlParser.KW_CLOSE);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public importTableStatement(): ImportTableStatementContext {
        let localContext = new ImportTableStatementContext(this.context, this.state);
        this.enterRule(localContext, 246, MySqlParser.RULE_importTableStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3797;
            this.match(MySqlParser.KW_IMPORT);
            this.state = 3798;
            this.match(MySqlParser.KW_TABLE);
            this.state = 3799;
            this.match(MySqlParser.KW_FROM);
            this.state = 3800;
            this.stringLiteral();
            this.state = 3805;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 3801;
                this.match(MySqlParser.COMMA);
                this.state = 3802;
                this.stringLiteral();
                }
                }
                this.state = 3807;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public singleUpdateStatement(): SingleUpdateStatementContext {
        let localContext = new SingleUpdateStatementContext(this.context, this.state);
        this.enterRule(localContext, 248, MySqlParser.RULE_singleUpdateStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3808;
            this.match(MySqlParser.KW_UPDATE);
            this.state = 3810;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 107) {
                {
                this.state = 3809;
                localContext._priority = this.match(MySqlParser.KW_LOW_PRIORITY);
                }
            }

            this.state = 3813;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 79) {
                {
                this.state = 3812;
                this.match(MySqlParser.KW_IGNORE);
                }
            }

            this.state = 3815;
            this.tableName();
            this.state = 3820;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074311168) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                {
                this.state = 3817;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 13) {
                    {
                    this.state = 3816;
                    this.match(MySqlParser.KW_AS);
                    }
                }

                this.state = 3819;
                localContext._table_alias = this.uid();
                }
            }

            this.state = 3822;
            this.match(MySqlParser.KW_SET);
            this.state = 3823;
            this.updatedElement();
            this.state = 3828;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 3824;
                this.match(MySqlParser.COMMA);
                this.state = 3825;
                this.updatedElement();
                }
                }
                this.state = 3830;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 3833;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 192) {
                {
                this.state = 3831;
                this.match(MySqlParser.KW_WHERE);
                this.state = 3832;
                this.expression(0);
                }
            }

            this.state = 3836;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 125) {
                {
                this.state = 3835;
                this.orderByClause();
                }
            }

            this.state = 3839;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 100) {
                {
                this.state = 3838;
                this.limitClause();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public multipleUpdateStatement(): MultipleUpdateStatementContext {
        let localContext = new MultipleUpdateStatementContext(this.context, this.state);
        this.enterRule(localContext, 250, MySqlParser.RULE_multipleUpdateStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3841;
            this.match(MySqlParser.KW_UPDATE);
            this.state = 3843;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 107) {
                {
                this.state = 3842;
                localContext._priority = this.match(MySqlParser.KW_LOW_PRIORITY);
                }
            }

            this.state = 3846;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 79) {
                {
                this.state = 3845;
                this.match(MySqlParser.KW_IGNORE);
                }
            }

            this.state = 3848;
            this.tableSources();
            this.state = 3849;
            this.match(MySqlParser.KW_SET);
            this.state = 3850;
            this.updatedElement();
            this.state = 3855;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 3851;
                this.match(MySqlParser.COMMA);
                this.state = 3852;
                this.updatedElement();
                }
                }
                this.state = 3857;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 3860;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 192) {
                {
                this.state = 3858;
                this.match(MySqlParser.KW_WHERE);
                this.state = 3859;
                this.expression(0);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public orderByClause(): OrderByClauseContext {
        let localContext = new OrderByClauseContext(this.context, this.state);
        this.enterRule(localContext, 252, MySqlParser.RULE_orderByClause);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3862;
            this.match(MySqlParser.KW_ORDER);
            this.state = 3863;
            this.match(MySqlParser.KW_BY);
            this.state = 3864;
            this.orderByExpression();
            this.state = 3869;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 533, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 3865;
                    this.match(MySqlParser.COMMA);
                    this.state = 3866;
                    this.orderByExpression();
                    }
                    }
                }
                this.state = 3871;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 533, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public orderByExpression(): OrderByExpressionContext {
        let localContext = new OrderByExpressionContext(this.context, this.state);
        this.enterRule(localContext, 254, MySqlParser.RULE_orderByExpression);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3872;
            this.expression(0);
            this.state = 3874;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 534, this.context) ) {
            case 1:
                {
                this.state = 3873;
                localContext._order = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 14 || _la === 45)) {
                    localContext._order = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tableSources(): TableSourcesContext {
        let localContext = new TableSourcesContext(this.context, this.state);
        this.enterRule(localContext, 256, MySqlParser.RULE_tableSources);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3876;
            this.tableSource();
            this.state = 3881;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 535, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 3877;
                    this.match(MySqlParser.COMMA);
                    this.state = 3878;
                    this.tableSource();
                    }
                    }
                }
                this.state = 3883;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 535, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tableSource(): TableSourceContext {
        let localContext = new TableSourceContext(this.context, this.state);
        this.enterRule(localContext, 258, MySqlParser.RULE_tableSource);
        let _la: number;
        try {
            let alternative: number;
            this.state = 3902;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 538, this.context) ) {
            case 1:
                localContext = new TableSourceBaseContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3884;
                this.tableSourceItem();
                this.state = 3888;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 536, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 3885;
                        this.joinPart();
                        }
                        }
                    }
                    this.state = 3890;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 536, this.context);
                }
                }
                break;
            case 2:
                localContext = new TableSourceNestedContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3891;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 3892;
                this.tableSourceItem();
                this.state = 3896;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 35 || ((((_la - 84)) & ~0x1F) === 0 && ((1 << (_la - 84)) & 536887425) !== 0) || _la === 150 || _la === 172) {
                    {
                    {
                    this.state = 3893;
                    this.joinPart();
                    }
                    }
                    this.state = 3898;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 3899;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 3:
                localContext = new TableJsonContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3901;
                this.jsonTable();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tableSourceItem(): TableSourceItemContext {
        let localContext = new TableSourceItemContext(this.context, this.state);
        this.enterRule(localContext, 260, MySqlParser.RULE_tableSourceItem);
        let _la: number;
        try {
            let alternative: number;
            this.state = 3949;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 548, this.context) ) {
            case 1:
                localContext = new AtomTableItemContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3904;
                this.tableName();
                this.state = 3910;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 539, this.context) ) {
                case 1:
                    {
                    this.state = 3905;
                    this.match(MySqlParser.KW_PARTITION);
                    this.state = 3906;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 3907;
                    this.partitionNames();
                    this.state = 3908;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                }
                this.state = 3916;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 541, this.context) ) {
                case 1:
                    {
                    this.state = 3913;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 13) {
                        {
                        this.state = 3912;
                        this.match(MySqlParser.KW_AS);
                        }
                    }

                    this.state = 3915;
                    (localContext as AtomTableItemContext)._alias = this.uid();
                    }
                    break;
                }
                this.state = 3926;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 543, this.context) ) {
                case 1:
                    {
                    this.state = 3918;
                    this.indexHint();
                    this.state = 3923;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 542, this.context);
                    while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                        if (alternative === 1) {
                            {
                            {
                            this.state = 3919;
                            this.match(MySqlParser.COMMA);
                            this.state = 3920;
                            this.indexHint();
                            }
                            }
                        }
                        this.state = 3925;
                        this.errorHandler.sync(this);
                        alternative = this.interpreter.adaptivePredict(this.tokenStream, 542, this.context);
                    }
                    }
                    break;
                }
                }
                break;
            case 2:
                localContext = new SubqueryTableItemContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3929;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 95) {
                    {
                    this.state = 3928;
                    this.match(MySqlParser.KW_LATERAL);
                    }
                }

                this.state = 3936;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 545, this.context) ) {
                case 1:
                    {
                    this.state = 3931;
                    this.selectStatement();
                    }
                    break;
                case 2:
                    {
                    this.state = 3932;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 3933;
                    (localContext as SubqueryTableItemContext)._parenthesisSubquery = this.selectStatement();
                    this.state = 3934;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                }
                this.state = 3939;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 13) {
                    {
                    this.state = 3938;
                    this.match(MySqlParser.KW_AS);
                    }
                }

                this.state = 3941;
                (localContext as SubqueryTableItemContext)._alias = this.uid();
                this.state = 3943;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 547, this.context) ) {
                case 1:
                    {
                    this.state = 3942;
                    this.fullColumnNames();
                    }
                    break;
                }
                }
                break;
            case 3:
                localContext = new TableSourcesItemContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3945;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 3946;
                this.tableSources();
                this.state = 3947;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public fullColumnNames(): FullColumnNamesContext {
        let localContext = new FullColumnNamesContext(this.context, this.state);
        this.enterRule(localContext, 262, MySqlParser.RULE_fullColumnNames);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3951;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 3952;
            this.columnNames();
            this.state = 3953;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public indexHint(): IndexHintContext {
        let localContext = new IndexHintContext(this.context, this.state);
        this.enterRule(localContext, 264, MySqlParser.RULE_indexHint);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 3955;
            localContext._indexHintAction = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 66 || _la === 79 || _la === 187)) {
                localContext._indexHintAction = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 3956;
            localContext._keyFormat = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 82 || _la === 92)) {
                localContext._keyFormat = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 3959;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 65) {
                {
                this.state = 3957;
                this.match(MySqlParser.KW_FOR);
                this.state = 3958;
                this.indexHintType();
                }
            }

            this.state = 3961;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 3963;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                {
                this.state = 3962;
                this.indexNames();
                }
            }

            this.state = 3965;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public indexHintType(): IndexHintTypeContext {
        let localContext = new IndexHintTypeContext(this.context, this.state);
        this.enterRule(localContext, 266, MySqlParser.RULE_indexHintType);
        try {
            this.state = 3972;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_JOIN:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3967;
                this.match(MySqlParser.KW_JOIN);
                }
                break;
            case MySqlParser.KW_ORDER:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3968;
                this.match(MySqlParser.KW_ORDER);
                this.state = 3969;
                this.match(MySqlParser.KW_BY);
                }
                break;
            case MySqlParser.KW_GROUP:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3970;
                this.match(MySqlParser.KW_GROUP);
                this.state = 3971;
                this.match(MySqlParser.KW_BY);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public joinPart(): JoinPartContext {
        let localContext = new JoinPartContext(this.context, this.state);
        this.enterRule(localContext, 268, MySqlParser.RULE_joinPart);
        let _la: number;
        try {
            let alternative: number;
            this.state = 4023;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_CROSS:
            case MySqlParser.KW_INNER:
            case MySqlParser.KW_JOIN:
                localContext = new InnerJoinContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 3975;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 35 || _la === 84) {
                    {
                    this.state = 3974;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 35 || _la === 84)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 3977;
                this.match(MySqlParser.KW_JOIN);
                this.state = 3979;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 553, this.context) ) {
                case 1:
                    {
                    this.state = 3978;
                    this.match(MySqlParser.KW_LATERAL);
                    }
                    break;
                }
                this.state = 3981;
                this.tableSourceItem();
                this.state = 3985;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 554, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 3982;
                        this.joinSpec();
                        }
                        }
                    }
                    this.state = 3987;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 554, this.context);
                }
                }
                break;
            case MySqlParser.KW_STRAIGHT_JOIN:
                localContext = new StraightJoinContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 3988;
                this.match(MySqlParser.KW_STRAIGHT_JOIN);
                this.state = 3989;
                this.tableSourceItem();
                this.state = 3993;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 555, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 3990;
                        this.joinSpec();
                        }
                        }
                    }
                    this.state = 3995;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 555, this.context);
                }
                }
                break;
            case MySqlParser.KW_LEFT:
            case MySqlParser.KW_RIGHT:
                localContext = new OuterJoinContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 3996;
                _la = this.tokenStream.LA(1);
                if(!(_la === 98 || _la === 150)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 3998;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 127) {
                    {
                    this.state = 3997;
                    this.match(MySqlParser.KW_OUTER);
                    }
                }

                this.state = 4000;
                this.match(MySqlParser.KW_JOIN);
                this.state = 4002;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 557, this.context) ) {
                case 1:
                    {
                    this.state = 4001;
                    this.match(MySqlParser.KW_LATERAL);
                    }
                    break;
                }
                this.state = 4004;
                this.tableSourceItem();
                this.state = 4008;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 558, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 4005;
                        this.joinSpec();
                        }
                        }
                    }
                    this.state = 4010;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 558, this.context);
                }
                }
                break;
            case MySqlParser.KW_NATURAL:
                localContext = new NaturalJoinContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4011;
                this.match(MySqlParser.KW_NATURAL);
                this.state = 4019;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 84 || _la === 98 || _la === 150) {
                    {
                    this.state = 4014;
                    this.errorHandler.sync(this);
                    switch (this.tokenStream.LA(1)) {
                    case MySqlParser.KW_INNER:
                        {
                        this.state = 4012;
                        this.match(MySqlParser.KW_INNER);
                        }
                        break;
                    case MySqlParser.KW_LEFT:
                    case MySqlParser.KW_RIGHT:
                        {
                        this.state = 4013;
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 98 || _la === 150)) {
                        this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    this.state = 4017;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 127) {
                        {
                        this.state = 4016;
                        this.match(MySqlParser.KW_OUTER);
                        }
                    }

                    }
                }

                this.state = 4021;
                this.match(MySqlParser.KW_JOIN);
                this.state = 4022;
                this.tableSourceItem();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public joinSpec(): JoinSpecContext {
        let localContext = new JoinSpecContext(this.context, this.state);
        this.enterRule(localContext, 270, MySqlParser.RULE_joinSpec);
        try {
            this.state = 4032;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_ON:
                this.enterOuterAlt(localContext, 1);
                {
                {
                this.state = 4025;
                this.match(MySqlParser.KW_ON);
                this.state = 4026;
                this.expression(0);
                }
                }
                break;
            case MySqlParser.KW_USING:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4027;
                this.match(MySqlParser.KW_USING);
                this.state = 4028;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4029;
                this.columnNames();
                this.state = 4030;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public queryExpression(): QueryExpressionContext {
        let localContext = new QueryExpressionContext(this.context, this.state);
        this.enterRule(localContext, 272, MySqlParser.RULE_queryExpression);
        try {
            this.state = 4042;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 564, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4034;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4035;
                this.querySpecification();
                this.state = 4036;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4038;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4039;
                this.queryExpression();
                this.state = 4040;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public querySpecification(): QuerySpecificationContext {
        let localContext = new QuerySpecificationContext(this.context, this.state);
        this.enterRule(localContext, 274, MySqlParser.RULE_querySpecification);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4044;
            this.match(MySqlParser.KW_SELECT);
            this.state = 4048;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 565, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 4045;
                    this.selectSpec();
                    }
                    }
                }
                this.state = 4050;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 565, this.context);
            }
            this.state = 4051;
            this.selectElements();
            this.state = 4053;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 566, this.context) ) {
            case 1:
                {
                this.state = 4052;
                this.intoClause();
                }
                break;
            }
            this.state = 4055;
            this.fromClause();
            this.state = 4057;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 567, this.context) ) {
            case 1:
                {
                this.state = 4056;
                this.groupByClause();
                }
                break;
            }
            this.state = 4060;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 568, this.context) ) {
            case 1:
                {
                this.state = 4059;
                this.havingClause();
                }
                break;
            }
            this.state = 4063;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 569, this.context) ) {
            case 1:
                {
                this.state = 4062;
                this.windowClause();
                }
                break;
            }
            this.state = 4066;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 570, this.context) ) {
            case 1:
                {
                this.state = 4065;
                this.orderByClause();
                }
                break;
            }
            this.state = 4069;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 571, this.context) ) {
            case 1:
                {
                this.state = 4068;
                this.limitClause();
                }
                break;
            }
            this.state = 4072;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 572, this.context) ) {
            case 1:
                {
                this.state = 4071;
                this.intoClause();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public unionStatement(): UnionStatementContext {
        let localContext = new UnionStatementContext(this.context, this.state);
        this.enterRule(localContext, 276, MySqlParser.RULE_unionStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4074;
            this.match(MySqlParser.KW_UNION);
            this.state = 4076;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 7 || _la === 49) {
                {
                this.state = 4075;
                localContext._unionType = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 7 || _la === 49)) {
                    localContext._unionType = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 4080;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_SELECT:
                {
                this.state = 4078;
                this.querySpecification();
                }
                break;
            case MySqlParser.LR_BRACKET:
                {
                this.state = 4079;
                this.queryExpression();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public lateralStatement(): LateralStatementContext {
        let localContext = new LateralStatementContext(this.context, this.state);
        this.enterRule(localContext, 278, MySqlParser.RULE_lateralStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4082;
            this.match(MySqlParser.KW_LATERAL);
            this.state = 4097;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 578, this.context) ) {
            case 1:
                {
                this.state = 4083;
                this.querySpecification();
                }
                break;
            case 2:
                {
                this.state = 4084;
                this.queryExpression();
                }
                break;
            case 3:
                {
                {
                this.state = 4085;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4088;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_SELECT:
                    {
                    this.state = 4086;
                    this.querySpecification();
                    }
                    break;
                case MySqlParser.LR_BRACKET:
                    {
                    this.state = 4087;
                    this.queryExpression();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 4090;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 4095;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 577, this.context) ) {
                case 1:
                    {
                    this.state = 4092;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 13) {
                        {
                        this.state = 4091;
                        this.match(MySqlParser.KW_AS);
                        }
                    }

                    this.state = 4094;
                    localContext._alias = this.uid();
                    }
                    break;
                }
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public jsonTable(): JsonTableContext {
        let localContext = new JsonTableContext(this.context, this.state);
        this.enterRule(localContext, 280, MySqlParser.RULE_jsonTable);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4099;
            this.match(MySqlParser.KW_JSON_TABLE);
            this.state = 4100;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 4101;
            this.match(MySqlParser.STRING_LITERAL);
            this.state = 4102;
            this.match(MySqlParser.COMMA);
            this.state = 4103;
            this.match(MySqlParser.STRING_LITERAL);
            this.state = 4104;
            this.match(MySqlParser.KW_COLUMNS);
            this.state = 4105;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 4106;
            this.jsonColumnList();
            this.state = 4107;
            this.match(MySqlParser.RR_BRACKET);
            this.state = 4108;
            this.match(MySqlParser.RR_BRACKET);
            this.state = 4113;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 580, this.context) ) {
            case 1:
                {
                this.state = 4110;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 13) {
                    {
                    this.state = 4109;
                    this.match(MySqlParser.KW_AS);
                    }
                }

                this.state = 4112;
                localContext._alias = this.uid();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public jsonColumnList(): JsonColumnListContext {
        let localContext = new JsonColumnListContext(this.context, this.state);
        this.enterRule(localContext, 282, MySqlParser.RULE_jsonColumnList);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4115;
            this.jsonColumn();
            this.state = 4120;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 4116;
                this.match(MySqlParser.COMMA);
                this.state = 4117;
                this.jsonColumn();
                }
                }
                this.state = 4122;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public jsonColumn(): JsonColumnContext {
        let localContext = new JsonColumnContext(this.context, this.state);
        this.enterRule(localContext, 284, MySqlParser.RULE_jsonColumn);
        let _la: number;
        try {
            this.state = 4152;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 587, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4123;
                this.columnName();
                this.state = 4140;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_FOR:
                    {
                    this.state = 4124;
                    this.match(MySqlParser.KW_FOR);
                    this.state = 4125;
                    this.match(MySqlParser.KW_ORDINALITY);
                    }
                    break;
                case MySqlParser.KW_CHARACTER:
                case MySqlParser.KW_SET:
                case MySqlParser.KW_TINYINT:
                case MySqlParser.KW_SMALLINT:
                case MySqlParser.KW_MEDIUMINT:
                case MySqlParser.KW_MIDDLEINT:
                case MySqlParser.KW_INT:
                case MySqlParser.KW_INT1:
                case MySqlParser.KW_INT2:
                case MySqlParser.KW_INT3:
                case MySqlParser.KW_INT4:
                case MySqlParser.KW_INT8:
                case MySqlParser.KW_INTEGER:
                case MySqlParser.KW_BIGINT:
                case MySqlParser.KW_REAL:
                case MySqlParser.KW_DOUBLE:
                case MySqlParser.KW_FLOAT:
                case MySqlParser.KW_FLOAT4:
                case MySqlParser.KW_FLOAT8:
                case MySqlParser.KW_DECIMAL:
                case MySqlParser.KW_DEC:
                case MySqlParser.KW_NUMERIC:
                case MySqlParser.KW_DATE:
                case MySqlParser.KW_TIME:
                case MySqlParser.KW_TIMESTAMP:
                case MySqlParser.KW_DATETIME:
                case MySqlParser.KW_YEAR:
                case MySqlParser.KW_CHAR:
                case MySqlParser.KW_VARCHAR:
                case MySqlParser.KW_NVARCHAR:
                case MySqlParser.KW_NATIONAL:
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_VARBINARY:
                case MySqlParser.KW_TINYBLOB:
                case MySqlParser.KW_BLOB:
                case MySqlParser.KW_MEDIUMBLOB:
                case MySqlParser.KW_LONG:
                case MySqlParser.KW_LONGBLOB:
                case MySqlParser.KW_TINYTEXT:
                case MySqlParser.KW_TEXT:
                case MySqlParser.KW_MEDIUMTEXT:
                case MySqlParser.KW_LONGTEXT:
                case MySqlParser.KW_ENUM:
                case MySqlParser.KW_SERIAL:
                case MySqlParser.KW_BIT:
                case MySqlParser.KW_BOOL:
                case MySqlParser.KW_BOOLEAN:
                case MySqlParser.KW_FIXED:
                case MySqlParser.KW_JSON:
                case MySqlParser.KW_NCHAR:
                case MySqlParser.KW_GEOMETRYCOLLECTION:
                case MySqlParser.KW_GEOMCOLLECTION:
                case MySqlParser.KW_GEOMETRY:
                case MySqlParser.KW_LINESTRING:
                case MySqlParser.KW_MULTILINESTRING:
                case MySqlParser.KW_MULTIPOINT:
                case MySqlParser.KW_MULTIPOLYGON:
                case MySqlParser.KW_POINT:
                case MySqlParser.KW_POLYGON:
                    {
                    this.state = 4126;
                    this.dataType();
                    this.state = 4138;
                    this.errorHandler.sync(this);
                    switch (this.tokenStream.LA(1)) {
                    case MySqlParser.KW_PATH:
                        {
                        this.state = 4127;
                        this.match(MySqlParser.KW_PATH);
                        this.state = 4128;
                        this.match(MySqlParser.STRING_LITERAL);
                        this.state = 4130;
                        this.errorHandler.sync(this);
                        switch (this.interpreter.adaptivePredict(this.tokenStream, 582, this.context) ) {
                        case 1:
                            {
                            this.state = 4129;
                            this.jsonOnEmpty();
                            }
                            break;
                        }
                        this.state = 4133;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 42 || _la === 116 || _la === 382) {
                            {
                            this.state = 4132;
                            this.jsonOnError();
                            }
                        }

                        }
                        break;
                    case MySqlParser.KW_EXISTS:
                        {
                        this.state = 4135;
                        this.match(MySqlParser.KW_EXISTS);
                        this.state = 4136;
                        this.match(MySqlParser.KW_PATH);
                        this.state = 4137;
                        this.match(MySqlParser.STRING_LITERAL);
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4142;
                this.match(MySqlParser.KW_NESTED);
                this.state = 4144;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 257) {
                    {
                    this.state = 4143;
                    this.match(MySqlParser.KW_PATH);
                    }
                }

                this.state = 4146;
                this.match(MySqlParser.STRING_LITERAL);
                this.state = 4147;
                this.match(MySqlParser.KW_COLUMNS);
                this.state = 4148;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4149;
                this.jsonColumnList();
                this.state = 4150;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public jsonOnEmpty(): JsonOnEmptyContext {
        let localContext = new JsonOnEmptyContext(this.context, this.state);
        this.enterRule(localContext, 286, MySqlParser.RULE_jsonOnEmpty);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4158;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_NULL_LITERAL:
                {
                this.state = 4154;
                this.match(MySqlParser.KW_NULL_LITERAL);
                }
                break;
            case MySqlParser.KW_ERROR:
                {
                this.state = 4155;
                this.match(MySqlParser.KW_ERROR);
                }
                break;
            case MySqlParser.KW_DEFAULT:
                {
                this.state = 4156;
                this.match(MySqlParser.KW_DEFAULT);
                this.state = 4157;
                this.defaultValue();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 4160;
            this.match(MySqlParser.KW_ON);
            this.state = 4161;
            this.match(MySqlParser.KW_EMPTY);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public jsonOnError(): JsonOnErrorContext {
        let localContext = new JsonOnErrorContext(this.context, this.state);
        this.enterRule(localContext, 288, MySqlParser.RULE_jsonOnError);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4167;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_NULL_LITERAL:
                {
                this.state = 4163;
                this.match(MySqlParser.KW_NULL_LITERAL);
                }
                break;
            case MySqlParser.KW_ERROR:
                {
                this.state = 4164;
                this.match(MySqlParser.KW_ERROR);
                }
                break;
            case MySqlParser.KW_DEFAULT:
                {
                this.state = 4165;
                this.match(MySqlParser.KW_DEFAULT);
                this.state = 4166;
                this.defaultValue();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 4169;
            this.match(MySqlParser.KW_ON);
            this.state = 4170;
            this.match(MySqlParser.KW_ERROR);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public selectSpec(): SelectSpecContext {
        let localContext = new SelectSpecContext(this.context, this.state);
        this.enterRule(localContext, 290, MySqlParser.RULE_selectSpec);
        let _la: number;
        try {
            this.state = 4180;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_ALL:
            case MySqlParser.KW_DISTINCT:
            case MySqlParser.KW_DISTINCTROW:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4172;
                _la = this.tokenStream.LA(1);
                if(!(_la === 7 || _la === 49 || _la === 50)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_HIGH_PRIORITY:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4173;
                this.match(MySqlParser.KW_HIGH_PRIORITY);
                }
                break;
            case MySqlParser.KW_STRAIGHT_JOIN:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4174;
                this.match(MySqlParser.KW_STRAIGHT_JOIN);
                }
                break;
            case MySqlParser.KW_SQL_SMALL_RESULT:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4175;
                this.match(MySqlParser.KW_SQL_SMALL_RESULT);
                }
                break;
            case MySqlParser.KW_SQL_BIG_RESULT:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4176;
                this.match(MySqlParser.KW_SQL_BIG_RESULT);
                }
                break;
            case MySqlParser.KW_SQL_BUFFER_RESULT:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 4177;
                this.match(MySqlParser.KW_SQL_BUFFER_RESULT);
                }
                break;
            case MySqlParser.KW_SQL_CACHE:
            case MySqlParser.KW_SQL_NO_CACHE:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 4178;
                _la = this.tokenStream.LA(1);
                if(!(_la === 637 || _la === 638)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_SQL_CALC_FOUND_ROWS:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 4179;
                this.match(MySqlParser.KW_SQL_CALC_FOUND_ROWS);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public selectElements(): SelectElementsContext {
        let localContext = new SelectElementsContext(this.context, this.state);
        this.enterRule(localContext, 292, MySqlParser.RULE_selectElements);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4184;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 591, this.context) ) {
            case 1:
                {
                this.state = 4182;
                localContext._star = this.match(MySqlParser.STAR);
                }
                break;
            case 2:
                {
                this.state = 4183;
                this.selectElement();
                }
                break;
            }
            this.state = 4190;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 592, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 4186;
                    this.match(MySqlParser.COMMA);
                    this.state = 4187;
                    this.selectElement();
                    }
                    }
                }
                this.state = 4192;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 592, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public selectElement(): SelectElementContext {
        let localContext = new SelectElementContext(this.context, this.state);
        this.enterRule(localContext, 294, MySqlParser.RULE_selectElement);
        let _la: number;
        try {
            this.state = 4222;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 600, this.context) ) {
            case 1:
                localContext = new SelectExpressionElementContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4195;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 593, this.context) ) {
                case 1:
                    {
                    this.state = 4193;
                    this.match(MySqlParser.LOCAL_ID);
                    this.state = 4194;
                    this.match(MySqlParser.VAR_ASSIGN);
                    }
                    break;
                }
                this.state = 4197;
                this.expression(0);
                this.state = 4202;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 595, this.context) ) {
                case 1:
                    {
                    this.state = 4199;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 13) {
                        {
                        this.state = 4198;
                        this.match(MySqlParser.KW_AS);
                        }
                    }

                    this.state = 4201;
                    (localContext as SelectExpressionElementContext)._alias = this.uid();
                    }
                    break;
                }
                }
                break;
            case 2:
                localContext = new SelectFunctionElementContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4204;
                this.functionCall();
                this.state = 4209;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 597, this.context) ) {
                case 1:
                    {
                    this.state = 4206;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 13) {
                        {
                        this.state = 4205;
                        this.match(MySqlParser.KW_AS);
                        }
                    }

                    this.state = 4208;
                    (localContext as SelectFunctionElementContext)._alias = this.uid();
                    }
                    break;
                }
                }
                break;
            case 3:
                localContext = new SelectStarElementContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4211;
                (localContext as SelectStarElementContext)._select_element = this.fullId();
                this.state = 4212;
                this.match(MySqlParser.DOT);
                this.state = 4213;
                this.match(MySqlParser.STAR);
                }
                break;
            case 4:
                localContext = new SelectColumnElementContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4215;
                this.columnName();
                this.state = 4220;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 599, this.context) ) {
                case 1:
                    {
                    this.state = 4217;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 13) {
                        {
                        this.state = 4216;
                        this.match(MySqlParser.KW_AS);
                        }
                    }

                    this.state = 4219;
                    (localContext as SelectColumnElementContext)._alias = this.uid();
                    }
                    break;
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public intoClause(): IntoClauseContext {
        let localContext = new IntoClauseContext(this.context, this.state);
        this.enterRule(localContext, 296, MySqlParser.RULE_intoClause);
        let _la: number;
        try {
            let alternative: number;
            this.state = 4260;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 607, this.context) ) {
            case 1:
                localContext = new SelectIntoVariablesContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4224;
                this.match(MySqlParser.KW_INTO);
                this.state = 4225;
                this.assignmentField();
                this.state = 4230;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 601, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 4226;
                        this.match(MySqlParser.COMMA);
                        this.state = 4227;
                        this.assignmentField();
                        }
                        }
                    }
                    this.state = 4232;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 601, this.context);
                }
                }
                break;
            case 2:
                localContext = new SelectIntoDumpFileContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4233;
                this.match(MySqlParser.KW_INTO);
                this.state = 4234;
                this.match(MySqlParser.KW_DUMPFILE);
                this.state = 4235;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 3:
                localContext = new SelectIntoTextFileContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                {
                this.state = 4236;
                this.match(MySqlParser.KW_INTO);
                this.state = 4237;
                this.match(MySqlParser.KW_OUTFILE);
                this.state = 4238;
                (localContext as SelectIntoTextFileContext)._filename = this.match(MySqlParser.STRING_LITERAL);
                this.state = 4242;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 602, this.context) ) {
                case 1:
                    {
                    this.state = 4239;
                    this.match(MySqlParser.KW_CHARACTER);
                    this.state = 4240;
                    this.match(MySqlParser.KW_SET);
                    this.state = 4241;
                    (localContext as SelectIntoTextFileContext)._charset = this.charsetName();
                    }
                    break;
                }
                this.state = 4250;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 604, this.context) ) {
                case 1:
                    {
                    this.state = 4244;
                    (localContext as SelectIntoTextFileContext)._fieldsFormat = this.tokenStream.LT(1);
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 337 || _la === 398)) {
                        (localContext as SelectIntoTextFileContext)._fieldsFormat = this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 4246;
                    this.errorHandler.sync(this);
                    alternative = 1;
                    do {
                        switch (alternative) {
                        case 1:
                            {
                            {
                            this.state = 4245;
                            this.selectFieldsInto();
                            }
                            }
                            break;
                        default:
                            throw new antlr.NoViableAltException(this);
                        }
                        this.state = 4248;
                        this.errorHandler.sync(this);
                        alternative = this.interpreter.adaptivePredict(this.tokenStream, 603, this.context);
                    } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER);
                    }
                    break;
                }
                this.state = 4258;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 606, this.context) ) {
                case 1:
                    {
                    this.state = 4252;
                    this.match(MySqlParser.KW_LINES);
                    this.state = 4254;
                    this.errorHandler.sync(this);
                    alternative = 1;
                    do {
                        switch (alternative) {
                        case 1:
                            {
                            {
                            this.state = 4253;
                            this.selectLinesInto();
                            }
                            }
                            break;
                        default:
                            throw new antlr.NoViableAltException(this);
                        }
                        this.state = 4256;
                        this.errorHandler.sync(this);
                        alternative = this.interpreter.adaptivePredict(this.tokenStream, 605, this.context);
                    } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER);
                    }
                    break;
                }
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public selectFieldsInto(): SelectFieldsIntoContext {
        let localContext = new SelectFieldsIntoContext(this.context, this.state);
        this.enterRule(localContext, 298, MySqlParser.RULE_selectFieldsInto);
        let _la: number;
        try {
            this.state = 4274;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_TERMINATED:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4262;
                this.match(MySqlParser.KW_TERMINATED);
                this.state = 4263;
                this.match(MySqlParser.KW_BY);
                this.state = 4264;
                localContext._terminationField = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_ENCLOSED:
            case MySqlParser.KW_OPTIONALLY:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4266;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 123) {
                    {
                    this.state = 4265;
                    this.match(MySqlParser.KW_OPTIONALLY);
                    }
                }

                this.state = 4268;
                this.match(MySqlParser.KW_ENCLOSED);
                this.state = 4269;
                this.match(MySqlParser.KW_BY);
                this.state = 4270;
                localContext._enclosion = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_ESCAPED:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4271;
                this.match(MySqlParser.KW_ESCAPED);
                this.state = 4272;
                this.match(MySqlParser.KW_BY);
                this.state = 4273;
                localContext._escaping = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public selectLinesInto(): SelectLinesIntoContext {
        let localContext = new SelectLinesIntoContext(this.context, this.state);
        this.enterRule(localContext, 300, MySqlParser.RULE_selectLinesInto);
        try {
            this.state = 4282;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_STARTING:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4276;
                this.match(MySqlParser.KW_STARTING);
                this.state = 4277;
                this.match(MySqlParser.KW_BY);
                this.state = 4278;
                localContext._starting = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_TERMINATED:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4279;
                this.match(MySqlParser.KW_TERMINATED);
                this.state = 4280;
                this.match(MySqlParser.KW_BY);
                this.state = 4281;
                localContext._terminationLine = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public fromClause(): FromClauseContext {
        let localContext = new FromClauseContext(this.context, this.state);
        this.enterRule(localContext, 302, MySqlParser.RULE_fromClause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4286;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 611, this.context) ) {
            case 1:
                {
                this.state = 4284;
                this.match(MySqlParser.KW_FROM);
                this.state = 4285;
                this.tableSources();
                }
                break;
            }
            this.state = 4290;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 612, this.context) ) {
            case 1:
                {
                this.state = 4288;
                this.match(MySqlParser.KW_WHERE);
                this.state = 4289;
                localContext._whereExpr = this.expression(0);
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public groupByClause(): GroupByClauseContext {
        let localContext = new GroupByClauseContext(this.context, this.state);
        this.enterRule(localContext, 304, MySqlParser.RULE_groupByClause);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4292;
            this.match(MySqlParser.KW_GROUP);
            this.state = 4293;
            this.match(MySqlParser.KW_BY);
            this.state = 4294;
            this.groupByItem();
            this.state = 4299;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 613, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 4295;
                    this.match(MySqlParser.COMMA);
                    this.state = 4296;
                    this.groupByItem();
                    }
                    }
                }
                this.state = 4301;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 613, this.context);
            }
            this.state = 4304;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 614, this.context) ) {
            case 1:
                {
                this.state = 4302;
                this.match(MySqlParser.KW_WITH);
                this.state = 4303;
                this.match(MySqlParser.KW_ROLLUP);
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public havingClause(): HavingClauseContext {
        let localContext = new HavingClauseContext(this.context, this.state);
        this.enterRule(localContext, 306, MySqlParser.RULE_havingClause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4306;
            this.match(MySqlParser.KW_HAVING);
            this.state = 4307;
            localContext._havingExpr = this.expression(0);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public windowClause(): WindowClauseContext {
        let localContext = new WindowClauseContext(this.context, this.state);
        this.enterRule(localContext, 308, MySqlParser.RULE_windowClause);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4309;
            this.match(MySqlParser.KW_WINDOW);
            this.state = 4310;
            this.windowName();
            this.state = 4311;
            this.match(MySqlParser.KW_AS);
            this.state = 4312;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 4313;
            this.windowSpec();
            this.state = 4314;
            this.match(MySqlParser.RR_BRACKET);
            this.state = 4324;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 615, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 4315;
                    this.match(MySqlParser.COMMA);
                    this.state = 4316;
                    this.windowName();
                    this.state = 4317;
                    this.match(MySqlParser.KW_AS);
                    this.state = 4318;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 4319;
                    this.windowSpec();
                    this.state = 4320;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    }
                }
                this.state = 4326;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 615, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public groupByItem(): GroupByItemContext {
        let localContext = new GroupByItemContext(this.context, this.state);
        this.enterRule(localContext, 310, MySqlParser.RULE_groupByItem);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4327;
            this.expression(0);
            this.state = 4329;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 616, this.context) ) {
            case 1:
                {
                this.state = 4328;
                localContext._order = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 14 || _la === 45)) {
                    localContext._order = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public limitClause(): LimitClauseContext {
        let localContext = new LimitClauseContext(this.context, this.state);
        this.enterRule(localContext, 312, MySqlParser.RULE_limitClause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4331;
            this.match(MySqlParser.KW_LIMIT);
            this.state = 4342;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 618, this.context) ) {
            case 1:
                {
                this.state = 4335;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 617, this.context) ) {
                case 1:
                    {
                    this.state = 4332;
                    localContext._offset = this.limitClauseAtom();
                    this.state = 4333;
                    this.match(MySqlParser.COMMA);
                    }
                    break;
                }
                this.state = 4337;
                localContext._limit = this.limitClauseAtom();
                }
                break;
            case 2:
                {
                this.state = 4338;
                localContext._limit = this.limitClauseAtom();
                this.state = 4339;
                this.match(MySqlParser.KW_OFFSET);
                this.state = 4340;
                localContext._offset = this.limitClauseAtom();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public limitClauseAtom(): LimitClauseAtomContext {
        let localContext = new LimitClauseAtomContext(this.context, this.state);
        this.enterRule(localContext, 314, MySqlParser.RULE_limitClauseAtom);
        try {
            this.state = 4347;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.ZERO_DECIMAL:
            case MySqlParser.ONE_DECIMAL:
            case MySqlParser.TWO_DECIMAL:
            case MySqlParser.THREE_DECIMAL:
            case MySqlParser.DECIMAL_LITERAL:
            case MySqlParser.REAL_LITERAL:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4344;
                this.decimalLiteral();
                }
                break;
            case MySqlParser.LOCAL_ID:
            case MySqlParser.GLOBAL_ID:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4345;
                this.mysqlVariable();
                }
                break;
            case MySqlParser.KW_ARRAY:
            case MySqlParser.KW_ATTRIBUTE:
            case MySqlParser.KW_BUCKETS:
            case MySqlParser.KW_CONDITION:
            case MySqlParser.KW_CURRENT:
            case MySqlParser.KW_CURRENT_USER:
            case MySqlParser.KW_DATABASE:
            case MySqlParser.KW_DEFAULT:
            case MySqlParser.KW_DIAGNOSTICS:
            case MySqlParser.KW_EMPTY:
            case MySqlParser.KW_ENFORCED:
            case MySqlParser.KW_EXCEPT:
            case MySqlParser.KW_GROUP:
            case MySqlParser.KW_IF:
            case MySqlParser.KW_INSERT:
            case MySqlParser.KW_LATERAL:
            case MySqlParser.KW_LEFT:
            case MySqlParser.KW_NUMBER:
            case MySqlParser.KW_OPTIONAL:
            case MySqlParser.KW_ORDER:
            case MySqlParser.KW_PRIMARY:
            case MySqlParser.KW_REPEAT:
            case MySqlParser.KW_REPLACE:
            case MySqlParser.KW_RIGHT:
            case MySqlParser.KW_SCHEMA:
            case MySqlParser.KW_SKIP_QUERY_REWRITE:
            case MySqlParser.KW_STACKED:
            case MySqlParser.KW_DATE:
            case MySqlParser.KW_TIME:
            case MySqlParser.KW_TIMESTAMP:
            case MySqlParser.KW_DATETIME:
            case MySqlParser.KW_YEAR:
            case MySqlParser.KW_BINARY:
            case MySqlParser.KW_TEXT:
            case MySqlParser.KW_ENUM:
            case MySqlParser.KW_SERIAL:
            case MySqlParser.KW_JSON_TABLE:
            case MySqlParser.KW_JSON_VALUE:
            case MySqlParser.KW_NESTED:
            case MySqlParser.KW_ORDINALITY:
            case MySqlParser.KW_PATH:
            case MySqlParser.KW_AVG:
            case MySqlParser.KW_BIT_AND:
            case MySqlParser.KW_BIT_OR:
            case MySqlParser.KW_BIT_XOR:
            case MySqlParser.KW_COUNT:
            case MySqlParser.KW_CUME_DIST:
            case MySqlParser.KW_DENSE_RANK:
            case MySqlParser.KW_FIRST_VALUE:
            case MySqlParser.KW_GROUP_CONCAT:
            case MySqlParser.KW_LAG:
            case MySqlParser.KW_LAST_VALUE:
            case MySqlParser.KW_LEAD:
            case MySqlParser.KW_MAX:
            case MySqlParser.KW_MIN:
            case MySqlParser.KW_NTILE:
            case MySqlParser.KW_NTH_VALUE:
            case MySqlParser.KW_PERCENT_RANK:
            case MySqlParser.KW_RANK:
            case MySqlParser.KW_ROW_NUMBER:
            case MySqlParser.KW_STD:
            case MySqlParser.KW_STDDEV:
            case MySqlParser.KW_STDDEV_POP:
            case MySqlParser.KW_STDDEV_SAMP:
            case MySqlParser.KW_SUM:
            case MySqlParser.KW_VAR_POP:
            case MySqlParser.KW_VAR_SAMP:
            case MySqlParser.KW_VARIANCE:
            case MySqlParser.KW_CURRENT_DATE:
            case MySqlParser.KW_CURRENT_TIME:
            case MySqlParser.KW_CURRENT_TIMESTAMP:
            case MySqlParser.KW_LOCALTIME:
            case MySqlParser.KW_CURDATE:
            case MySqlParser.KW_CURTIME:
            case MySqlParser.KW_DATE_ADD:
            case MySqlParser.KW_DATE_SUB:
            case MySqlParser.KW_LOCALTIMESTAMP:
            case MySqlParser.KW_NOW:
            case MySqlParser.KW_POSITION:
            case MySqlParser.KW_SUBSTR:
            case MySqlParser.KW_SUBSTRING:
            case MySqlParser.KW_SYSDATE:
            case MySqlParser.KW_TRIM:
            case MySqlParser.KW_UTC_DATE:
            case MySqlParser.KW_UTC_TIME:
            case MySqlParser.KW_UTC_TIMESTAMP:
            case MySqlParser.KW_ACCOUNT:
            case MySqlParser.KW_ACTION:
            case MySqlParser.KW_AFTER:
            case MySqlParser.KW_AGGREGATE:
            case MySqlParser.KW_ALGORITHM:
            case MySqlParser.KW_ANY:
            case MySqlParser.KW_AT:
            case MySqlParser.KW_AUTHORS:
            case MySqlParser.KW_AUTOCOMMIT:
            case MySqlParser.KW_AUTOEXTEND_SIZE:
            case MySqlParser.KW_AUTO_INCREMENT:
            case MySqlParser.KW_AVG_ROW_LENGTH:
            case MySqlParser.KW_BEGIN:
            case MySqlParser.KW_BINLOG:
            case MySqlParser.KW_BIT:
            case MySqlParser.KW_BLOCK:
            case MySqlParser.KW_BOOL:
            case MySqlParser.KW_BOOLEAN:
            case MySqlParser.KW_BTREE:
            case MySqlParser.KW_CACHE:
            case MySqlParser.KW_CASCADED:
            case MySqlParser.KW_CHAIN:
            case MySqlParser.KW_CHANGED:
            case MySqlParser.KW_CHANNEL:
            case MySqlParser.KW_CHECKSUM:
            case MySqlParser.KW_CIPHER:
            case MySqlParser.KW_CLASS_ORIGIN:
            case MySqlParser.KW_CLIENT:
            case MySqlParser.KW_CLOSE:
            case MySqlParser.KW_COALESCE:
            case MySqlParser.KW_CODE:
            case MySqlParser.KW_COLUMNS:
            case MySqlParser.KW_COLUMN_FORMAT:
            case MySqlParser.KW_COLUMN_NAME:
            case MySqlParser.KW_COMMENT:
            case MySqlParser.KW_COMMIT:
            case MySqlParser.KW_COMPACT:
            case MySqlParser.KW_COMPLETION:
            case MySqlParser.KW_COMPRESSED:
            case MySqlParser.KW_COMPRESSION:
            case MySqlParser.KW_CONCURRENT:
            case MySqlParser.KW_CONNECT:
            case MySqlParser.KW_CONNECTION:
            case MySqlParser.KW_CONSISTENT:
            case MySqlParser.KW_CONSTRAINT_CATALOG:
            case MySqlParser.KW_CONSTRAINT_SCHEMA:
            case MySqlParser.KW_CONSTRAINT_NAME:
            case MySqlParser.KW_CONTAINS:
            case MySqlParser.KW_CONTEXT:
            case MySqlParser.KW_CONTRIBUTORS:
            case MySqlParser.KW_COPY:
            case MySqlParser.KW_CPU:
            case MySqlParser.KW_CURSOR_NAME:
            case MySqlParser.KW_DATA:
            case MySqlParser.KW_DATAFILE:
            case MySqlParser.KW_DEALLOCATE:
            case MySqlParser.KW_DEFAULT_AUTH:
            case MySqlParser.KW_DEFINER:
            case MySqlParser.KW_DELAY_KEY_WRITE:
            case MySqlParser.KW_DES_KEY_FILE:
            case MySqlParser.KW_DIRECTORY:
            case MySqlParser.KW_DISABLE:
            case MySqlParser.KW_DISCARD:
            case MySqlParser.KW_DISK:
            case MySqlParser.KW_DO:
            case MySqlParser.KW_DUMPFILE:
            case MySqlParser.KW_DUPLICATE:
            case MySqlParser.KW_DYNAMIC:
            case MySqlParser.KW_ENABLE:
            case MySqlParser.KW_ENCRYPTION:
            case MySqlParser.KW_END:
            case MySqlParser.KW_ENDS:
            case MySqlParser.KW_ENGINE:
            case MySqlParser.KW_ENGINES:
            case MySqlParser.KW_ERROR:
            case MySqlParser.KW_ERRORS:
            case MySqlParser.KW_ESCAPE:
            case MySqlParser.KW_EVENT:
            case MySqlParser.KW_EVENTS:
            case MySqlParser.KW_EVERY:
            case MySqlParser.KW_EXCHANGE:
            case MySqlParser.KW_EXCLUSIVE:
            case MySqlParser.KW_EXPIRE:
            case MySqlParser.KW_EXPORT:
            case MySqlParser.KW_EXTENDED:
            case MySqlParser.KW_EXTENT_SIZE:
            case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
            case MySqlParser.KW_FAST:
            case MySqlParser.KW_FAULTS:
            case MySqlParser.KW_FIELDS:
            case MySqlParser.KW_FILE_BLOCK_SIZE:
            case MySqlParser.KW_FILTER:
            case MySqlParser.KW_FIRST:
            case MySqlParser.KW_FIXED:
            case MySqlParser.KW_FLUSH:
            case MySqlParser.KW_FOLLOWS:
            case MySqlParser.KW_FOUND:
            case MySqlParser.KW_FULL:
            case MySqlParser.KW_FUNCTION:
            case MySqlParser.KW_GENERAL:
            case MySqlParser.KW_GLOBAL:
            case MySqlParser.KW_GRANTS:
            case MySqlParser.KW_GROUP_REPLICATION:
            case MySqlParser.KW_HANDLER:
            case MySqlParser.KW_HASH:
            case MySqlParser.KW_HELP:
            case MySqlParser.KW_HISTORY:
            case MySqlParser.KW_HOST:
            case MySqlParser.KW_HOSTS:
            case MySqlParser.KW_IDENTIFIED:
            case MySqlParser.KW_IGNORE_SERVER_IDS:
            case MySqlParser.KW_IMPORT:
            case MySqlParser.KW_INDEXES:
            case MySqlParser.KW_INITIAL_SIZE:
            case MySqlParser.KW_INPLACE:
            case MySqlParser.KW_INSERT_METHOD:
            case MySqlParser.KW_INSTALL:
            case MySqlParser.KW_INSTANCE:
            case MySqlParser.KW_INSTANT:
            case MySqlParser.KW_INVISIBLE:
            case MySqlParser.KW_INVOKER:
            case MySqlParser.KW_IO:
            case MySqlParser.KW_IO_THREAD:
            case MySqlParser.KW_IPC:
            case MySqlParser.KW_ISOLATION:
            case MySqlParser.KW_ISSUER:
            case MySqlParser.KW_JSON:
            case MySqlParser.KW_KEY_BLOCK_SIZE:
            case MySqlParser.KW_LANGUAGE:
            case MySqlParser.KW_LAST:
            case MySqlParser.KW_LEAVES:
            case MySqlParser.KW_LESS:
            case MySqlParser.KW_LEVEL:
            case MySqlParser.KW_LIST:
            case MySqlParser.KW_LOCAL:
            case MySqlParser.KW_LOGFILE:
            case MySqlParser.KW_LOGS:
            case MySqlParser.KW_MASTER:
            case MySqlParser.KW_MASTER_AUTO_POSITION:
            case MySqlParser.KW_MASTER_CONNECT_RETRY:
            case MySqlParser.KW_MASTER_DELAY:
            case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
            case MySqlParser.KW_MASTER_HOST:
            case MySqlParser.KW_MASTER_LOG_FILE:
            case MySqlParser.KW_MASTER_LOG_POS:
            case MySqlParser.KW_MASTER_PASSWORD:
            case MySqlParser.KW_MASTER_PORT:
            case MySqlParser.KW_MASTER_RETRY_COUNT:
            case MySqlParser.KW_MASTER_SSL:
            case MySqlParser.KW_MASTER_SSL_CA:
            case MySqlParser.KW_MASTER_SSL_CAPATH:
            case MySqlParser.KW_MASTER_SSL_CERT:
            case MySqlParser.KW_MASTER_SSL_CIPHER:
            case MySqlParser.KW_MASTER_SSL_CRL:
            case MySqlParser.KW_MASTER_SSL_CRLPATH:
            case MySqlParser.KW_MASTER_SSL_KEY:
            case MySqlParser.KW_MASTER_TLS_VERSION:
            case MySqlParser.KW_MASTER_USER:
            case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
            case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
            case MySqlParser.KW_MAX_ROWS:
            case MySqlParser.KW_MAX_SIZE:
            case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
            case MySqlParser.KW_MAX_USER_CONNECTIONS:
            case MySqlParser.KW_MEDIUM:
            case MySqlParser.KW_MEMBER:
            case MySqlParser.KW_MERGE:
            case MySqlParser.KW_MESSAGE_TEXT:
            case MySqlParser.KW_MID:
            case MySqlParser.KW_MIGRATE:
            case MySqlParser.KW_MIN_ROWS:
            case MySqlParser.KW_MODE:
            case MySqlParser.KW_MODIFY:
            case MySqlParser.KW_MUTEX:
            case MySqlParser.KW_MYSQL:
            case MySqlParser.KW_MYSQL_ERRNO:
            case MySqlParser.KW_NAME:
            case MySqlParser.KW_NAMES:
            case MySqlParser.KW_NCHAR:
            case MySqlParser.KW_NEVER:
            case MySqlParser.KW_NEXT:
            case MySqlParser.KW_NO:
            case MySqlParser.KW_NOWAIT:
            case MySqlParser.KW_NODEGROUP:
            case MySqlParser.KW_NONE:
            case MySqlParser.KW_ODBC:
            case MySqlParser.KW_OFFLINE:
            case MySqlParser.KW_OFFSET:
            case MySqlParser.KW_OF:
            case MySqlParser.KW_OLD_PASSWORD:
            case MySqlParser.KW_ONE:
            case MySqlParser.KW_ONLINE:
            case MySqlParser.KW_ONLY:
            case MySqlParser.KW_OPEN:
            case MySqlParser.KW_OPTIMIZER_COSTS:
            case MySqlParser.KW_OPTIONS:
            case MySqlParser.KW_OWNER:
            case MySqlParser.KW_PACK_KEYS:
            case MySqlParser.KW_PAGE:
            case MySqlParser.KW_PAGE_CHECKSUM:
            case MySqlParser.KW_PARSER:
            case MySqlParser.KW_PARTIAL:
            case MySqlParser.KW_PARTITIONING:
            case MySqlParser.KW_PARTITIONS:
            case MySqlParser.KW_PASSWORD:
            case MySqlParser.KW_PASSWORD_LOCK_TIME:
            case MySqlParser.KW_PHASE:
            case MySqlParser.KW_PLUGIN:
            case MySqlParser.KW_PLUGIN_DIR:
            case MySqlParser.KW_PLUGINS:
            case MySqlParser.KW_PORT:
            case MySqlParser.KW_PRECEDES:
            case MySqlParser.KW_PREPARE:
            case MySqlParser.KW_PRESERVE:
            case MySqlParser.KW_PREV:
            case MySqlParser.KW_PROCESSLIST:
            case MySqlParser.KW_PROFILE:
            case MySqlParser.KW_PROFILES:
            case MySqlParser.KW_PROXY:
            case MySqlParser.KW_QUERY:
            case MySqlParser.KW_QUICK:
            case MySqlParser.KW_REBUILD:
            case MySqlParser.KW_RECOVER:
            case MySqlParser.KW_RECURSIVE:
            case MySqlParser.KW_REDO_BUFFER_SIZE:
            case MySqlParser.KW_REDUNDANT:
            case MySqlParser.KW_RELAY:
            case MySqlParser.KW_RELAY_LOG_FILE:
            case MySqlParser.KW_RELAY_LOG_POS:
            case MySqlParser.KW_RELAYLOG:
            case MySqlParser.KW_REMOVE:
            case MySqlParser.KW_REORGANIZE:
            case MySqlParser.KW_REPAIR:
            case MySqlParser.KW_REPLICATE_DO_DB:
            case MySqlParser.KW_REPLICATE_DO_TABLE:
            case MySqlParser.KW_REPLICATE_IGNORE_DB:
            case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATE_REWRITE_DB:
            case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
            case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATION:
            case MySqlParser.KW_RESET:
            case MySqlParser.KW_RESUME:
            case MySqlParser.KW_RETURNED_SQLSTATE:
            case MySqlParser.KW_RETURNS:
            case MySqlParser.KW_REUSE:
            case MySqlParser.KW_ROLE:
            case MySqlParser.KW_ROLLBACK:
            case MySqlParser.KW_ROLLUP:
            case MySqlParser.KW_ROTATE:
            case MySqlParser.KW_ROW:
            case MySqlParser.KW_ROWS:
            case MySqlParser.KW_ROW_FORMAT:
            case MySqlParser.KW_SAVEPOINT:
            case MySqlParser.KW_SCHEDULE:
            case MySqlParser.KW_SECURITY:
            case MySqlParser.KW_SERVER:
            case MySqlParser.KW_SESSION:
            case MySqlParser.KW_SHARE:
            case MySqlParser.KW_SHARED:
            case MySqlParser.KW_SIGNED:
            case MySqlParser.KW_SIMPLE:
            case MySqlParser.KW_SLAVE:
            case MySqlParser.KW_SLOW:
            case MySqlParser.KW_SNAPSHOT:
            case MySqlParser.KW_SOCKET:
            case MySqlParser.KW_SOME:
            case MySqlParser.KW_SONAME:
            case MySqlParser.KW_SOUNDS:
            case MySqlParser.KW_SOURCE:
            case MySqlParser.KW_SQL_AFTER_GTIDS:
            case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
            case MySqlParser.KW_SQL_BEFORE_GTIDS:
            case MySqlParser.KW_SQL_BUFFER_RESULT:
            case MySqlParser.KW_SQL_CACHE:
            case MySqlParser.KW_SQL_NO_CACHE:
            case MySqlParser.KW_SQL_THREAD:
            case MySqlParser.KW_START:
            case MySqlParser.KW_STARTS:
            case MySqlParser.KW_STATS_AUTO_RECALC:
            case MySqlParser.KW_STATS_PERSISTENT:
            case MySqlParser.KW_STATS_SAMPLE_PAGES:
            case MySqlParser.KW_STATUS:
            case MySqlParser.KW_STOP:
            case MySqlParser.KW_STORAGE:
            case MySqlParser.KW_STRING:
            case MySqlParser.KW_SUBCLASS_ORIGIN:
            case MySqlParser.KW_SUBJECT:
            case MySqlParser.KW_SUBPARTITION:
            case MySqlParser.KW_SUBPARTITIONS:
            case MySqlParser.KW_SUSPEND:
            case MySqlParser.KW_SWAPS:
            case MySqlParser.KW_SWITCHES:
            case MySqlParser.KW_TABLE_NAME:
            case MySqlParser.KW_TABLESPACE:
            case MySqlParser.KW_TABLE_TYPE:
            case MySqlParser.KW_TEMPORARY:
            case MySqlParser.KW_TEMPTABLE:
            case MySqlParser.KW_THAN:
            case MySqlParser.KW_TRADITIONAL:
            case MySqlParser.KW_TRANSACTION:
            case MySqlParser.KW_TRANSACTIONAL:
            case MySqlParser.KW_TRIGGERS:
            case MySqlParser.KW_TRUNCATE:
            case MySqlParser.KW_UNBOUNDED:
            case MySqlParser.KW_UNDEFINED:
            case MySqlParser.KW_UNDOFILE:
            case MySqlParser.KW_UNDO_BUFFER_SIZE:
            case MySqlParser.KW_UNINSTALL:
            case MySqlParser.KW_UNKNOWN:
            case MySqlParser.KW_UNTIL:
            case MySqlParser.KW_UPGRADE:
            case MySqlParser.KW_USER:
            case MySqlParser.KW_USE_FRM:
            case MySqlParser.KW_USER_RESOURCES:
            case MySqlParser.KW_VALIDATION:
            case MySqlParser.KW_VALUE:
            case MySqlParser.KW_VARIABLES:
            case MySqlParser.KW_VIEW:
            case MySqlParser.KW_VIRTUAL:
            case MySqlParser.KW_VISIBLE:
            case MySqlParser.KW_WAIT:
            case MySqlParser.KW_WARNINGS:
            case MySqlParser.KW_WITHOUT:
            case MySqlParser.KW_WORK:
            case MySqlParser.KW_WRAPPER:
            case MySqlParser.KW_X509:
            case MySqlParser.KW_XA:
            case MySqlParser.KW_XML:
            case MySqlParser.KW_QUARTER:
            case MySqlParser.KW_MONTH:
            case MySqlParser.KW_DAY:
            case MySqlParser.KW_HOUR:
            case MySqlParser.KW_MINUTE:
            case MySqlParser.KW_WEEK:
            case MySqlParser.KW_SECOND:
            case MySqlParser.KW_MICROSECOND:
            case MySqlParser.KW_ADMIN:
            case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
            case MySqlParser.KW_AUDIT_ADMIN:
            case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
            case MySqlParser.KW_BACKUP_ADMIN:
            case MySqlParser.KW_BINLOG_ADMIN:
            case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
            case MySqlParser.KW_CLONE_ADMIN:
            case MySqlParser.KW_CONNECTION_ADMIN:
            case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
            case MySqlParser.KW_EXECUTE:
            case MySqlParser.KW_FILE:
            case MySqlParser.KW_FIREWALL_ADMIN:
            case MySqlParser.KW_FIREWALL_EXEMPT:
            case MySqlParser.KW_FIREWALL_USER:
            case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
            case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
            case MySqlParser.KW_INVOKE:
            case MySqlParser.KW_LAMBDA:
            case MySqlParser.KW_NDB_STORED_USER:
            case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
            case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
            case MySqlParser.KW_PRIVILEGES:
            case MySqlParser.KW_PROCESS:
            case MySqlParser.KW_RELOAD:
            case MySqlParser.KW_REPLICATION_APPLIER:
            case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_USER:
            case MySqlParser.KW_ROLE_ADMIN:
            case MySqlParser.KW_ROUTINE:
            case MySqlParser.KW_S3:
            case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
            case MySqlParser.KW_SET_USER_ID:
            case MySqlParser.KW_SHOW_ROUTINE:
            case MySqlParser.KW_SHUTDOWN:
            case MySqlParser.KW_SUPER:
            case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
            case MySqlParser.KW_TABLES:
            case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
            case MySqlParser.KW_VERSION_TOKEN_ADMIN:
            case MySqlParser.KW_XA_RECOVER_ADMIN:
            case MySqlParser.KW_ARMSCII8:
            case MySqlParser.KW_ASCII:
            case MySqlParser.KW_BIG5:
            case MySqlParser.KW_CP1250:
            case MySqlParser.KW_CP1251:
            case MySqlParser.KW_CP1256:
            case MySqlParser.KW_CP1257:
            case MySqlParser.KW_CP850:
            case MySqlParser.KW_CP852:
            case MySqlParser.KW_CP866:
            case MySqlParser.KW_CP932:
            case MySqlParser.KW_DEC8:
            case MySqlParser.KW_EUCJPMS:
            case MySqlParser.KW_EUCKR:
            case MySqlParser.KW_GB18030:
            case MySqlParser.KW_GB2312:
            case MySqlParser.KW_GBK:
            case MySqlParser.KW_GEOSTD8:
            case MySqlParser.KW_GREEK:
            case MySqlParser.KW_HEBREW:
            case MySqlParser.KW_HP8:
            case MySqlParser.KW_KEYBCS2:
            case MySqlParser.KW_KOI8R:
            case MySqlParser.KW_KOI8U:
            case MySqlParser.KW_LATIN1:
            case MySqlParser.KW_LATIN2:
            case MySqlParser.KW_LATIN5:
            case MySqlParser.KW_LATIN7:
            case MySqlParser.KW_MACCE:
            case MySqlParser.KW_MACROMAN:
            case MySqlParser.KW_SJIS:
            case MySqlParser.KW_SWE7:
            case MySqlParser.KW_TIS620:
            case MySqlParser.KW_UCS2:
            case MySqlParser.KW_UJIS:
            case MySqlParser.KW_UTF16:
            case MySqlParser.KW_UTF16LE:
            case MySqlParser.KW_UTF32:
            case MySqlParser.KW_UTF8:
            case MySqlParser.KW_UTF8MB3:
            case MySqlParser.KW_UTF8MB4:
            case MySqlParser.KW_ARCHIVE:
            case MySqlParser.KW_BLACKHOLE:
            case MySqlParser.KW_CSV:
            case MySqlParser.KW_FEDERATED:
            case MySqlParser.KW_INNODB:
            case MySqlParser.KW_MEMORY:
            case MySqlParser.KW_MRG_MYISAM:
            case MySqlParser.KW_MYISAM:
            case MySqlParser.KW_NDB:
            case MySqlParser.KW_NDBCLUSTER:
            case MySqlParser.KW_PERFORMANCE_SCHEMA:
            case MySqlParser.KW_TOKUDB:
            case MySqlParser.KW_REPEATABLE:
            case MySqlParser.KW_COMMITTED:
            case MySqlParser.KW_UNCOMMITTED:
            case MySqlParser.KW_SERIALIZABLE:
            case MySqlParser.KW_GEOMETRYCOLLECTION:
            case MySqlParser.KW_LINESTRING:
            case MySqlParser.KW_MULTILINESTRING:
            case MySqlParser.KW_MULTIPOINT:
            case MySqlParser.KW_MULTIPOLYGON:
            case MySqlParser.KW_POINT:
            case MySqlParser.KW_POLYGON:
            case MySqlParser.KW_CATALOG_NAME:
            case MySqlParser.KW_CHARSET:
            case MySqlParser.KW_COLLATION:
            case MySqlParser.KW_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_FORMAT:
            case MySqlParser.KW_GET_FORMAT:
            case MySqlParser.KW_RANDOM:
            case MySqlParser.KW_REVERSE:
            case MySqlParser.KW_ROW_COUNT:
            case MySqlParser.KW_SCHEMA_NAME:
            case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_SRID:
            case MySqlParser.KW_SYSTEM_USER:
            case MySqlParser.KW_TP_CONNECTION_ADMIN:
            case MySqlParser.KW_WEIGHT_STRING:
            case MySqlParser.MOD:
            case MySqlParser.ID:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4346;
                this.simpleId();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public startTransaction(): StartTransactionContext {
        let localContext = new StartTransactionContext(this.context, this.state);
        this.enterRule(localContext, 316, MySqlParser.RULE_startTransaction);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4349;
            this.match(MySqlParser.KW_START);
            this.state = 4350;
            this.match(MySqlParser.KW_TRANSACTION);
            this.state = 4359;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 621, this.context) ) {
            case 1:
                {
                this.state = 4351;
                this.transactionMode();
                this.state = 4356;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 4352;
                    this.match(MySqlParser.COMMA);
                    this.state = 4353;
                    this.transactionMode();
                    }
                    }
                    this.state = 4358;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public beginWork(): BeginWorkContext {
        let localContext = new BeginWorkContext(this.context, this.state);
        this.enterRule(localContext, 318, MySqlParser.RULE_beginWork);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4361;
            this.match(MySqlParser.KW_BEGIN);
            this.state = 4363;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 691) {
                {
                this.state = 4362;
                this.match(MySqlParser.KW_WORK);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public commitWork(): CommitWorkContext {
        let localContext = new CommitWorkContext(this.context, this.state);
        this.enterRule(localContext, 320, MySqlParser.RULE_commitWork);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4365;
            this.match(MySqlParser.KW_COMMIT);
            this.state = 4367;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 691) {
                {
                this.state = 4366;
                this.match(MySqlParser.KW_WORK);
                }
            }

            this.state = 4374;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 11) {
                {
                this.state = 4369;
                this.match(MySqlParser.KW_AND);
                this.state = 4371;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 502) {
                    {
                    this.state = 4370;
                    localContext._nochain = this.match(MySqlParser.KW_NO);
                    }
                }

                this.state = 4373;
                this.match(MySqlParser.KW_CHAIN);
                }
            }

            this.state = 4380;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 627, this.context) ) {
            case 1:
                {
                this.state = 4377;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 502) {
                    {
                    this.state = 4376;
                    localContext._norelease = this.match(MySqlParser.KW_NO);
                    }
                }

                this.state = 4379;
                this.match(MySqlParser.KW_RELEASE);
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public rollbackWork(): RollbackWorkContext {
        let localContext = new RollbackWorkContext(this.context, this.state);
        this.enterRule(localContext, 322, MySqlParser.RULE_rollbackWork);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4382;
            this.match(MySqlParser.KW_ROLLBACK);
            this.state = 4384;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 691) {
                {
                this.state = 4383;
                this.match(MySqlParser.KW_WORK);
                }
            }

            this.state = 4391;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 11) {
                {
                this.state = 4386;
                this.match(MySqlParser.KW_AND);
                this.state = 4388;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 502) {
                    {
                    this.state = 4387;
                    localContext._nochain = this.match(MySqlParser.KW_NO);
                    }
                }

                this.state = 4390;
                this.match(MySqlParser.KW_CHAIN);
                }
            }

            this.state = 4397;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 632, this.context) ) {
            case 1:
                {
                this.state = 4394;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 502) {
                    {
                    this.state = 4393;
                    localContext._norelease = this.match(MySqlParser.KW_NO);
                    }
                }

                this.state = 4396;
                this.match(MySqlParser.KW_RELEASE);
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public savepointStatement(): SavepointStatementContext {
        let localContext = new SavepointStatementContext(this.context, this.state);
        this.enterRule(localContext, 324, MySqlParser.RULE_savepointStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4399;
            this.match(MySqlParser.KW_SAVEPOINT);
            this.state = 4400;
            localContext._identifier = this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public rollbackStatement(): RollbackStatementContext {
        let localContext = new RollbackStatementContext(this.context, this.state);
        this.enterRule(localContext, 326, MySqlParser.RULE_rollbackStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4402;
            this.match(MySqlParser.KW_ROLLBACK);
            this.state = 4404;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 691) {
                {
                this.state = 4403;
                this.match(MySqlParser.KW_WORK);
                }
            }

            this.state = 4406;
            this.match(MySqlParser.KW_TO);
            this.state = 4408;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 634, this.context) ) {
            case 1:
                {
                this.state = 4407;
                this.match(MySqlParser.KW_SAVEPOINT);
                }
                break;
            }
            this.state = 4410;
            localContext._identifier = this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public releaseStatement(): ReleaseStatementContext {
        let localContext = new ReleaseStatementContext(this.context, this.state);
        this.enterRule(localContext, 328, MySqlParser.RULE_releaseStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4412;
            this.match(MySqlParser.KW_RELEASE);
            this.state = 4413;
            this.match(MySqlParser.KW_SAVEPOINT);
            this.state = 4414;
            localContext._identifier = this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public lockTables(): LockTablesContext {
        let localContext = new LockTablesContext(this.context, this.state);
        this.enterRule(localContext, 330, MySqlParser.RULE_lockTables);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4416;
            this.match(MySqlParser.KW_LOCK);
            this.state = 4417;
            _la = this.tokenStream.LA(1);
            if(!(_la === 173 || _la === 752)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 4418;
            this.lockTableElement();
            this.state = 4423;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 4419;
                this.match(MySqlParser.COMMA);
                this.state = 4420;
                this.lockTableElement();
                }
                }
                this.state = 4425;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public unlockTables(): UnlockTablesContext {
        let localContext = new UnlockTablesContext(this.context, this.state);
        this.enterRule(localContext, 332, MySqlParser.RULE_unlockTables);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4426;
            this.match(MySqlParser.KW_UNLOCK);
            this.state = 4427;
            this.match(MySqlParser.KW_TABLES);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public setAutocommitStatement(): SetAutocommitStatementContext {
        let localContext = new SetAutocommitStatementContext(this.context, this.state);
        this.enterRule(localContext, 334, MySqlParser.RULE_setAutocommitStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4429;
            this.match(MySqlParser.KW_SET);
            this.state = 4430;
            this.match(MySqlParser.KW_AUTOCOMMIT);
            this.state = 4431;
            this.match(MySqlParser.EQUAL_SYMBOL);
            this.state = 4432;
            localContext._autocommitValue = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 871 || _la === 872)) {
                localContext._autocommitValue = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public setTransactionStatement(): SetTransactionStatementContext {
        let localContext = new SetTransactionStatementContext(this.context, this.state);
        this.enterRule(localContext, 336, MySqlParser.RULE_setTransactionStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4434;
            this.match(MySqlParser.KW_SET);
            this.state = 4436;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 413 || _la === 593) {
                {
                this.state = 4435;
                localContext._transactionContext = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 413 || _la === 593)) {
                    localContext._transactionContext = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 4438;
            this.match(MySqlParser.KW_TRANSACTION);
            this.state = 4439;
            this.transactionOption();
            this.state = 4444;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 4440;
                this.match(MySqlParser.COMMA);
                this.state = 4441;
                this.transactionOption();
                }
                }
                this.state = 4446;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public transactionMode(): TransactionModeContext {
        let localContext = new TransactionModeContext(this.context, this.state);
        this.enterRule(localContext, 338, MySqlParser.RULE_transactionMode);
        try {
            this.state = 4454;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 638, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4447;
                this.match(MySqlParser.KW_WITH);
                this.state = 4448;
                this.match(MySqlParser.KW_CONSISTENT);
                this.state = 4449;
                this.match(MySqlParser.KW_SNAPSHOT);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4450;
                this.match(MySqlParser.KW_READ);
                this.state = 4451;
                this.match(MySqlParser.KW_WRITE);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4452;
                this.match(MySqlParser.KW_READ);
                this.state = 4453;
                this.match(MySqlParser.KW_ONLY);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public lockTableElement(): LockTableElementContext {
        let localContext = new LockTableElementContext(this.context, this.state);
        this.enterRule(localContext, 340, MySqlParser.RULE_lockTableElement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4456;
            this.tableName();
            this.state = 4461;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074311168) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                {
                this.state = 4458;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 13) {
                    {
                    this.state = 4457;
                    this.match(MySqlParser.KW_AS);
                    }
                }

                this.state = 4460;
                localContext._alias = this.uid();
                }
            }

            this.state = 4463;
            this.lockAction();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public lockAction(): LockActionContext {
        let localContext = new LockActionContext(this.context, this.state);
        this.enterRule(localContext, 342, MySqlParser.RULE_lockAction);
        let _la: number;
        try {
            this.state = 4473;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_READ:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4465;
                this.match(MySqlParser.KW_READ);
                this.state = 4467;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 450) {
                    {
                    this.state = 4466;
                    this.match(MySqlParser.KW_LOCAL);
                    }
                }

                }
                break;
            case MySqlParser.KW_LOW_PRIORITY:
            case MySqlParser.KW_WRITE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4470;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 107) {
                    {
                    this.state = 4469;
                    this.match(MySqlParser.KW_LOW_PRIORITY);
                    }
                }

                this.state = 4472;
                this.match(MySqlParser.KW_WRITE);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public transactionOption(): TransactionOptionContext {
        let localContext = new TransactionOptionContext(this.context, this.state);
        this.enterRule(localContext, 344, MySqlParser.RULE_transactionOption);
        try {
            this.state = 4482;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 644, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4475;
                this.match(MySqlParser.KW_ISOLATION);
                this.state = 4476;
                this.match(MySqlParser.KW_LEVEL);
                this.state = 4477;
                this.transactionLevel();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4478;
                this.match(MySqlParser.KW_READ);
                this.state = 4479;
                this.match(MySqlParser.KW_WRITE);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4480;
                this.match(MySqlParser.KW_READ);
                this.state = 4481;
                this.match(MySqlParser.KW_ONLY);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public transactionLevel(): TransactionLevelContext {
        let localContext = new TransactionLevelContext(this.context, this.state);
        this.enterRule(localContext, 346, MySqlParser.RULE_transactionLevel);
        try {
            this.state = 4491;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 645, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4484;
                this.match(MySqlParser.KW_REPEATABLE);
                this.state = 4485;
                this.match(MySqlParser.KW_READ);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4486;
                this.match(MySqlParser.KW_READ);
                this.state = 4487;
                this.match(MySqlParser.KW_COMMITTED);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4488;
                this.match(MySqlParser.KW_READ);
                this.state = 4489;
                this.match(MySqlParser.KW_UNCOMMITTED);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4490;
                this.match(MySqlParser.KW_SERIALIZABLE);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public changeMaster(): ChangeMasterContext {
        let localContext = new ChangeMasterContext(this.context, this.state);
        this.enterRule(localContext, 348, MySqlParser.RULE_changeMaster);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4493;
            this.match(MySqlParser.KW_CHANGE);
            this.state = 4494;
            this.match(MySqlParser.KW_MASTER);
            this.state = 4495;
            this.match(MySqlParser.KW_TO);
            this.state = 4496;
            this.masterOption();
            this.state = 4501;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 4497;
                this.match(MySqlParser.COMMA);
                this.state = 4498;
                this.masterOption();
                }
                }
                this.state = 4503;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 4505;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 65) {
                {
                this.state = 4504;
                this.channelOption();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public changeReplicationFilter(): ChangeReplicationFilterContext {
        let localContext = new ChangeReplicationFilterContext(this.context, this.state);
        this.enterRule(localContext, 350, MySqlParser.RULE_changeReplicationFilter);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4507;
            this.match(MySqlParser.KW_CHANGE);
            this.state = 4508;
            this.match(MySqlParser.KW_REPLICATION);
            this.state = 4509;
            this.match(MySqlParser.KW_FILTER);
            this.state = 4510;
            this.replicationFilter();
            this.state = 4515;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 4511;
                this.match(MySqlParser.COMMA);
                this.state = 4512;
                this.replicationFilter();
                }
                }
                this.state = 4517;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 4519;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 65) {
                {
                this.state = 4518;
                this.channelOption();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public changeReplicationSource(): ChangeReplicationSourceContext {
        let localContext = new ChangeReplicationSourceContext(this.context, this.state);
        this.enterRule(localContext, 352, MySqlParser.RULE_changeReplicationSource);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4521;
            this.match(MySqlParser.KW_CHANGE);
            this.state = 4522;
            this.match(MySqlParser.KW_REPLICATION);
            this.state = 4523;
            this.match(MySqlParser.KW_SOURCE);
            this.state = 4524;
            this.match(MySqlParser.KW_TO);
            this.state = 4525;
            this.replicationSourceOption();
            this.state = 4530;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 4526;
                this.match(MySqlParser.COMMA);
                this.state = 4527;
                this.replicationSourceOption();
                }
                }
                this.state = 4532;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 4534;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 65) {
                {
                this.state = 4533;
                this.channelOption();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public purgeBinaryLogs(): PurgeBinaryLogsContext {
        let localContext = new PurgeBinaryLogsContext(this.context, this.state);
        this.enterRule(localContext, 354, MySqlParser.RULE_purgeBinaryLogs);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4536;
            this.match(MySqlParser.KW_PURGE);
            this.state = 4537;
            localContext._purgeFormat = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 228 || _la === 453)) {
                localContext._purgeFormat = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 4538;
            this.match(MySqlParser.KW_LOGS);
            this.state = 4543;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_TO:
                {
                this.state = 4539;
                this.match(MySqlParser.KW_TO);
                this.state = 4540;
                localContext._fileName = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_BEFORE:
                {
                this.state = 4541;
                this.match(MySqlParser.KW_BEFORE);
                this.state = 4542;
                localContext._timeValue = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public startSlaveOrReplica(): StartSlaveOrReplicaContext {
        let localContext = new StartSlaveOrReplicaContext(this.context, this.state);
        this.enterRule(localContext, 356, MySqlParser.RULE_startSlaveOrReplica);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4545;
            this.match(MySqlParser.KW_START);
            this.state = 4546;
            _la = this.tokenStream.LA(1);
            if(!(_la === 563 || _la === 598)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 4555;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 438 || _la === 639) {
                {
                this.state = 4547;
                this.threadType();
                this.state = 4552;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 4548;
                    this.match(MySqlParser.COMMA);
                    this.state = 4549;
                    this.threadType();
                    }
                    }
                    this.state = 4554;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
            }

            this.state = 4559;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 676) {
                {
                this.state = 4557;
                this.match(MySqlParser.KW_UNTIL);
                this.state = 4558;
                this.untilOption();
                }
            }

            this.state = 4564;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 363 || _la === 529 || _la === 535 || _la === 678) {
                {
                {
                this.state = 4561;
                this.connectionOptions();
                }
                }
                this.state = 4566;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 4568;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 65) {
                {
                this.state = 4567;
                this.channelOption();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public stopSlaveOrReplica(): StopSlaveOrReplicaContext {
        let localContext = new StopSlaveOrReplicaContext(this.context, this.state);
        this.enterRule(localContext, 358, MySqlParser.RULE_stopSlaveOrReplica);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4570;
            this.match(MySqlParser.KW_STOP);
            this.state = 4571;
            _la = this.tokenStream.LA(1);
            if(!(_la === 563 || _la === 598)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 4580;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 438 || _la === 639) {
                {
                this.state = 4572;
                this.threadType();
                this.state = 4577;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 4573;
                    this.match(MySqlParser.COMMA);
                    this.state = 4574;
                    this.threadType();
                    }
                    }
                    this.state = 4579;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
            }

            this.state = 4583;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 65) {
                {
                this.state = 4582;
                this.channelOption();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public startGroupReplication(): StartGroupReplicationContext {
        let localContext = new StartGroupReplicationContext(this.context, this.state);
        this.enterRule(localContext, 360, MySqlParser.RULE_startGroupReplication);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4585;
            this.match(MySqlParser.KW_START);
            this.state = 4586;
            this.match(MySqlParser.KW_GROUP_REPLICATION);
            this.state = 4590;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 678) {
                {
                this.state = 4587;
                this.match(MySqlParser.KW_USER);
                this.state = 4588;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4589;
                this.match(MySqlParser.STRING_LITERAL);
                }
            }

            this.state = 4596;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 662, this.context) ) {
            case 1:
                {
                this.state = 4592;
                this.match(MySqlParser.COMMA);
                this.state = 4593;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 4594;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4595;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            }
            this.state = 4602;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 868) {
                {
                this.state = 4598;
                this.match(MySqlParser.COMMA);
                this.state = 4599;
                this.match(MySqlParser.KW_DEFAULT_AUTH);
                this.state = 4600;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4601;
                this.match(MySqlParser.STRING_LITERAL);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public stopGroupReplication(): StopGroupReplicationContext {
        let localContext = new StopGroupReplicationContext(this.context, this.state);
        this.enterRule(localContext, 362, MySqlParser.RULE_stopGroupReplication);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4604;
            this.match(MySqlParser.KW_STOP);
            this.state = 4605;
            this.match(MySqlParser.KW_GROUP_REPLICATION);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public masterOption(): MasterOptionContext {
        let localContext = new MasterOptionContext(this.context, this.state);
        this.enterRule(localContext, 364, MySqlParser.RULE_masterOption);
        let _la: number;
        try {
            this.state = 4634;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_MASTER_BIND:
            case MySqlParser.KW_MASTER_COMPRESSION_ALGORITHMS:
            case MySqlParser.KW_MASTER_HOST:
            case MySqlParser.KW_MASTER_LOG_FILE:
            case MySqlParser.KW_MASTER_PASSWORD:
            case MySqlParser.KW_MASTER_PUBLIC_KEY_PATH:
            case MySqlParser.KW_MASTER_SSL_CA:
            case MySqlParser.KW_MASTER_SSL_CAPATH:
            case MySqlParser.KW_MASTER_SSL_CERT:
            case MySqlParser.KW_MASTER_SSL_CIPHER:
            case MySqlParser.KW_MASTER_SSL_CRL:
            case MySqlParser.KW_MASTER_SSL_CRLPATH:
            case MySqlParser.KW_MASTER_SSL_KEY:
            case MySqlParser.KW_MASTER_TLS_CIPHERSUITES:
            case MySqlParser.KW_MASTER_TLS_VERSION:
            case MySqlParser.KW_MASTER_USER:
            case MySqlParser.KW_NETWORK_NAMESPACE:
            case MySqlParser.KW_RELAY_LOG_FILE:
                localContext = new MasterStringOptionContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4607;
                this.stringMasterOption();
                this.state = 4608;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4609;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_MASTER_CONNECT_RETRY:
            case MySqlParser.KW_MASTER_DELAY:
            case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
            case MySqlParser.KW_MASTER_LOG_POS:
            case MySqlParser.KW_MASTER_PORT:
            case MySqlParser.KW_MASTER_RETRY_COUNT:
            case MySqlParser.KW_MASTER_ZSTD_COMPRESSION_LEVEL:
            case MySqlParser.KW_RELAY_LOG_POS:
                localContext = new MasterDecimalOptionContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4611;
                this.decimalMasterOption();
                this.state = 4612;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4613;
                this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_MASTER_SSL_VERIFY_SERVER_CERT:
            case MySqlParser.KW_GET_MASTER_PUBLIC_KEY:
            case MySqlParser.KW_GTID_ONLY:
            case MySqlParser.KW_MASTER_AUTO_POSITION:
            case MySqlParser.KW_MASTER_SSL:
            case MySqlParser.KW_REQUIRE_ROW_FORMAT:
            case MySqlParser.KW_SOURCE_CONNECTION_AUTO_FAILOVER:
                localContext = new MasterBoolOptionContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4615;
                this.boolMasterOption();
                this.state = 4616;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4617;
                (localContext as MasterBoolOptionContext)._boolVal = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 871 || _la === 872)) {
                    (localContext as MasterBoolOptionContext)._boolVal = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS:
            case MySqlParser.KW_PRIVILEGE_CHECKS_USER:
            case MySqlParser.KW_REQUIRE_TABLE_PRIMARY_KEY_CHECK:
                localContext = new V8AddMasterOptionContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4619;
                this.v8NewMasterOption();
                }
                break;
            case MySqlParser.KW_IGNORE_SERVER_IDS:
                localContext = new MasterUidListOptionContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4620;
                this.match(MySqlParser.KW_IGNORE_SERVER_IDS);
                this.state = 4621;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4622;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4631;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                    {
                    this.state = 4623;
                    (localContext as MasterUidListOptionContext)._server_id = this.uid();
                    this.state = 4628;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 868) {
                        {
                        {
                        this.state = 4624;
                        this.match(MySqlParser.COMMA);
                        this.state = 4625;
                        (localContext as MasterUidListOptionContext)._server_id = this.uid();
                        }
                        }
                        this.state = 4630;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    }
                }

                this.state = 4633;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public stringMasterOption(): StringMasterOptionContext {
        let localContext = new StringMasterOptionContext(this.context, this.state);
        this.enterRule(localContext, 366, MySqlParser.RULE_stringMasterOption);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4636;
            _la = this.tokenStream.LA(1);
            if(!(_la === 108 || ((((_la - 455)) & ~0x1F) === 0 && ((1 << (_la - 455)) & 4190897) !== 0) || _la === 499 || _la === 557)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public decimalMasterOption(): DecimalMasterOptionContext {
        let localContext = new DecimalMasterOptionContext(this.context, this.state);
        this.enterRule(localContext, 368, MySqlParser.RULE_decimalMasterOption);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4638;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 456)) & ~0x1F) === 0 && ((1 << (_la - 456)) & 2097831) !== 0) || _la === 558)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public boolMasterOption(): BoolMasterOptionContext {
        let localContext = new BoolMasterOptionContext(this.context, this.state);
        this.enterRule(localContext, 370, MySqlParser.RULE_boolMasterOption);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4640;
            _la = this.tokenStream.LA(1);
            if(!(_la === 109 || _la === 411 || _la === 416 || _la === 454 || _la === 466 || _la === 573 || _la === 617)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public v8NewMasterOption(): V8NewMasterOptionContext {
        let localContext = new V8NewMasterOptionContext(this.context, this.state);
        this.enterRule(localContext, 372, MySqlParser.RULE_v8NewMasterOption);
        let _la: number;
        try {
            this.state = 4655;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_PRIVILEGE_CHECKS_USER:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4642;
                this.match(MySqlParser.KW_PRIVILEGE_CHECKS_USER);
                this.state = 4643;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4644;
                _la = this.tokenStream.LA(1);
                if(!(_la === 116 || _la === 882)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_REQUIRE_TABLE_PRIMARY_KEY_CHECK:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4645;
                this.match(MySqlParser.KW_REQUIRE_TABLE_PRIMARY_KEY_CHECK);
                this.state = 4646;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4647;
                _la = this.tokenStream.LA(1);
                if(!(_la === 118 || _la === 119 || _la === 507)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4648;
                this.match(MySqlParser.KW_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS);
                this.state = 4649;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4653;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_OFF:
                    {
                    this.state = 4650;
                    this.match(MySqlParser.KW_OFF);
                    }
                    break;
                case MySqlParser.KW_LOCAL:
                    {
                    this.state = 4651;
                    this.match(MySqlParser.KW_LOCAL);
                    }
                    break;
                case MySqlParser.ZERO_DECIMAL:
                case MySqlParser.ONE_DECIMAL:
                case MySqlParser.TWO_DECIMAL:
                case MySqlParser.THREE_DECIMAL:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.DECIMAL_LITERAL:
                case MySqlParser.REAL_LITERAL:
                    {
                    this.state = 4652;
                    this.gtuidSet();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public replicationSourceOption(): ReplicationSourceOptionContext {
        let localContext = new ReplicationSourceOptionContext(this.context, this.state);
        this.enterRule(localContext, 374, MySqlParser.RULE_replicationSourceOption);
        let _la: number;
        try {
            this.state = 4684;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_NETWORK_NAMESPACE:
            case MySqlParser.KW_RELAY_LOG_FILE:
            case MySqlParser.KW_SOURCE_BIND:
            case MySqlParser.KW_SOURCE_HOST:
            case MySqlParser.KW_SOURCE_USER:
            case MySqlParser.KW_SOURCE_PASSWORD:
            case MySqlParser.KW_SOURCE_LOG_FILE:
            case MySqlParser.KW_SOURCE_COMPRESSION_ALGORITHMS:
            case MySqlParser.KW_SOURCE_SSL_CA:
            case MySqlParser.KW_SOURCE_SSL_CAPATH:
            case MySqlParser.KW_SOURCE_SSL_CERT:
            case MySqlParser.KW_SOURCE_SSL_CRL:
            case MySqlParser.KW_SOURCE_SSL_CRLPATH:
            case MySqlParser.KW_SOURCE_SSL_KEY:
            case MySqlParser.KW_SOURCE_SSL_CIPHER:
            case MySqlParser.KW_SOURCE_TLS_VERSION:
            case MySqlParser.KW_SOURCE_TLS_CIPHERSUITES:
            case MySqlParser.KW_SOURCE_PUBLIC_KEY_PATH:
                localContext = new SourceStringOptionContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4657;
                this.stringSourceOption();
                this.state = 4658;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4659;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_RELAY_LOG_POS:
            case MySqlParser.KW_SOURCE_PORT:
            case MySqlParser.KW_SOURCE_LOG_POS:
            case MySqlParser.KW_SOURCE_HEARTBEAT_PERIOD:
            case MySqlParser.KW_SOURCE_CONNECT_RETRY:
            case MySqlParser.KW_SOURCE_RETRY_COUNT:
            case MySqlParser.KW_SOURCE_DELAY:
            case MySqlParser.KW_SOURCE_ZSTD_COMPRESSION_LEVEL:
                localContext = new SourceDecimalOptionContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4661;
                this.decimalSourceOption();
                this.state = 4662;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4663;
                this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_GET_SOURCE_PUBLIC_KEY:
            case MySqlParser.KW_GTID_ONLY:
            case MySqlParser.KW_REQUIRE_ROW_FORMAT:
            case MySqlParser.KW_SOURCE_AUTO_POSITION:
            case MySqlParser.KW_SOURCE_CONNECTION_AUTO_FAILOVER:
            case MySqlParser.KW_SOURCE_SSL:
            case MySqlParser.KW_SOURCE_SSL_VERIFY_SERVER_CERT:
                localContext = new SourceBoolOptionContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4665;
                this.boolSourceOption();
                this.state = 4666;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4667;
                (localContext as SourceBoolOptionContext)._boolVal = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 871 || _la === 872)) {
                    (localContext as SourceBoolOptionContext)._boolVal = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS:
            case MySqlParser.KW_PRIVILEGE_CHECKS_USER:
            case MySqlParser.KW_REQUIRE_TABLE_PRIMARY_KEY_CHECK:
                localContext = new SourceOtherOptionContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4669;
                this.otherSourceOption();
                }
                break;
            case MySqlParser.KW_IGNORE_SERVER_IDS:
                localContext = new SourceUidListOptionContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4670;
                this.match(MySqlParser.KW_IGNORE_SERVER_IDS);
                this.state = 4671;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4672;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4681;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                    {
                    this.state = 4673;
                    (localContext as SourceUidListOptionContext)._server_id = this.uid();
                    this.state = 4678;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 868) {
                        {
                        {
                        this.state = 4674;
                        this.match(MySqlParser.COMMA);
                        this.state = 4675;
                        (localContext as SourceUidListOptionContext)._server_id = this.uid();
                        }
                        }
                        this.state = 4680;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    }
                }

                this.state = 4683;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public stringSourceOption(): StringSourceOptionContext {
        let localContext = new StringSourceOptionContext(this.context, this.state);
        this.enterRule(localContext, 376, MySqlParser.RULE_stringSourceOption);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4686;
            _la = this.tokenStream.LA(1);
            if(!(_la === 499 || _la === 557 || ((((_la - 606)) & ~0x1F) === 0 && ((1 << (_la - 606)) & 125771823) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public decimalSourceOption(): DecimalSourceOptionContext {
        let localContext = new DecimalSourceOptionContext(this.context, this.state);
        this.enterRule(localContext, 378, MySqlParser.RULE_decimalSourceOption);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4688;
            _la = this.tokenStream.LA(1);
            if(!(_la === 558 || ((((_la - 610)) & ~0x1F) === 0 && ((1 << (_la - 610)) & 1397) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public boolSourceOption(): BoolSourceOptionContext {
        let localContext = new BoolSourceOptionContext(this.context, this.state);
        this.enterRule(localContext, 380, MySqlParser.RULE_boolSourceOption);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4690;
            _la = this.tokenStream.LA(1);
            if(!(_la === 412 || _la === 416 || _la === 573 || ((((_la - 613)) & ~0x1F) === 0 && ((1 << (_la - 613)) & 65809) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public otherSourceOption(): OtherSourceOptionContext {
        let localContext = new OtherSourceOptionContext(this.context, this.state);
        this.enterRule(localContext, 382, MySqlParser.RULE_otherSourceOption);
        let _la: number;
        try {
            this.state = 4705;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_PRIVILEGE_CHECKS_USER:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4692;
                this.match(MySqlParser.KW_PRIVILEGE_CHECKS_USER);
                this.state = 4693;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4694;
                _la = this.tokenStream.LA(1);
                if(!(_la === 116 || _la === 882)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_REQUIRE_TABLE_PRIMARY_KEY_CHECK:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4695;
                this.match(MySqlParser.KW_REQUIRE_TABLE_PRIMARY_KEY_CHECK);
                this.state = 4696;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4697;
                _la = this.tokenStream.LA(1);
                if(!(_la === 70 || _la === 118 || _la === 119 || _la === 507)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4698;
                this.match(MySqlParser.KW_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS);
                this.state = 4699;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4703;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_OFF:
                    {
                    this.state = 4700;
                    this.match(MySqlParser.KW_OFF);
                    }
                    break;
                case MySqlParser.KW_LOCAL:
                    {
                    this.state = 4701;
                    this.match(MySqlParser.KW_LOCAL);
                    }
                    break;
                case MySqlParser.ZERO_DECIMAL:
                case MySqlParser.ONE_DECIMAL:
                case MySqlParser.TWO_DECIMAL:
                case MySqlParser.THREE_DECIMAL:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.DECIMAL_LITERAL:
                case MySqlParser.REAL_LITERAL:
                    {
                    this.state = 4702;
                    this.gtuidSet();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public channelOption(): ChannelOptionContext {
        let localContext = new ChannelOptionContext(this.context, this.state);
        this.enterRule(localContext, 384, MySqlParser.RULE_channelOption);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4707;
            this.match(MySqlParser.KW_FOR);
            this.state = 4708;
            this.match(MySqlParser.KW_CHANNEL);
            this.state = 4709;
            this.match(MySqlParser.STRING_LITERAL);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public replicationFilter(): ReplicationFilterContext {
        let localContext = new ReplicationFilterContext(this.context, this.state);
        this.enterRule(localContext, 386, MySqlParser.RULE_replicationFilter);
        let _la: number;
        try {
            this.state = 4774;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_REPLICATE_DO_DB:
                localContext = new DoDbReplicationContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4711;
                this.match(MySqlParser.KW_REPLICATE_DO_DB);
                this.state = 4712;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4713;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4714;
                this.databaseName();
                this.state = 4719;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 4715;
                    this.match(MySqlParser.COMMA);
                    this.state = 4716;
                    this.databaseName();
                    }
                    }
                    this.state = 4721;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 4722;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case MySqlParser.KW_REPLICATE_IGNORE_DB:
                localContext = new IgnoreDbReplicationContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4724;
                this.match(MySqlParser.KW_REPLICATE_IGNORE_DB);
                this.state = 4725;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4726;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4727;
                this.databaseName();
                this.state = 4732;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 4728;
                    this.match(MySqlParser.COMMA);
                    this.state = 4729;
                    this.databaseName();
                    }
                    }
                    this.state = 4734;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 4735;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case MySqlParser.KW_REPLICATE_DO_TABLE:
                localContext = new DoTableReplicationContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4737;
                this.match(MySqlParser.KW_REPLICATE_DO_TABLE);
                this.state = 4738;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4739;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4740;
                this.tableNames();
                this.state = 4741;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
                localContext = new IgnoreTableReplicationContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4743;
                this.match(MySqlParser.KW_REPLICATE_IGNORE_TABLE);
                this.state = 4744;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4745;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4746;
                this.tableNames();
                this.state = 4747;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
                localContext = new WildDoTableReplicationContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4749;
                this.match(MySqlParser.KW_REPLICATE_WILD_DO_TABLE);
                this.state = 4750;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4751;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4752;
                this.simpleStrings();
                this.state = 4753;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
                localContext = new WildIgnoreTableReplicationContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 4755;
                this.match(MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE);
                this.state = 4756;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4757;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4758;
                this.simpleStrings();
                this.state = 4759;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case MySqlParser.KW_REPLICATE_REWRITE_DB:
                localContext = new RewriteDbReplicationContext(localContext);
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 4761;
                this.match(MySqlParser.KW_REPLICATE_REWRITE_DB);
                this.state = 4762;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4763;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 4764;
                this.tablePair();
                this.state = 4769;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 4765;
                    this.match(MySqlParser.COMMA);
                    this.state = 4766;
                    this.tablePair();
                    }
                    }
                    this.state = 4771;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 4772;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tablePair(): TablePairContext {
        let localContext = new TablePairContext(this.context, this.state);
        this.enterRule(localContext, 388, MySqlParser.RULE_tablePair);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4776;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 4777;
            localContext._firstTable = this.tableName();
            this.state = 4778;
            this.match(MySqlParser.COMMA);
            this.state = 4779;
            localContext._secondTable = this.tableName();
            this.state = 4780;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public threadType(): ThreadTypeContext {
        let localContext = new ThreadTypeContext(this.context, this.state);
        this.enterRule(localContext, 390, MySqlParser.RULE_threadType);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4782;
            _la = this.tokenStream.LA(1);
            if(!(_la === 438 || _la === 639)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public untilOption(): UntilOptionContext {
        let localContext = new UntilOptionContext(this.context, this.state);
        this.enterRule(localContext, 392, MySqlParser.RULE_untilOption);
        let _la: number;
        try {
            this.state = 4809;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_SQL_AFTER_GTIDS:
            case MySqlParser.KW_SQL_BEFORE_GTIDS:
                localContext = new GtidsUntilOptionContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4784;
                (localContext as GtidsUntilOptionContext)._gtids = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 633 || _la === 635)) {
                    (localContext as GtidsUntilOptionContext)._gtids = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 4785;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4786;
                this.gtuidSet();
                }
                break;
            case MySqlParser.KW_MASTER_LOG_FILE:
                localContext = new MasterLogUntilOptionContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4787;
                this.match(MySqlParser.KW_MASTER_LOG_FILE);
                this.state = 4788;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4789;
                this.match(MySqlParser.STRING_LITERAL);
                this.state = 4790;
                this.match(MySqlParser.COMMA);
                this.state = 4791;
                this.match(MySqlParser.KW_MASTER_LOG_POS);
                this.state = 4792;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4793;
                this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_SOURCE_LOG_FILE:
                localContext = new SourceLogUntilOptionContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4794;
                this.match(MySqlParser.KW_SOURCE_LOG_FILE);
                this.state = 4795;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4796;
                this.match(MySqlParser.STRING_LITERAL);
                this.state = 4797;
                this.match(MySqlParser.COMMA);
                this.state = 4798;
                this.match(MySqlParser.KW_SOURCE_LOG_POS);
                this.state = 4799;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4800;
                this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_RELAY_LOG_FILE:
                localContext = new RelayLogUntilOptionContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4801;
                this.match(MySqlParser.KW_RELAY_LOG_FILE);
                this.state = 4802;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4803;
                this.match(MySqlParser.STRING_LITERAL);
                this.state = 4804;
                this.match(MySqlParser.COMMA);
                this.state = 4805;
                this.match(MySqlParser.KW_RELAY_LOG_POS);
                this.state = 4806;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4807;
                this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
                localContext = new SqlGapsUntilOptionContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 4808;
                this.match(MySqlParser.KW_SQL_AFTER_MTS_GAPS);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public connectionOptions(): ConnectionOptionsContext {
        let localContext = new ConnectionOptionsContext(this.context, this.state);
        this.enterRule(localContext, 394, MySqlParser.RULE_connectionOptions);
        try {
            this.state = 4823;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_USER:
                localContext = new UserConnectionOptionContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4811;
                this.match(MySqlParser.KW_USER);
                this.state = 4812;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4813;
                (localContext as UserConnectionOptionContext)._conOptUser = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_PASSWORD:
                localContext = new PasswordConnectionOptionContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4814;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 4815;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4816;
                (localContext as PasswordConnectionOptionContext)._conOptPassword = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_DEFAULT_AUTH:
                localContext = new DefaultAuthConnectionOptionContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 4817;
                this.match(MySqlParser.KW_DEFAULT_AUTH);
                this.state = 4818;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4819;
                (localContext as DefaultAuthConnectionOptionContext)._conOptDefAuth = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_PLUGIN_DIR:
                localContext = new PluginDirConnectionOptionContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 4820;
                this.match(MySqlParser.KW_PLUGIN_DIR);
                this.state = 4821;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 4822;
                (localContext as PluginDirConnectionOptionContext)._conOptPluginDir = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public gtuidSet(): GtuidSetContext {
        let localContext = new GtuidSetContext(this.context, this.state);
        this.enterRule(localContext, 396, MySqlParser.RULE_gtuidSet);
        try {
            let alternative: number;
            this.state = 4834;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.ZERO_DECIMAL:
            case MySqlParser.ONE_DECIMAL:
            case MySqlParser.TWO_DECIMAL:
            case MySqlParser.THREE_DECIMAL:
            case MySqlParser.DECIMAL_LITERAL:
            case MySqlParser.REAL_LITERAL:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4825;
                this.uuidSet();
                this.state = 4830;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 680, this.context);
                while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                    if (alternative === 1) {
                        {
                        {
                        this.state = 4826;
                        this.match(MySqlParser.COMMA);
                        this.state = 4827;
                        this.uuidSet();
                        }
                        }
                    }
                    this.state = 4832;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 680, this.context);
                }
                }
                break;
            case MySqlParser.STRING_LITERAL:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4833;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public xaStartTransaction(): XaStartTransactionContext {
        let localContext = new XaStartTransactionContext(this.context, this.state);
        this.enterRule(localContext, 398, MySqlParser.RULE_xaStartTransaction);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4836;
            this.match(MySqlParser.KW_XA);
            this.state = 4837;
            localContext._xaStart = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 317 || _la === 640)) {
                localContext._xaStart = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 4838;
            this.xid();
            this.state = 4840;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 91 || _la === 577) {
                {
                this.state = 4839;
                localContext._xaAction = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 91 || _la === 577)) {
                    localContext._xaAction = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public xaEndTransaction(): XaEndTransactionContext {
        let localContext = new XaEndTransactionContext(this.context, this.state);
        this.enterRule(localContext, 400, MySqlParser.RULE_xaEndTransaction);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4842;
            this.match(MySqlParser.KW_XA);
            this.state = 4843;
            this.match(MySqlParser.KW_END);
            this.state = 4844;
            this.xid();
            this.state = 4850;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 654) {
                {
                this.state = 4845;
                this.match(MySqlParser.KW_SUSPEND);
                this.state = 4848;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 65) {
                    {
                    this.state = 4846;
                    this.match(MySqlParser.KW_FOR);
                    this.state = 4847;
                    this.match(MySqlParser.KW_MIGRATE);
                    }
                }

                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public xaPrepareStatement(): XaPrepareStatementContext {
        let localContext = new XaPrepareStatementContext(this.context, this.state);
        this.enterRule(localContext, 402, MySqlParser.RULE_xaPrepareStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4852;
            this.match(MySqlParser.KW_XA);
            this.state = 4853;
            this.match(MySqlParser.KW_PREPARE);
            this.state = 4854;
            this.xid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public xaCommitWork(): XaCommitWorkContext {
        let localContext = new XaCommitWorkContext(this.context, this.state);
        this.enterRule(localContext, 404, MySqlParser.RULE_xaCommitWork);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4856;
            this.match(MySqlParser.KW_XA);
            this.state = 4857;
            this.match(MySqlParser.KW_COMMIT);
            this.state = 4858;
            this.xid();
            this.state = 4861;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 513) {
                {
                this.state = 4859;
                this.match(MySqlParser.KW_ONE);
                this.state = 4860;
                this.match(MySqlParser.KW_PHASE);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public xaRollbackWork(): XaRollbackWorkContext {
        let localContext = new XaRollbackWorkContext(this.context, this.state);
        this.enterRule(localContext, 406, MySqlParser.RULE_xaRollbackWork);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4863;
            this.match(MySqlParser.KW_XA);
            this.state = 4864;
            this.match(MySqlParser.KW_ROLLBACK);
            this.state = 4865;
            this.xid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public xaRecoverWork(): XaRecoverWorkContext {
        let localContext = new XaRecoverWorkContext(this.context, this.state);
        this.enterRule(localContext, 408, MySqlParser.RULE_xaRecoverWork);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4867;
            this.match(MySqlParser.KW_XA);
            this.state = 4868;
            this.match(MySqlParser.KW_RECOVER);
            this.state = 4871;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 33) {
                {
                this.state = 4869;
                this.match(MySqlParser.KW_CONVERT);
                this.state = 4870;
                this.xid();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public prepareStatement(): PrepareStatementContext {
        let localContext = new PrepareStatementContext(this.context, this.state);
        this.enterRule(localContext, 410, MySqlParser.RULE_prepareStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4873;
            this.match(MySqlParser.KW_PREPARE);
            this.state = 4874;
            localContext._stmt_name = this.uid();
            this.state = 4875;
            this.match(MySqlParser.KW_FROM);
            this.state = 4878;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.STRING_LITERAL:
                {
                this.state = 4876;
                localContext._query = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.LOCAL_ID:
                {
                this.state = 4877;
                localContext._variable = this.match(MySqlParser.LOCAL_ID);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public executeStatement(): ExecuteStatementContext {
        let localContext = new ExecuteStatementContext(this.context, this.state);
        this.enterRule(localContext, 412, MySqlParser.RULE_executeStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4880;
            this.match(MySqlParser.KW_EXECUTE);
            this.state = 4881;
            localContext._stmt_name = this.uid();
            this.state = 4884;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 188) {
                {
                this.state = 4882;
                this.match(MySqlParser.KW_USING);
                this.state = 4883;
                this.userVariables();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public deallocatePrepare(): DeallocatePrepareContext {
        let localContext = new DeallocatePrepareContext(this.context, this.state);
        this.enterRule(localContext, 414, MySqlParser.RULE_deallocatePrepare);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4886;
            localContext._dropFormat = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 51 || _la === 362)) {
                localContext._dropFormat = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 4887;
            this.match(MySqlParser.KW_PREPARE);
            this.state = 4888;
            localContext._stmt_name = this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public routineBody(): RoutineBodyContext {
        let localContext = new RoutineBodyContext(this.context, this.state);
        this.enterRule(localContext, 416, MySqlParser.RULE_routineBody);
        try {
            this.state = 4892;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 689, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 4890;
                this.blockStatement();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 4891;
                this.sqlStatement();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public blockStatement(): BlockStatementContext {
        let localContext = new BlockStatementContext(this.context, this.state);
        this.enterRule(localContext, 418, MySqlParser.RULE_blockStatement);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4897;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 690, this.context) ) {
            case 1:
                {
                this.state = 4894;
                localContext._begin = this.uid();
                this.state = 4895;
                this.match(MySqlParser.COLON_SYMB);
                }
                break;
            }
            this.state = 4899;
            this.match(MySqlParser.KW_BEGIN);
            this.state = 4905;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 691, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 4900;
                    this.declareVariable();
                    this.state = 4901;
                    this.match(MySqlParser.SEMI);
                    }
                    }
                }
                this.state = 4907;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 691, this.context);
            }
            this.state = 4913;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 692, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 4908;
                    this.declareCondition();
                    this.state = 4909;
                    this.match(MySqlParser.SEMI);
                    }
                    }
                }
                this.state = 4915;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 692, this.context);
            }
            this.state = 4921;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 693, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 4916;
                    this.declareCursor();
                    this.state = 4917;
                    this.match(MySqlParser.SEMI);
                    }
                    }
                }
                this.state = 4923;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 693, this.context);
            }
            this.state = 4929;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 41) {
                {
                {
                this.state = 4924;
                this.declareHandler();
                this.state = 4925;
                this.match(MySqlParser.SEMI);
                }
                }
                this.state = 4931;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 4935;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 695, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 4932;
                    this.procedureSqlStatement();
                    }
                    }
                }
                this.state = 4937;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 695, this.context);
            }
            this.state = 4938;
            this.match(MySqlParser.KW_END);
            this.state = 4940;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 696, this.context) ) {
            case 1:
                {
                this.state = 4939;
                localContext._end = this.uid();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public caseStatement(): CaseStatementContext {
        let localContext = new CaseStatementContext(this.context, this.state);
        this.enterRule(localContext, 420, MySqlParser.RULE_caseStatement);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4942;
            this.match(MySqlParser.KW_CASE);
            this.state = 4945;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 697, this.context) ) {
            case 1:
                {
                this.state = 4943;
                localContext._case_value = this.uid();
                }
                break;
            case 2:
                {
                this.state = 4944;
                this.expression(0);
                }
                break;
            }
            this.state = 4948;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            do {
                {
                {
                this.state = 4947;
                this.caseAlternative();
                }
                }
                this.state = 4950;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            } while (_la === 191);
            this.state = 4958;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 53) {
                {
                this.state = 4952;
                this.match(MySqlParser.KW_ELSE);
                this.state = 4954;
                this.errorHandler.sync(this);
                alternative = 1;
                do {
                    switch (alternative) {
                    case 1:
                        {
                        {
                        this.state = 4953;
                        this.procedureSqlStatement();
                        }
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    this.state = 4956;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 699, this.context);
                } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER);
                }
            }

            this.state = 4960;
            this.match(MySqlParser.KW_END);
            this.state = 4961;
            this.match(MySqlParser.KW_CASE);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public ifStatement(): IfStatementContext {
        let localContext = new IfStatementContext(this.context, this.state);
        this.enterRule(localContext, 422, MySqlParser.RULE_ifStatement);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4963;
            this.match(MySqlParser.KW_IF);
            this.state = 4964;
            this.expression(0);
            this.state = 4965;
            this.match(MySqlParser.KW_THEN);
            this.state = 4967;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 4966;
                    localContext._procedureSqlStatement = this.procedureSqlStatement();
                    localContext._thenStatements.push(localContext._procedureSqlStatement);
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 4969;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 701, this.context);
            } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER);
            this.state = 4974;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 54) {
                {
                {
                this.state = 4971;
                this.elifAlternative();
                }
                }
                this.state = 4976;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 4983;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 53) {
                {
                this.state = 4977;
                this.match(MySqlParser.KW_ELSE);
                this.state = 4979;
                this.errorHandler.sync(this);
                alternative = 1;
                do {
                    switch (alternative) {
                    case 1:
                        {
                        {
                        this.state = 4978;
                        localContext._procedureSqlStatement = this.procedureSqlStatement();
                        localContext._elseStatements.push(localContext._procedureSqlStatement);
                        }
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    this.state = 4981;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 703, this.context);
                } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER);
                }
            }

            this.state = 4985;
            this.match(MySqlParser.KW_END);
            this.state = 4986;
            this.match(MySqlParser.KW_IF);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public iterateStatement(): IterateStatementContext {
        let localContext = new IterateStatementContext(this.context, this.state);
        this.enterRule(localContext, 424, MySqlParser.RULE_iterateStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4988;
            this.match(MySqlParser.KW_ITERATE);
            this.state = 4989;
            localContext._label = this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public leaveStatement(): LeaveStatementContext {
        let localContext = new LeaveStatementContext(this.context, this.state);
        this.enterRule(localContext, 426, MySqlParser.RULE_leaveStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4991;
            this.match(MySqlParser.KW_LEAVE);
            this.state = 4992;
            localContext._label = this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public loopStatement(): LoopStatementContext {
        let localContext = new LoopStatementContext(this.context, this.state);
        this.enterRule(localContext, 428, MySqlParser.RULE_loopStatement);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 4997;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                {
                this.state = 4994;
                localContext._begin_label = this.uid();
                this.state = 4995;
                this.match(MySqlParser.COLON_SYMB);
                }
            }

            this.state = 4999;
            this.match(MySqlParser.KW_LOOP);
            this.state = 5001;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 5000;
                    this.procedureSqlStatement();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 5003;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 706, this.context);
            } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER);
            this.state = 5005;
            this.match(MySqlParser.KW_END);
            this.state = 5006;
            this.match(MySqlParser.KW_LOOP);
            this.state = 5008;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                {
                this.state = 5007;
                localContext._end_label = this.uid();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public repeatStatement(): RepeatStatementContext {
        let localContext = new RepeatStatementContext(this.context, this.state);
        this.enterRule(localContext, 430, MySqlParser.RULE_repeatStatement);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5013;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 708, this.context) ) {
            case 1:
                {
                this.state = 5010;
                localContext._begin_label = this.uid();
                this.state = 5011;
                this.match(MySqlParser.COLON_SYMB);
                }
                break;
            }
            this.state = 5015;
            this.match(MySqlParser.KW_REPEAT);
            this.state = 5017;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 5016;
                    this.procedureSqlStatement();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 5019;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 709, this.context);
            } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER);
            this.state = 5021;
            this.match(MySqlParser.KW_UNTIL);
            this.state = 5022;
            this.expression(0);
            this.state = 5023;
            this.match(MySqlParser.KW_END);
            this.state = 5024;
            this.match(MySqlParser.KW_REPEAT);
            this.state = 5026;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                {
                this.state = 5025;
                localContext._end_label = this.uid();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public returnStatement(): ReturnStatementContext {
        let localContext = new ReturnStatementContext(this.context, this.state);
        this.enterRule(localContext, 432, MySqlParser.RULE_returnStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5028;
            this.match(MySqlParser.KW_RETURN);
            this.state = 5029;
            this.expression(0);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public whileStatement(): WhileStatementContext {
        let localContext = new WhileStatementContext(this.context, this.state);
        this.enterRule(localContext, 434, MySqlParser.RULE_whileStatement);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5034;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                {
                this.state = 5031;
                localContext._begin_label = this.uid();
                this.state = 5032;
                this.match(MySqlParser.COLON_SYMB);
                }
            }

            this.state = 5036;
            this.match(MySqlParser.KW_WHILE);
            this.state = 5037;
            this.expression(0);
            this.state = 5038;
            this.match(MySqlParser.KW_DO);
            this.state = 5040;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 5039;
                    this.procedureSqlStatement();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 5042;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 712, this.context);
            } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER);
            this.state = 5044;
            this.match(MySqlParser.KW_END);
            this.state = 5045;
            this.match(MySqlParser.KW_WHILE);
            this.state = 5047;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014219) !== 0) || ((((_la - 74)) & ~0x1F) === 0 && ((1 << (_la - 74)) & 18878481) !== 0) || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 100679969) !== 0) || ((((_la - 150)) & ~0x1F) === 0 && ((1 << (_la - 150)) & 1049605) !== 0) || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 5374495) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 4294967295) !== 0) || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 4261412607) !== 0) || ((((_la - 317)) & ~0x1F) === 0 && ((1 << (_la - 317)) & 4160741375) !== 0) || ((((_la - 349)) & ~0x1F) === 0 && ((1 << (_la - 349)) & 4026531839) !== 0) || ((((_la - 381)) & ~0x1F) === 0 && ((1 << (_la - 381)) & 1055907839) !== 0) || ((((_la - 413)) & ~0x1F) === 0 && ((1 << (_la - 413)) & 4294885367) !== 0) || ((((_la - 445)) & ~0x1F) === 0 && ((1 << (_la - 445)) & 3757571071) !== 0) || ((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 3755999231) !== 0) || ((((_la - 510)) & ~0x1F) === 0 && ((1 << (_la - 510)) & 3751780349) !== 0) || ((((_la - 542)) & ~0x1F) === 0 && ((1 << (_la - 542)) & 2141183997) !== 0) || ((((_la - 575)) & ~0x1F) === 0 && ((1 << (_la - 575)) & 2147483629) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 4278189053) !== 0) || ((((_la - 697)) & ~0x1F) === 0 && ((1 << (_la - 697)) & 1644099327) !== 0) || ((((_la - 729)) & ~0x1F) === 0 && ((1 << (_la - 729)) & 4294900735) !== 0) || ((((_la - 761)) & ~0x1F) === 0 && ((1 << (_la - 761)) & 4294967295) !== 0) || ((((_la - 793)) & ~0x1F) === 0 && ((1 << (_la - 793)) & 4288675839) !== 0) || ((((_la - 825)) & ~0x1F) === 0 && ((1 << (_la - 825)) & 2147527671) !== 0) || ((((_la - 879)) & ~0x1F) === 0 && ((1 << (_la - 879)) & 1033) !== 0)) {
                {
                this.state = 5046;
                localContext._end_label = this.uid();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public cursorStatement(): CursorStatementContext {
        let localContext = new CursorStatementContext(this.context, this.state);
        this.enterRule(localContext, 436, MySqlParser.RULE_cursorStatement);
        let _la: number;
        try {
            this.state = 5064;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_CLOSE:
                localContext = new CloseCursorContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5049;
                this.match(MySqlParser.KW_CLOSE);
                this.state = 5050;
                (localContext as CloseCursorContext)._cursor_name = this.uid();
                }
                break;
            case MySqlParser.KW_FETCH:
                localContext = new FetchCursorContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5051;
                this.match(MySqlParser.KW_FETCH);
                this.state = 5056;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 715, this.context) ) {
                case 1:
                    {
                    this.state = 5053;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 501) {
                        {
                        this.state = 5052;
                        this.match(MySqlParser.KW_NEXT);
                        }
                    }

                    this.state = 5055;
                    this.match(MySqlParser.KW_FROM);
                    }
                    break;
                }
                this.state = 5058;
                (localContext as FetchCursorContext)._cursor_name = this.uid();
                this.state = 5059;
                this.match(MySqlParser.KW_INTO);
                this.state = 5060;
                (localContext as FetchCursorContext)._var_names = this.uidList();
                }
                break;
            case MySqlParser.KW_OPEN:
                localContext = new OpenCursorContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5062;
                this.match(MySqlParser.KW_OPEN);
                this.state = 5063;
                (localContext as OpenCursorContext)._cursor_name = this.uid();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public declareVariable(): DeclareVariableContext {
        let localContext = new DeclareVariableContext(this.context, this.state);
        this.enterRule(localContext, 438, MySqlParser.RULE_declareVariable);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5066;
            this.match(MySqlParser.KW_DECLARE);
            this.state = 5067;
            localContext._var_names = this.uidList();
            this.state = 5068;
            this.dataType();
            this.state = 5071;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 42) {
                {
                this.state = 5069;
                this.match(MySqlParser.KW_DEFAULT);
                this.state = 5070;
                this.expression(0);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public declareCondition(): DeclareConditionContext {
        let localContext = new DeclareConditionContext(this.context, this.state);
        this.enterRule(localContext, 440, MySqlParser.RULE_declareCondition);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5073;
            this.match(MySqlParser.KW_DECLARE);
            this.state = 5074;
            localContext._condition_name = this.uid();
            this.state = 5075;
            this.match(MySqlParser.KW_CONDITION);
            this.state = 5076;
            this.match(MySqlParser.KW_FOR);
            this.state = 5083;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.ZERO_DECIMAL:
            case MySqlParser.ONE_DECIMAL:
            case MySqlParser.TWO_DECIMAL:
            case MySqlParser.THREE_DECIMAL:
            case MySqlParser.DECIMAL_LITERAL:
            case MySqlParser.REAL_LITERAL:
                {
                this.state = 5077;
                this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_SQLSTATE:
                {
                this.state = 5078;
                this.match(MySqlParser.KW_SQLSTATE);
                this.state = 5080;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 682) {
                    {
                    this.state = 5079;
                    this.match(MySqlParser.KW_VALUE);
                    }
                }

                this.state = 5082;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public declareCursor(): DeclareCursorContext {
        let localContext = new DeclareCursorContext(this.context, this.state);
        this.enterRule(localContext, 442, MySqlParser.RULE_declareCursor);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5085;
            this.match(MySqlParser.KW_DECLARE);
            this.state = 5086;
            localContext._condition_name = this.uid();
            this.state = 5087;
            this.match(MySqlParser.KW_CURSOR);
            this.state = 5088;
            this.match(MySqlParser.KW_FOR);
            this.state = 5089;
            this.selectStatement();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public declareHandler(): DeclareHandlerContext {
        let localContext = new DeclareHandlerContext(this.context, this.state);
        this.enterRule(localContext, 444, MySqlParser.RULE_declareHandler);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5091;
            this.match(MySqlParser.KW_DECLARE);
            this.state = 5092;
            localContext._handlerAction = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 32 || _la === 61 || _la === 180)) {
                localContext._handlerAction = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 5093;
            this.match(MySqlParser.KW_HANDLER);
            this.state = 5094;
            this.match(MySqlParser.KW_FOR);
            this.state = 5095;
            this.handlerConditionValue();
            this.state = 5100;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 5096;
                this.match(MySqlParser.COMMA);
                this.state = 5097;
                this.handlerConditionValue();
                }
                }
                this.state = 5102;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 5103;
            this.routineBody();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public handlerConditionValue(): HandlerConditionValueContext {
        let localContext = new HandlerConditionValueContext(this.context, this.state);
        this.enterRule(localContext, 446, MySqlParser.RULE_handlerConditionValue);
        let _la: number;
        try {
            this.state = 5116;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.ZERO_DECIMAL:
            case MySqlParser.ONE_DECIMAL:
            case MySqlParser.TWO_DECIMAL:
            case MySqlParser.THREE_DECIMAL:
            case MySqlParser.DECIMAL_LITERAL:
            case MySqlParser.REAL_LITERAL:
                localContext = new HandlerConditionCodeContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5105;
                this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_SQLSTATE:
                localContext = new HandlerConditionStateContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5106;
                this.match(MySqlParser.KW_SQLSTATE);
                this.state = 5108;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 682) {
                    {
                    this.state = 5107;
                    this.match(MySqlParser.KW_VALUE);
                    }
                }

                this.state = 5110;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_ARRAY:
            case MySqlParser.KW_ATTRIBUTE:
            case MySqlParser.KW_BUCKETS:
            case MySqlParser.KW_CONDITION:
            case MySqlParser.KW_CURRENT:
            case MySqlParser.KW_CURRENT_USER:
            case MySqlParser.KW_DATABASE:
            case MySqlParser.KW_DEFAULT:
            case MySqlParser.KW_DIAGNOSTICS:
            case MySqlParser.KW_EMPTY:
            case MySqlParser.KW_ENFORCED:
            case MySqlParser.KW_EXCEPT:
            case MySqlParser.KW_GROUP:
            case MySqlParser.KW_IF:
            case MySqlParser.KW_INSERT:
            case MySqlParser.KW_LATERAL:
            case MySqlParser.KW_LEFT:
            case MySqlParser.KW_NUMBER:
            case MySqlParser.KW_OPTIONAL:
            case MySqlParser.KW_ORDER:
            case MySqlParser.KW_PRIMARY:
            case MySqlParser.KW_REPEAT:
            case MySqlParser.KW_REPLACE:
            case MySqlParser.KW_RIGHT:
            case MySqlParser.KW_SCHEMA:
            case MySqlParser.KW_SKIP_QUERY_REWRITE:
            case MySqlParser.KW_STACKED:
            case MySqlParser.KW_DATE:
            case MySqlParser.KW_TIME:
            case MySqlParser.KW_TIMESTAMP:
            case MySqlParser.KW_DATETIME:
            case MySqlParser.KW_YEAR:
            case MySqlParser.KW_BINARY:
            case MySqlParser.KW_TEXT:
            case MySqlParser.KW_ENUM:
            case MySqlParser.KW_SERIAL:
            case MySqlParser.KW_JSON_TABLE:
            case MySqlParser.KW_JSON_VALUE:
            case MySqlParser.KW_NESTED:
            case MySqlParser.KW_ORDINALITY:
            case MySqlParser.KW_PATH:
            case MySqlParser.KW_AVG:
            case MySqlParser.KW_BIT_AND:
            case MySqlParser.KW_BIT_OR:
            case MySqlParser.KW_BIT_XOR:
            case MySqlParser.KW_COUNT:
            case MySqlParser.KW_CUME_DIST:
            case MySqlParser.KW_DENSE_RANK:
            case MySqlParser.KW_FIRST_VALUE:
            case MySqlParser.KW_GROUP_CONCAT:
            case MySqlParser.KW_LAG:
            case MySqlParser.KW_LAST_VALUE:
            case MySqlParser.KW_LEAD:
            case MySqlParser.KW_MAX:
            case MySqlParser.KW_MIN:
            case MySqlParser.KW_NTILE:
            case MySqlParser.KW_NTH_VALUE:
            case MySqlParser.KW_PERCENT_RANK:
            case MySqlParser.KW_RANK:
            case MySqlParser.KW_ROW_NUMBER:
            case MySqlParser.KW_STD:
            case MySqlParser.KW_STDDEV:
            case MySqlParser.KW_STDDEV_POP:
            case MySqlParser.KW_STDDEV_SAMP:
            case MySqlParser.KW_SUM:
            case MySqlParser.KW_VAR_POP:
            case MySqlParser.KW_VAR_SAMP:
            case MySqlParser.KW_VARIANCE:
            case MySqlParser.KW_CURRENT_DATE:
            case MySqlParser.KW_CURRENT_TIME:
            case MySqlParser.KW_CURRENT_TIMESTAMP:
            case MySqlParser.KW_LOCALTIME:
            case MySqlParser.KW_CURDATE:
            case MySqlParser.KW_CURTIME:
            case MySqlParser.KW_DATE_ADD:
            case MySqlParser.KW_DATE_SUB:
            case MySqlParser.KW_LOCALTIMESTAMP:
            case MySqlParser.KW_NOW:
            case MySqlParser.KW_POSITION:
            case MySqlParser.KW_SUBSTR:
            case MySqlParser.KW_SUBSTRING:
            case MySqlParser.KW_SYSDATE:
            case MySqlParser.KW_TRIM:
            case MySqlParser.KW_UTC_DATE:
            case MySqlParser.KW_UTC_TIME:
            case MySqlParser.KW_UTC_TIMESTAMP:
            case MySqlParser.KW_ACCOUNT:
            case MySqlParser.KW_ACTION:
            case MySqlParser.KW_AFTER:
            case MySqlParser.KW_AGGREGATE:
            case MySqlParser.KW_ALGORITHM:
            case MySqlParser.KW_ANY:
            case MySqlParser.KW_AT:
            case MySqlParser.KW_AUTHORS:
            case MySqlParser.KW_AUTOCOMMIT:
            case MySqlParser.KW_AUTOEXTEND_SIZE:
            case MySqlParser.KW_AUTO_INCREMENT:
            case MySqlParser.KW_AVG_ROW_LENGTH:
            case MySqlParser.KW_BEGIN:
            case MySqlParser.KW_BINLOG:
            case MySqlParser.KW_BIT:
            case MySqlParser.KW_BLOCK:
            case MySqlParser.KW_BOOL:
            case MySqlParser.KW_BOOLEAN:
            case MySqlParser.KW_BTREE:
            case MySqlParser.KW_CACHE:
            case MySqlParser.KW_CASCADED:
            case MySqlParser.KW_CHAIN:
            case MySqlParser.KW_CHANGED:
            case MySqlParser.KW_CHANNEL:
            case MySqlParser.KW_CHECKSUM:
            case MySqlParser.KW_CIPHER:
            case MySqlParser.KW_CLASS_ORIGIN:
            case MySqlParser.KW_CLIENT:
            case MySqlParser.KW_CLOSE:
            case MySqlParser.KW_COALESCE:
            case MySqlParser.KW_CODE:
            case MySqlParser.KW_COLUMNS:
            case MySqlParser.KW_COLUMN_FORMAT:
            case MySqlParser.KW_COLUMN_NAME:
            case MySqlParser.KW_COMMENT:
            case MySqlParser.KW_COMMIT:
            case MySqlParser.KW_COMPACT:
            case MySqlParser.KW_COMPLETION:
            case MySqlParser.KW_COMPRESSED:
            case MySqlParser.KW_COMPRESSION:
            case MySqlParser.KW_CONCURRENT:
            case MySqlParser.KW_CONNECT:
            case MySqlParser.KW_CONNECTION:
            case MySqlParser.KW_CONSISTENT:
            case MySqlParser.KW_CONSTRAINT_CATALOG:
            case MySqlParser.KW_CONSTRAINT_SCHEMA:
            case MySqlParser.KW_CONSTRAINT_NAME:
            case MySqlParser.KW_CONTAINS:
            case MySqlParser.KW_CONTEXT:
            case MySqlParser.KW_CONTRIBUTORS:
            case MySqlParser.KW_COPY:
            case MySqlParser.KW_CPU:
            case MySqlParser.KW_CURSOR_NAME:
            case MySqlParser.KW_DATA:
            case MySqlParser.KW_DATAFILE:
            case MySqlParser.KW_DEALLOCATE:
            case MySqlParser.KW_DEFAULT_AUTH:
            case MySqlParser.KW_DEFINER:
            case MySqlParser.KW_DELAY_KEY_WRITE:
            case MySqlParser.KW_DES_KEY_FILE:
            case MySqlParser.KW_DIRECTORY:
            case MySqlParser.KW_DISABLE:
            case MySqlParser.KW_DISCARD:
            case MySqlParser.KW_DISK:
            case MySqlParser.KW_DO:
            case MySqlParser.KW_DUMPFILE:
            case MySqlParser.KW_DUPLICATE:
            case MySqlParser.KW_DYNAMIC:
            case MySqlParser.KW_ENABLE:
            case MySqlParser.KW_ENCRYPTION:
            case MySqlParser.KW_END:
            case MySqlParser.KW_ENDS:
            case MySqlParser.KW_ENGINE:
            case MySqlParser.KW_ENGINES:
            case MySqlParser.KW_ERROR:
            case MySqlParser.KW_ERRORS:
            case MySqlParser.KW_ESCAPE:
            case MySqlParser.KW_EVENT:
            case MySqlParser.KW_EVENTS:
            case MySqlParser.KW_EVERY:
            case MySqlParser.KW_EXCHANGE:
            case MySqlParser.KW_EXCLUSIVE:
            case MySqlParser.KW_EXPIRE:
            case MySqlParser.KW_EXPORT:
            case MySqlParser.KW_EXTENDED:
            case MySqlParser.KW_EXTENT_SIZE:
            case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
            case MySqlParser.KW_FAST:
            case MySqlParser.KW_FAULTS:
            case MySqlParser.KW_FIELDS:
            case MySqlParser.KW_FILE_BLOCK_SIZE:
            case MySqlParser.KW_FILTER:
            case MySqlParser.KW_FIRST:
            case MySqlParser.KW_FIXED:
            case MySqlParser.KW_FLUSH:
            case MySqlParser.KW_FOLLOWS:
            case MySqlParser.KW_FOUND:
            case MySqlParser.KW_FULL:
            case MySqlParser.KW_FUNCTION:
            case MySqlParser.KW_GENERAL:
            case MySqlParser.KW_GLOBAL:
            case MySqlParser.KW_GRANTS:
            case MySqlParser.KW_GROUP_REPLICATION:
            case MySqlParser.KW_HANDLER:
            case MySqlParser.KW_HASH:
            case MySqlParser.KW_HELP:
            case MySqlParser.KW_HISTORY:
            case MySqlParser.KW_HOST:
            case MySqlParser.KW_HOSTS:
            case MySqlParser.KW_IDENTIFIED:
            case MySqlParser.KW_IGNORE_SERVER_IDS:
            case MySqlParser.KW_IMPORT:
            case MySqlParser.KW_INDEXES:
            case MySqlParser.KW_INITIAL_SIZE:
            case MySqlParser.KW_INPLACE:
            case MySqlParser.KW_INSERT_METHOD:
            case MySqlParser.KW_INSTALL:
            case MySqlParser.KW_INSTANCE:
            case MySqlParser.KW_INSTANT:
            case MySqlParser.KW_INVISIBLE:
            case MySqlParser.KW_INVOKER:
            case MySqlParser.KW_IO:
            case MySqlParser.KW_IO_THREAD:
            case MySqlParser.KW_IPC:
            case MySqlParser.KW_ISOLATION:
            case MySqlParser.KW_ISSUER:
            case MySqlParser.KW_JSON:
            case MySqlParser.KW_KEY_BLOCK_SIZE:
            case MySqlParser.KW_LANGUAGE:
            case MySqlParser.KW_LAST:
            case MySqlParser.KW_LEAVES:
            case MySqlParser.KW_LESS:
            case MySqlParser.KW_LEVEL:
            case MySqlParser.KW_LIST:
            case MySqlParser.KW_LOCAL:
            case MySqlParser.KW_LOGFILE:
            case MySqlParser.KW_LOGS:
            case MySqlParser.KW_MASTER:
            case MySqlParser.KW_MASTER_AUTO_POSITION:
            case MySqlParser.KW_MASTER_CONNECT_RETRY:
            case MySqlParser.KW_MASTER_DELAY:
            case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
            case MySqlParser.KW_MASTER_HOST:
            case MySqlParser.KW_MASTER_LOG_FILE:
            case MySqlParser.KW_MASTER_LOG_POS:
            case MySqlParser.KW_MASTER_PASSWORD:
            case MySqlParser.KW_MASTER_PORT:
            case MySqlParser.KW_MASTER_RETRY_COUNT:
            case MySqlParser.KW_MASTER_SSL:
            case MySqlParser.KW_MASTER_SSL_CA:
            case MySqlParser.KW_MASTER_SSL_CAPATH:
            case MySqlParser.KW_MASTER_SSL_CERT:
            case MySqlParser.KW_MASTER_SSL_CIPHER:
            case MySqlParser.KW_MASTER_SSL_CRL:
            case MySqlParser.KW_MASTER_SSL_CRLPATH:
            case MySqlParser.KW_MASTER_SSL_KEY:
            case MySqlParser.KW_MASTER_TLS_VERSION:
            case MySqlParser.KW_MASTER_USER:
            case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
            case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
            case MySqlParser.KW_MAX_ROWS:
            case MySqlParser.KW_MAX_SIZE:
            case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
            case MySqlParser.KW_MAX_USER_CONNECTIONS:
            case MySqlParser.KW_MEDIUM:
            case MySqlParser.KW_MEMBER:
            case MySqlParser.KW_MERGE:
            case MySqlParser.KW_MESSAGE_TEXT:
            case MySqlParser.KW_MID:
            case MySqlParser.KW_MIGRATE:
            case MySqlParser.KW_MIN_ROWS:
            case MySqlParser.KW_MODE:
            case MySqlParser.KW_MODIFY:
            case MySqlParser.KW_MUTEX:
            case MySqlParser.KW_MYSQL:
            case MySqlParser.KW_MYSQL_ERRNO:
            case MySqlParser.KW_NAME:
            case MySqlParser.KW_NAMES:
            case MySqlParser.KW_NCHAR:
            case MySqlParser.KW_NEVER:
            case MySqlParser.KW_NEXT:
            case MySqlParser.KW_NO:
            case MySqlParser.KW_NOWAIT:
            case MySqlParser.KW_NODEGROUP:
            case MySqlParser.KW_NONE:
            case MySqlParser.KW_ODBC:
            case MySqlParser.KW_OFFLINE:
            case MySqlParser.KW_OFFSET:
            case MySqlParser.KW_OF:
            case MySqlParser.KW_OLD_PASSWORD:
            case MySqlParser.KW_ONE:
            case MySqlParser.KW_ONLINE:
            case MySqlParser.KW_ONLY:
            case MySqlParser.KW_OPEN:
            case MySqlParser.KW_OPTIMIZER_COSTS:
            case MySqlParser.KW_OPTIONS:
            case MySqlParser.KW_OWNER:
            case MySqlParser.KW_PACK_KEYS:
            case MySqlParser.KW_PAGE:
            case MySqlParser.KW_PAGE_CHECKSUM:
            case MySqlParser.KW_PARSER:
            case MySqlParser.KW_PARTIAL:
            case MySqlParser.KW_PARTITIONING:
            case MySqlParser.KW_PARTITIONS:
            case MySqlParser.KW_PASSWORD:
            case MySqlParser.KW_PASSWORD_LOCK_TIME:
            case MySqlParser.KW_PHASE:
            case MySqlParser.KW_PLUGIN:
            case MySqlParser.KW_PLUGIN_DIR:
            case MySqlParser.KW_PLUGINS:
            case MySqlParser.KW_PORT:
            case MySqlParser.KW_PRECEDES:
            case MySqlParser.KW_PREPARE:
            case MySqlParser.KW_PRESERVE:
            case MySqlParser.KW_PREV:
            case MySqlParser.KW_PROCESSLIST:
            case MySqlParser.KW_PROFILE:
            case MySqlParser.KW_PROFILES:
            case MySqlParser.KW_PROXY:
            case MySqlParser.KW_QUERY:
            case MySqlParser.KW_QUICK:
            case MySqlParser.KW_REBUILD:
            case MySqlParser.KW_RECOVER:
            case MySqlParser.KW_RECURSIVE:
            case MySqlParser.KW_REDO_BUFFER_SIZE:
            case MySqlParser.KW_REDUNDANT:
            case MySqlParser.KW_RELAY:
            case MySqlParser.KW_RELAY_LOG_FILE:
            case MySqlParser.KW_RELAY_LOG_POS:
            case MySqlParser.KW_RELAYLOG:
            case MySqlParser.KW_REMOVE:
            case MySqlParser.KW_REORGANIZE:
            case MySqlParser.KW_REPAIR:
            case MySqlParser.KW_REPLICATE_DO_DB:
            case MySqlParser.KW_REPLICATE_DO_TABLE:
            case MySqlParser.KW_REPLICATE_IGNORE_DB:
            case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATE_REWRITE_DB:
            case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
            case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATION:
            case MySqlParser.KW_RESET:
            case MySqlParser.KW_RESUME:
            case MySqlParser.KW_RETURNED_SQLSTATE:
            case MySqlParser.KW_RETURNS:
            case MySqlParser.KW_REUSE:
            case MySqlParser.KW_ROLE:
            case MySqlParser.KW_ROLLBACK:
            case MySqlParser.KW_ROLLUP:
            case MySqlParser.KW_ROTATE:
            case MySqlParser.KW_ROW:
            case MySqlParser.KW_ROWS:
            case MySqlParser.KW_ROW_FORMAT:
            case MySqlParser.KW_SAVEPOINT:
            case MySqlParser.KW_SCHEDULE:
            case MySqlParser.KW_SECURITY:
            case MySqlParser.KW_SERVER:
            case MySqlParser.KW_SESSION:
            case MySqlParser.KW_SHARE:
            case MySqlParser.KW_SHARED:
            case MySqlParser.KW_SIGNED:
            case MySqlParser.KW_SIMPLE:
            case MySqlParser.KW_SLAVE:
            case MySqlParser.KW_SLOW:
            case MySqlParser.KW_SNAPSHOT:
            case MySqlParser.KW_SOCKET:
            case MySqlParser.KW_SOME:
            case MySqlParser.KW_SONAME:
            case MySqlParser.KW_SOUNDS:
            case MySqlParser.KW_SOURCE:
            case MySqlParser.KW_SQL_AFTER_GTIDS:
            case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
            case MySqlParser.KW_SQL_BEFORE_GTIDS:
            case MySqlParser.KW_SQL_BUFFER_RESULT:
            case MySqlParser.KW_SQL_CACHE:
            case MySqlParser.KW_SQL_NO_CACHE:
            case MySqlParser.KW_SQL_THREAD:
            case MySqlParser.KW_START:
            case MySqlParser.KW_STARTS:
            case MySqlParser.KW_STATS_AUTO_RECALC:
            case MySqlParser.KW_STATS_PERSISTENT:
            case MySqlParser.KW_STATS_SAMPLE_PAGES:
            case MySqlParser.KW_STATUS:
            case MySqlParser.KW_STOP:
            case MySqlParser.KW_STORAGE:
            case MySqlParser.KW_STRING:
            case MySqlParser.KW_SUBCLASS_ORIGIN:
            case MySqlParser.KW_SUBJECT:
            case MySqlParser.KW_SUBPARTITION:
            case MySqlParser.KW_SUBPARTITIONS:
            case MySqlParser.KW_SUSPEND:
            case MySqlParser.KW_SWAPS:
            case MySqlParser.KW_SWITCHES:
            case MySqlParser.KW_TABLE_NAME:
            case MySqlParser.KW_TABLESPACE:
            case MySqlParser.KW_TABLE_TYPE:
            case MySqlParser.KW_TEMPORARY:
            case MySqlParser.KW_TEMPTABLE:
            case MySqlParser.KW_THAN:
            case MySqlParser.KW_TRADITIONAL:
            case MySqlParser.KW_TRANSACTION:
            case MySqlParser.KW_TRANSACTIONAL:
            case MySqlParser.KW_TRIGGERS:
            case MySqlParser.KW_TRUNCATE:
            case MySqlParser.KW_UNBOUNDED:
            case MySqlParser.KW_UNDEFINED:
            case MySqlParser.KW_UNDOFILE:
            case MySqlParser.KW_UNDO_BUFFER_SIZE:
            case MySqlParser.KW_UNINSTALL:
            case MySqlParser.KW_UNKNOWN:
            case MySqlParser.KW_UNTIL:
            case MySqlParser.KW_UPGRADE:
            case MySqlParser.KW_USER:
            case MySqlParser.KW_USE_FRM:
            case MySqlParser.KW_USER_RESOURCES:
            case MySqlParser.KW_VALIDATION:
            case MySqlParser.KW_VALUE:
            case MySqlParser.KW_VARIABLES:
            case MySqlParser.KW_VIEW:
            case MySqlParser.KW_VIRTUAL:
            case MySqlParser.KW_VISIBLE:
            case MySqlParser.KW_WAIT:
            case MySqlParser.KW_WARNINGS:
            case MySqlParser.KW_WITHOUT:
            case MySqlParser.KW_WORK:
            case MySqlParser.KW_WRAPPER:
            case MySqlParser.KW_X509:
            case MySqlParser.KW_XA:
            case MySqlParser.KW_XML:
            case MySqlParser.KW_QUARTER:
            case MySqlParser.KW_MONTH:
            case MySqlParser.KW_DAY:
            case MySqlParser.KW_HOUR:
            case MySqlParser.KW_MINUTE:
            case MySqlParser.KW_WEEK:
            case MySqlParser.KW_SECOND:
            case MySqlParser.KW_MICROSECOND:
            case MySqlParser.KW_ADMIN:
            case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
            case MySqlParser.KW_AUDIT_ADMIN:
            case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
            case MySqlParser.KW_BACKUP_ADMIN:
            case MySqlParser.KW_BINLOG_ADMIN:
            case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
            case MySqlParser.KW_CLONE_ADMIN:
            case MySqlParser.KW_CONNECTION_ADMIN:
            case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
            case MySqlParser.KW_EXECUTE:
            case MySqlParser.KW_FILE:
            case MySqlParser.KW_FIREWALL_ADMIN:
            case MySqlParser.KW_FIREWALL_EXEMPT:
            case MySqlParser.KW_FIREWALL_USER:
            case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
            case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
            case MySqlParser.KW_INVOKE:
            case MySqlParser.KW_LAMBDA:
            case MySqlParser.KW_NDB_STORED_USER:
            case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
            case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
            case MySqlParser.KW_PRIVILEGES:
            case MySqlParser.KW_PROCESS:
            case MySqlParser.KW_RELOAD:
            case MySqlParser.KW_REPLICATION_APPLIER:
            case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_USER:
            case MySqlParser.KW_ROLE_ADMIN:
            case MySqlParser.KW_ROUTINE:
            case MySqlParser.KW_S3:
            case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
            case MySqlParser.KW_SET_USER_ID:
            case MySqlParser.KW_SHOW_ROUTINE:
            case MySqlParser.KW_SHUTDOWN:
            case MySqlParser.KW_SUPER:
            case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
            case MySqlParser.KW_TABLES:
            case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
            case MySqlParser.KW_VERSION_TOKEN_ADMIN:
            case MySqlParser.KW_XA_RECOVER_ADMIN:
            case MySqlParser.KW_ARMSCII8:
            case MySqlParser.KW_ASCII:
            case MySqlParser.KW_BIG5:
            case MySqlParser.KW_CP1250:
            case MySqlParser.KW_CP1251:
            case MySqlParser.KW_CP1256:
            case MySqlParser.KW_CP1257:
            case MySqlParser.KW_CP850:
            case MySqlParser.KW_CP852:
            case MySqlParser.KW_CP866:
            case MySqlParser.KW_CP932:
            case MySqlParser.KW_DEC8:
            case MySqlParser.KW_EUCJPMS:
            case MySqlParser.KW_EUCKR:
            case MySqlParser.KW_GB18030:
            case MySqlParser.KW_GB2312:
            case MySqlParser.KW_GBK:
            case MySqlParser.KW_GEOSTD8:
            case MySqlParser.KW_GREEK:
            case MySqlParser.KW_HEBREW:
            case MySqlParser.KW_HP8:
            case MySqlParser.KW_KEYBCS2:
            case MySqlParser.KW_KOI8R:
            case MySqlParser.KW_KOI8U:
            case MySqlParser.KW_LATIN1:
            case MySqlParser.KW_LATIN2:
            case MySqlParser.KW_LATIN5:
            case MySqlParser.KW_LATIN7:
            case MySqlParser.KW_MACCE:
            case MySqlParser.KW_MACROMAN:
            case MySqlParser.KW_SJIS:
            case MySqlParser.KW_SWE7:
            case MySqlParser.KW_TIS620:
            case MySqlParser.KW_UCS2:
            case MySqlParser.KW_UJIS:
            case MySqlParser.KW_UTF16:
            case MySqlParser.KW_UTF16LE:
            case MySqlParser.KW_UTF32:
            case MySqlParser.KW_UTF8:
            case MySqlParser.KW_UTF8MB3:
            case MySqlParser.KW_UTF8MB4:
            case MySqlParser.KW_ARCHIVE:
            case MySqlParser.KW_BLACKHOLE:
            case MySqlParser.KW_CSV:
            case MySqlParser.KW_FEDERATED:
            case MySqlParser.KW_INNODB:
            case MySqlParser.KW_MEMORY:
            case MySqlParser.KW_MRG_MYISAM:
            case MySqlParser.KW_MYISAM:
            case MySqlParser.KW_NDB:
            case MySqlParser.KW_NDBCLUSTER:
            case MySqlParser.KW_PERFORMANCE_SCHEMA:
            case MySqlParser.KW_TOKUDB:
            case MySqlParser.KW_REPEATABLE:
            case MySqlParser.KW_COMMITTED:
            case MySqlParser.KW_UNCOMMITTED:
            case MySqlParser.KW_SERIALIZABLE:
            case MySqlParser.KW_GEOMETRYCOLLECTION:
            case MySqlParser.KW_LINESTRING:
            case MySqlParser.KW_MULTILINESTRING:
            case MySqlParser.KW_MULTIPOINT:
            case MySqlParser.KW_MULTIPOLYGON:
            case MySqlParser.KW_POINT:
            case MySqlParser.KW_POLYGON:
            case MySqlParser.KW_CATALOG_NAME:
            case MySqlParser.KW_CHARSET:
            case MySqlParser.KW_COLLATION:
            case MySqlParser.KW_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_FORMAT:
            case MySqlParser.KW_GET_FORMAT:
            case MySqlParser.KW_RANDOM:
            case MySqlParser.KW_REVERSE:
            case MySqlParser.KW_ROW_COUNT:
            case MySqlParser.KW_SCHEMA_NAME:
            case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_SRID:
            case MySqlParser.KW_SYSTEM_USER:
            case MySqlParser.KW_TP_CONNECTION_ADMIN:
            case MySqlParser.KW_WEIGHT_STRING:
            case MySqlParser.MOD:
            case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
            case MySqlParser.STRING_LITERAL:
            case MySqlParser.ID:
                localContext = new HandlerConditionNameContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5111;
                (localContext as HandlerConditionNameContext)._condition_name = this.uid();
                }
                break;
            case MySqlParser.KW_SQLWARNING:
                localContext = new HandlerConditionWarningContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5112;
                this.match(MySqlParser.KW_SQLWARNING);
                }
                break;
            case MySqlParser.KW_NOT:
                localContext = new HandlerConditionNotfoundContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 5113;
                this.match(MySqlParser.KW_NOT);
                this.state = 5114;
                this.match(MySqlParser.KW_FOUND);
                }
                break;
            case MySqlParser.KW_SQLEXCEPTION:
                localContext = new HandlerConditionExceptionContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 5115;
                this.match(MySqlParser.KW_SQLEXCEPTION);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public procedureSqlStatement(): ProcedureSqlStatementContext {
        let localContext = new ProcedureSqlStatementContext(this.context, this.state);
        this.enterRule(localContext, 448, MySqlParser.RULE_procedureSqlStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5120;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 723, this.context) ) {
            case 1:
                {
                this.state = 5118;
                this.compoundStatement();
                }
                break;
            case 2:
                {
                this.state = 5119;
                this.sqlStatement();
                }
                break;
            }
            this.state = 5122;
            this.match(MySqlParser.SEMI);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public caseAlternative(): CaseAlternativeContext {
        let localContext = new CaseAlternativeContext(this.context, this.state);
        this.enterRule(localContext, 450, MySqlParser.RULE_caseAlternative);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5124;
            this.match(MySqlParser.KW_WHEN);
            this.state = 5127;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 724, this.context) ) {
            case 1:
                {
                this.state = 5125;
                this.constant();
                }
                break;
            case 2:
                {
                this.state = 5126;
                this.expression(0);
                }
                break;
            }
            this.state = 5129;
            this.match(MySqlParser.KW_THEN);
            this.state = 5131;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 5130;
                    this.procedureSqlStatement();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 5133;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 725, this.context);
            } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public elifAlternative(): ElifAlternativeContext {
        let localContext = new ElifAlternativeContext(this.context, this.state);
        this.enterRule(localContext, 452, MySqlParser.RULE_elifAlternative);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5135;
            this.match(MySqlParser.KW_ELSEIF);
            this.state = 5136;
            this.expression(0);
            this.state = 5137;
            this.match(MySqlParser.KW_THEN);
            this.state = 5139;
            this.errorHandler.sync(this);
            alternative = 1;
            do {
                switch (alternative) {
                case 1:
                    {
                    {
                    this.state = 5138;
                    this.procedureSqlStatement();
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 5141;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 726, this.context);
            } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterUser(): AlterUserContext {
        let localContext = new AlterUserContext(this.context, this.state);
        this.enterRule(localContext, 454, MySqlParser.RULE_alterUser);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5143;
            this.match(MySqlParser.KW_ALTER);
            this.state = 5144;
            this.match(MySqlParser.KW_USER);
            this.state = 5146;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 727, this.context) ) {
            case 1:
                {
                this.state = 5145;
                this.ifExists();
                }
                break;
            }
            this.state = 5204;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 739, this.context) ) {
            case 1:
                {
                {
                this.state = 5148;
                this.userSpecification();
                this.state = 5153;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 5149;
                    this.match(MySqlParser.COMMA);
                    this.state = 5150;
                    this.userSpecification();
                    }
                    }
                    this.state = 5155;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                }
                break;
            case 2:
                {
                {
                this.state = 5156;
                this.alterUserAuthOption();
                this.state = 5161;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 5157;
                    this.match(MySqlParser.COMMA);
                    this.state = 5158;
                    this.alterUserAuthOption();
                    }
                    }
                    this.state = 5163;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 5178;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 144) {
                    {
                    this.state = 5164;
                    this.match(MySqlParser.KW_REQUIRE);
                    this.state = 5176;
                    this.errorHandler.sync(this);
                    switch (this.tokenStream.LA(1)) {
                    case MySqlParser.KW_NONE:
                        {
                        this.state = 5165;
                        this.match(MySqlParser.KW_NONE);
                        }
                        break;
                    case MySqlParser.KW_SSL:
                    case MySqlParser.KW_CIPHER:
                    case MySqlParser.KW_ISSUER:
                    case MySqlParser.KW_SUBJECT:
                    case MySqlParser.KW_X509:
                        {
                        this.state = 5166;
                        this.tlsOption();
                        this.state = 5173;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        while (_la === 11 || _la === 169 || _la === 331 || _la === 441 || _la === 651 || _la === 693) {
                            {
                            {
                            this.state = 5168;
                            this.errorHandler.sync(this);
                            _la = this.tokenStream.LA(1);
                            if (_la === 11) {
                                {
                                this.state = 5167;
                                this.match(MySqlParser.KW_AND);
                                }
                            }

                            this.state = 5170;
                            this.tlsOption();
                            }
                            }
                            this.state = 5175;
                            this.errorHandler.sync(this);
                            _la = this.tokenStream.LA(1);
                        }
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    }
                }

                this.state = 5186;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 735, this.context) ) {
                case 1:
                    {
                    this.state = 5180;
                    this.match(MySqlParser.KW_WITH);
                    this.state = 5182;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    do {
                        {
                        {
                        this.state = 5181;
                        this.userResourceOption();
                        }
                        }
                        this.state = 5184;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    } while (((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 51) !== 0));
                    }
                    break;
                }
                this.state = 5192;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 304 || _la === 395 || _la === 529 || _la === 530) {
                    {
                    this.state = 5190;
                    this.errorHandler.sync(this);
                    switch (this.tokenStream.LA(1)) {
                    case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                    case MySqlParser.KW_PASSWORD:
                    case MySqlParser.KW_PASSWORD_LOCK_TIME:
                        {
                        this.state = 5188;
                        this.userPasswordOption();
                        }
                        break;
                    case MySqlParser.KW_ACCOUNT:
                        {
                        this.state = 5189;
                        this.userLockOption();
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    }
                    this.state = 5194;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 5197;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 15 || _la === 340) {
                    {
                    this.state = 5195;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 15 || _la === 340)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 5196;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                }

                }
                }
                break;
            case 3:
                {
                {
                {
                this.state = 5199;
                this.userOrRoleName();
                }
                this.state = 5200;
                this.match(MySqlParser.KW_DEFAULT);
                this.state = 5201;
                this.match(MySqlParser.KW_ROLE);
                this.state = 5202;
                this.roleOption();
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createUser(): CreateUserContext {
        let localContext = new CreateUserContext(this.context, this.state);
        this.enterRule(localContext, 456, MySqlParser.RULE_createUser);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5206;
            this.match(MySqlParser.KW_CREATE);
            this.state = 5207;
            this.match(MySqlParser.KW_USER);
            this.state = 5209;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 78) {
                {
                this.state = 5208;
                this.ifNotExists();
                }
            }

            this.state = 5211;
            this.userName();
            this.state = 5213;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 423) {
                {
                this.state = 5212;
                this.createUserAuthOption();
                }
            }

            this.state = 5222;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 5215;
                this.match(MySqlParser.COMMA);
                this.state = 5216;
                this.userName();
                this.state = 5218;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 423) {
                    {
                    this.state = 5217;
                    this.createUserAuthOption();
                    }
                }

                }
                }
                this.state = 5224;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 5228;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 42) {
                {
                this.state = 5225;
                this.match(MySqlParser.KW_DEFAULT);
                this.state = 5226;
                this.match(MySqlParser.KW_ROLE);
                this.state = 5227;
                this.roleOption();
                }
            }

            this.state = 5244;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 144) {
                {
                this.state = 5230;
                this.match(MySqlParser.KW_REQUIRE);
                this.state = 5242;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_NONE:
                    {
                    this.state = 5231;
                    this.match(MySqlParser.KW_NONE);
                    }
                    break;
                case MySqlParser.KW_SSL:
                case MySqlParser.KW_CIPHER:
                case MySqlParser.KW_ISSUER:
                case MySqlParser.KW_SUBJECT:
                case MySqlParser.KW_X509:
                    {
                    this.state = 5232;
                    this.tlsOption();
                    this.state = 5239;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 11 || _la === 169 || _la === 331 || _la === 441 || _la === 651 || _la === 693) {
                        {
                        {
                        this.state = 5234;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 11) {
                            {
                            this.state = 5233;
                            this.match(MySqlParser.KW_AND);
                            }
                        }

                        this.state = 5236;
                        this.tlsOption();
                        }
                        }
                        this.state = 5241;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
            }

            this.state = 5252;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 750, this.context) ) {
            case 1:
                {
                this.state = 5246;
                this.match(MySqlParser.KW_WITH);
                this.state = 5248;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                do {
                    {
                    {
                    this.state = 5247;
                    this.userResourceOption();
                    }
                    }
                    this.state = 5250;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                } while (((((_la - 478)) & ~0x1F) === 0 && ((1 << (_la - 478)) & 51) !== 0));
                }
                break;
            }
            this.state = 5258;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 304 || _la === 395 || _la === 529 || _la === 530) {
                {
                this.state = 5256;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                    {
                    this.state = 5254;
                    this.userPasswordOption();
                    }
                    break;
                case MySqlParser.KW_ACCOUNT:
                    {
                    this.state = 5255;
                    this.userLockOption();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                this.state = 5260;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 5263;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 15 || _la === 340) {
                {
                this.state = 5261;
                _la = this.tokenStream.LA(1);
                if(!(_la === 15 || _la === 340)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 5262;
                this.match(MySqlParser.STRING_LITERAL);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropUser(): DropUserContext {
        let localContext = new DropUserContext(this.context, this.state);
        this.enterRule(localContext, 458, MySqlParser.RULE_dropUser);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5265;
            this.match(MySqlParser.KW_DROP);
            this.state = 5266;
            this.match(MySqlParser.KW_USER);
            this.state = 5268;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 78) {
                {
                this.state = 5267;
                this.ifExists();
                }
            }

            this.state = 5270;
            this.userName();
            this.state = 5275;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 5271;
                this.match(MySqlParser.COMMA);
                this.state = 5272;
                this.userName();
                }
                }
                this.state = 5277;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public grantStatement(): GrantStatementContext {
        let localContext = new GrantStatementContext(this.context, this.state);
        this.enterRule(localContext, 460, MySqlParser.RULE_grantStatement);
        let _la: number;
        try {
            let alternative: number;
            this.state = 5367;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 773, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5278;
                this.match(MySqlParser.KW_GRANT);
                this.state = 5279;
                this.privelegeClause();
                this.state = 5284;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 5280;
                    this.match(MySqlParser.COMMA);
                    this.state = 5281;
                    this.privelegeClause();
                    }
                    }
                    this.state = 5286;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 5287;
                this.match(MySqlParser.KW_ON);
                this.state = 5289;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 757, this.context) ) {
                case 1:
                    {
                    this.state = 5288;
                    this.privilegeObjectType();
                    }
                    break;
                }
                this.state = 5291;
                this.privilegeLevel();
                this.state = 5292;
                this.match(MySqlParser.KW_TO);
                this.state = 5302;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 759, this.context) ) {
                case 1:
                    {
                    {
                    this.state = 5293;
                    this.userAuthOption();
                    this.state = 5298;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 868) {
                        {
                        {
                        this.state = 5294;
                        this.match(MySqlParser.COMMA);
                        this.state = 5295;
                        this.userAuthOption();
                        }
                        }
                        this.state = 5300;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    }
                    }
                    break;
                case 2:
                    {
                    this.state = 5301;
                    this.userOrRoleNames();
                    }
                    break;
                }
                this.state = 5318;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 144) {
                    {
                    this.state = 5304;
                    this.match(MySqlParser.KW_REQUIRE);
                    this.state = 5316;
                    this.errorHandler.sync(this);
                    switch (this.tokenStream.LA(1)) {
                    case MySqlParser.KW_NONE:
                        {
                        this.state = 5305;
                        localContext._tlsNone = this.match(MySqlParser.KW_NONE);
                        }
                        break;
                    case MySqlParser.KW_SSL:
                    case MySqlParser.KW_CIPHER:
                    case MySqlParser.KW_ISSUER:
                    case MySqlParser.KW_SUBJECT:
                    case MySqlParser.KW_X509:
                        {
                        this.state = 5306;
                        this.tlsOption();
                        this.state = 5313;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        while (_la === 11 || _la === 169 || _la === 331 || _la === 441 || _la === 651 || _la === 693) {
                            {
                            {
                            this.state = 5308;
                            this.errorHandler.sync(this);
                            _la = this.tokenStream.LA(1);
                            if (_la === 11) {
                                {
                                this.state = 5307;
                                this.match(MySqlParser.KW_AND);
                                }
                            }

                            this.state = 5310;
                            this.tlsOption();
                            }
                            }
                            this.state = 5315;
                            this.errorHandler.sync(this);
                            _la = this.tokenStream.LA(1);
                        }
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    }
                }

                this.state = 5329;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 766, this.context) ) {
                case 1:
                    {
                    this.state = 5320;
                    this.match(MySqlParser.KW_WITH);
                    this.state = 5326;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 765, this.context);
                    while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                        if (alternative === 1) {
                            {
                            this.state = 5324;
                            this.errorHandler.sync(this);
                            switch (this.tokenStream.LA(1)) {
                            case MySqlParser.KW_GRANT:
                                {
                                this.state = 5321;
                                this.match(MySqlParser.KW_GRANT);
                                this.state = 5322;
                                this.match(MySqlParser.KW_OPTION);
                                }
                                break;
                            case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                            case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                            case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                            case MySqlParser.KW_MAX_USER_CONNECTIONS:
                                {
                                this.state = 5323;
                                this.userResourceOption();
                                }
                                break;
                            default:
                                throw new antlr.NoViableAltException(this);
                            }
                            }
                        }
                        this.state = 5328;
                        this.errorHandler.sync(this);
                        alternative = this.interpreter.adaptivePredict(this.tokenStream, 765, this.context);
                    }
                    }
                    break;
                }
                this.state = 5338;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 13) {
                    {
                    this.state = 5331;
                    this.match(MySqlParser.KW_AS);
                    this.state = 5332;
                    this.userName();
                    this.state = 5336;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 767, this.context) ) {
                    case 1:
                        {
                        this.state = 5333;
                        this.match(MySqlParser.KW_WITH);
                        this.state = 5334;
                        this.match(MySqlParser.KW_ROLE);
                        this.state = 5335;
                        this.roleOption();
                        }
                        break;
                    }
                    }
                }

                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5340;
                this.match(MySqlParser.KW_GRANT);
                this.state = 5343;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 769, this.context) ) {
                case 1:
                    {
                    this.state = 5341;
                    this.match(MySqlParser.KW_PROXY);
                    this.state = 5342;
                    this.match(MySqlParser.KW_ON);
                    }
                    break;
                }
                {
                this.state = 5345;
                this.userOrRoleName();
                }
                this.state = 5350;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 5346;
                    this.match(MySqlParser.COMMA);
                    {
                    this.state = 5347;
                    this.userOrRoleName();
                    }
                    }
                    }
                    this.state = 5352;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 5353;
                this.match(MySqlParser.KW_TO);
                {
                this.state = 5354;
                this.userOrRoleName();
                }
                this.state = 5359;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 5355;
                    this.match(MySqlParser.COMMA);
                    {
                    this.state = 5356;
                    this.userOrRoleName();
                    }
                    }
                    }
                    this.state = 5361;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 5365;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 772, this.context) ) {
                case 1:
                    {
                    this.state = 5362;
                    this.match(MySqlParser.KW_WITH);
                    this.state = 5363;
                    this.match(MySqlParser.KW_ADMIN);
                    this.state = 5364;
                    this.match(MySqlParser.KW_OPTION);
                    }
                    break;
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public roleOption(): RoleOptionContext {
        let localContext = new RoleOptionContext(this.context, this.state);
        this.enterRule(localContext, 462, MySqlParser.RULE_roleOption);
        let _la: number;
        try {
            this.state = 5377;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 775, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5369;
                this.match(MySqlParser.KW_DEFAULT);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5370;
                this.match(MySqlParser.KW_NONE);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5371;
                this.match(MySqlParser.KW_ALL);
                this.state = 5374;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 59) {
                    {
                    this.state = 5372;
                    this.match(MySqlParser.KW_EXCEPT);
                    this.state = 5373;
                    this.userOrRoleNames();
                    }
                }

                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5376;
                this.userOrRoleNames();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public grantProxy(): GrantProxyContext {
        let localContext = new GrantProxyContext(this.context, this.state);
        this.enterRule(localContext, 464, MySqlParser.RULE_grantProxy);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5379;
            this.match(MySqlParser.KW_GRANT);
            this.state = 5380;
            this.match(MySqlParser.KW_PROXY);
            this.state = 5381;
            this.match(MySqlParser.KW_ON);
            this.state = 5382;
            localContext._fromFirst = this.userName();
            this.state = 5383;
            this.match(MySqlParser.KW_TO);
            this.state = 5384;
            localContext._toFirst = this.userName();
            this.state = 5389;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 5385;
                this.match(MySqlParser.COMMA);
                this.state = 5386;
                localContext._userName = this.userName();
                localContext._toOther.push(localContext._userName);
                }
                }
                this.state = 5391;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 5395;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 777, this.context) ) {
            case 1:
                {
                this.state = 5392;
                this.match(MySqlParser.KW_WITH);
                this.state = 5393;
                this.match(MySqlParser.KW_GRANT);
                this.state = 5394;
                this.match(MySqlParser.KW_OPTION);
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterResourceGroup(): AlterResourceGroupContext {
        let localContext = new AlterResourceGroupContext(this.context, this.state);
        this.enterRule(localContext, 466, MySqlParser.RULE_alterResourceGroup);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5397;
            this.match(MySqlParser.KW_ALTER);
            this.state = 5398;
            this.match(MySqlParser.KW_RESOURCE);
            this.state = 5399;
            this.match(MySqlParser.KW_GROUP);
            this.state = 5400;
            this.groupName();
            this.state = 5406;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 190) {
                {
                this.state = 5401;
                this.match(MySqlParser.KW_VCPU);
                this.state = 5403;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 5402;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 5405;
                this.resourceGroupVcpuSpec();
                }
            }

            this.state = 5413;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 837) {
                {
                this.state = 5408;
                this.match(MySqlParser.KW_THREAD_PRIORITY);
                this.state = 5410;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 5409;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 5412;
                this.decimalLiteral();
                }
            }

            this.state = 5419;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 368 || _la === 375) {
                {
                this.state = 5415;
                _la = this.tokenStream.LA(1);
                if(!(_la === 368 || _la === 375)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 5417;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 66) {
                    {
                    this.state = 5416;
                    this.match(MySqlParser.KW_FORCE);
                    }
                }

                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createResourceGroup(): CreateResourceGroupContext {
        let localContext = new CreateResourceGroupContext(this.context, this.state);
        this.enterRule(localContext, 468, MySqlParser.RULE_createResourceGroup);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5421;
            this.match(MySqlParser.KW_CREATE);
            this.state = 5422;
            this.match(MySqlParser.KW_RESOURCE);
            this.state = 5423;
            this.match(MySqlParser.KW_GROUP);
            this.state = 5424;
            this.groupNameCreate();
            this.state = 5425;
            this.match(MySqlParser.KW_TYPE);
            this.state = 5426;
            this.match(MySqlParser.EQUAL_SYMBOL);
            this.state = 5427;
            _la = this.tokenStream.LA(1);
            if(!(_la === 678 || _la === 835)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 5433;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 190) {
                {
                this.state = 5428;
                this.match(MySqlParser.KW_VCPU);
                this.state = 5430;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 5429;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 5432;
                this.resourceGroupVcpuSpec();
                }
            }

            this.state = 5440;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 837) {
                {
                this.state = 5435;
                this.match(MySqlParser.KW_THREAD_PRIORITY);
                this.state = 5437;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 5436;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 5439;
                this.decimalLiteral();
                }
            }

            this.state = 5443;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 368 || _la === 375) {
                {
                this.state = 5442;
                _la = this.tokenStream.LA(1);
                if(!(_la === 368 || _la === 375)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dropResourceGroup(): DropResourceGroupContext {
        let localContext = new DropResourceGroupContext(this.context, this.state);
        this.enterRule(localContext, 470, MySqlParser.RULE_dropResourceGroup);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5445;
            this.match(MySqlParser.KW_DROP);
            this.state = 5446;
            this.match(MySqlParser.KW_RESOURCE);
            this.state = 5447;
            this.match(MySqlParser.KW_GROUP);
            this.state = 5448;
            this.groupName();
            this.state = 5450;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 66) {
                {
                this.state = 5449;
                this.match(MySqlParser.KW_FORCE);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public setResourceGroup(): SetResourceGroupContext {
        let localContext = new SetResourceGroupContext(this.context, this.state);
        this.enterRule(localContext, 472, MySqlParser.RULE_setResourceGroup);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5452;
            this.match(MySqlParser.KW_SET);
            this.state = 5453;
            this.match(MySqlParser.KW_RESOURCE);
            this.state = 5454;
            this.match(MySqlParser.KW_GROUP);
            this.state = 5455;
            this.groupName();
            this.state = 5465;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 65) {
                {
                this.state = 5456;
                this.match(MySqlParser.KW_FOR);
                this.state = 5457;
                this.decimalLiteral();
                this.state = 5462;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 5458;
                    this.match(MySqlParser.COMMA);
                    this.state = 5459;
                    this.decimalLiteral();
                    }
                    }
                    this.state = 5464;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public resourceGroupVcpuSpec(): ResourceGroupVcpuSpecContext {
        let localContext = new ResourceGroupVcpuSpecContext(this.context, this.state);
        this.enterRule(localContext, 474, MySqlParser.RULE_resourceGroupVcpuSpec);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5472;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 792, this.context) ) {
            case 1:
                {
                this.state = 5467;
                this.decimalLiteral();
                }
                break;
            case 2:
                {
                this.state = 5468;
                this.decimalLiteral();
                this.state = 5469;
                this.match(MySqlParser.MINUS);
                this.state = 5470;
                this.decimalLiteral();
                }
                break;
            }
            this.state = 5478;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 793, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 5474;
                    this.match(MySqlParser.COMMA);
                    this.state = 5475;
                    this.resourceGroupVcpuSpec();
                    }
                    }
                }
                this.state = 5480;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 793, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public renameUser(): RenameUserContext {
        let localContext = new RenameUserContext(this.context, this.state);
        this.enterRule(localContext, 476, MySqlParser.RULE_renameUser);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5481;
            this.match(MySqlParser.KW_RENAME);
            this.state = 5482;
            this.match(MySqlParser.KW_USER);
            this.state = 5483;
            this.renameUserClause();
            this.state = 5488;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 5484;
                this.match(MySqlParser.COMMA);
                this.state = 5485;
                this.renameUserClause();
                }
                }
                this.state = 5490;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public revokeStatement(): RevokeStatementContext {
        let localContext = new RevokeStatementContext(this.context, this.state);
        this.enterRule(localContext, 478, MySqlParser.RULE_revokeStatement);
        let _la: number;
        try {
            this.state = 5543;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 805, this.context) ) {
            case 1:
                localContext = new DetailRevokeContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5491;
                this.match(MySqlParser.KW_REVOKE);
                this.state = 5493;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 78) {
                    {
                    this.state = 5492;
                    this.ifExists();
                    }
                }

                this.state = 5495;
                this.privelegeClause();
                this.state = 5500;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 5496;
                    this.match(MySqlParser.COMMA);
                    this.state = 5497;
                    this.privelegeClause();
                    }
                    }
                    this.state = 5502;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 5503;
                this.match(MySqlParser.KW_ON);
                this.state = 5505;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 797, this.context) ) {
                case 1:
                    {
                    this.state = 5504;
                    this.privilegeObjectType();
                    }
                    break;
                }
                this.state = 5507;
                this.privilegeLevel();
                this.state = 5508;
                this.match(MySqlParser.KW_FROM);
                this.state = 5509;
                this.userOrRoleNames();
                this.state = 5511;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 79) {
                    {
                    this.state = 5510;
                    this.ignoreUnknownUser();
                    }
                }

                }
                break;
            case 2:
                localContext = new ShortRevokeContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5513;
                this.match(MySqlParser.KW_REVOKE);
                this.state = 5515;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 78) {
                    {
                    this.state = 5514;
                    this.ifExists();
                    }
                }

                this.state = 5517;
                this.match(MySqlParser.KW_ALL);
                this.state = 5519;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 734) {
                    {
                    this.state = 5518;
                    this.match(MySqlParser.KW_PRIVILEGES);
                    }
                }

                this.state = 5521;
                this.match(MySqlParser.COMMA);
                this.state = 5522;
                this.match(MySqlParser.KW_GRANT);
                this.state = 5523;
                this.match(MySqlParser.KW_OPTION);
                this.state = 5524;
                this.match(MySqlParser.KW_FROM);
                this.state = 5525;
                this.userOrRoleNames();
                this.state = 5527;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 79) {
                    {
                    this.state = 5526;
                    this.ignoreUnknownUser();
                    }
                }

                }
                break;
            case 3:
                localContext = new ProxyAndRoleRevokeContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5529;
                this.match(MySqlParser.KW_REVOKE);
                this.state = 5531;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 802, this.context) ) {
                case 1:
                    {
                    this.state = 5530;
                    this.ifExists();
                    }
                    break;
                }
                this.state = 5535;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 803, this.context) ) {
                case 1:
                    {
                    this.state = 5533;
                    this.match(MySqlParser.KW_PROXY);
                    this.state = 5534;
                    this.match(MySqlParser.KW_ON);
                    }
                    break;
                }
                this.state = 5537;
                this.userOrRoleNames();
                this.state = 5538;
                this.match(MySqlParser.KW_FROM);
                this.state = 5539;
                this.userOrRoleNames();
                this.state = 5541;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 79) {
                    {
                    this.state = 5540;
                    this.ignoreUnknownUser();
                    }
                }

                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public ignoreUnknownUser(): IgnoreUnknownUserContext {
        let localContext = new IgnoreUnknownUserContext(this.context, this.state);
        this.enterRule(localContext, 480, MySqlParser.RULE_ignoreUnknownUser);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5545;
            this.match(MySqlParser.KW_IGNORE);
            this.state = 5546;
            this.match(MySqlParser.KW_UNKNOWN);
            this.state = 5547;
            this.match(MySqlParser.KW_USER);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public privilegeObjectType(): PrivilegeObjectTypeContext {
        let localContext = new PrivilegeObjectTypeContext(this.context, this.state);
        this.enterRule(localContext, 482, MySqlParser.RULE_privilegeObjectType);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5549;
            _la = this.tokenStream.LA(1);
            if(!(_la === 132 || _la === 173 || _la === 409)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public setPasswordStatement(): SetPasswordStatementContext {
        let localContext = new SetPasswordStatementContext(this.context, this.state);
        this.enterRule(localContext, 484, MySqlParser.RULE_setPasswordStatement);
        let _la: number;
        try {
            this.state = 5583;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 812, this.context) ) {
            case 1:
                localContext = new V57Context(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5551;
                this.match(MySqlParser.KW_SET);
                this.state = 5552;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 5555;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 65) {
                    {
                    this.state = 5553;
                    this.match(MySqlParser.KW_FOR);
                    this.state = 5554;
                    this.userName();
                    }
                }

                this.state = 5557;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 5560;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_OLD_PASSWORD:
                case MySqlParser.KW_PASSWORD:
                    {
                    this.state = 5558;
                    this.passwordFunctionClause();
                    }
                    break;
                case MySqlParser.STRING_LITERAL:
                    {
                    this.state = 5559;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 2:
                localContext = new V80Context(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5562;
                this.match(MySqlParser.KW_SET);
                this.state = 5563;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 5566;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 65) {
                    {
                    this.state = 5564;
                    this.match(MySqlParser.KW_FOR);
                    this.state = 5565;
                    this.userName();
                    }
                }

                this.state = 5572;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_TO:
                    {
                    this.state = 5568;
                    this.match(MySqlParser.KW_TO);
                    this.state = 5569;
                    this.match(MySqlParser.KW_RANDOM);
                    }
                    break;
                case MySqlParser.EQUAL_SYMBOL:
                    {
                    this.state = 5570;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    this.state = 5571;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 5576;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 810, this.context) ) {
                case 1:
                    {
                    this.state = 5574;
                    this.match(MySqlParser.KW_REPLACE);
                    this.state = 5575;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                    break;
                }
                this.state = 5581;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 147) {
                    {
                    this.state = 5578;
                    this.match(MySqlParser.KW_RETAIN);
                    this.state = 5579;
                    this.match(MySqlParser.KW_CURRENT);
                    this.state = 5580;
                    this.match(MySqlParser.KW_PASSWORD);
                    }
                }

                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public userSpecification(): UserSpecificationContext {
        let localContext = new UserSpecificationContext(this.context, this.state);
        this.enterRule(localContext, 486, MySqlParser.RULE_userSpecification);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5585;
            this.userName();
            this.state = 5586;
            this.userPasswordOption();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public alterUserAuthOption(): AlterUserAuthOptionContext {
        let localContext = new AlterUserAuthOptionContext(this.context, this.state);
        this.enterRule(localContext, 488, MySqlParser.RULE_alterUserAuthOption);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5588;
            this.userName();
            this.state = 5614;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 815, this.context) ) {
            case 1:
                {
                this.state = 5589;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 5590;
                this.match(MySqlParser.KW_BY);
                this.state = 5591;
                this.match(MySqlParser.STRING_LITERAL);
                this.state = 5592;
                this.authOptionClause();
                }
                break;
            case 2:
                {
                this.state = 5593;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 5594;
                this.match(MySqlParser.KW_BY);
                this.state = 5595;
                this.match(MySqlParser.KW_RANDOM);
                this.state = 5596;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 5597;
                this.authOptionClause();
                }
                break;
            case 3:
                {
                this.state = 5598;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 5599;
                this.match(MySqlParser.KW_WITH);
                this.state = 5600;
                this.authenticationRule();
                }
                break;
            case 4:
                {
                this.state = 5601;
                this.match(MySqlParser.KW_DISCARD);
                this.state = 5602;
                this.match(MySqlParser.KW_OLD);
                this.state = 5603;
                this.match(MySqlParser.KW_PASSWORD);
                }
                break;
            case 5:
                {
                this.state = 5609;
                this.errorHandler.sync(this);
                alternative = 1;
                do {
                    switch (alternative) {
                    case 1:
                        {
                        {
                        this.state = 5604;
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 6 || _la === 51 || _la === 492)) {
                        this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        this.state = 5605;
                        this.factor();
                        this.state = 5607;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 423) {
                            {
                            this.state = 5606;
                            this.factorAuthOption();
                            }
                        }

                        }
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    this.state = 5611;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 814, this.context);
                } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER);
                }
                break;
            case 6:
                {
                this.state = 5613;
                this.registrationOption();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createUserAuthOption(): CreateUserAuthOptionContext {
        let localContext = new CreateUserAuthOptionContext(this.context, this.state);
        this.enterRule(localContext, 490, MySqlParser.RULE_createUserAuthOption);
        let _la: number;
        try {
            this.state = 5652;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 822, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5616;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 5617;
                this.match(MySqlParser.KW_BY);
                this.state = 5623;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.STRING_LITERAL:
                    {
                    this.state = 5618;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                    break;
                case MySqlParser.KW_RANDOM:
                    {
                    {
                    this.state = 5619;
                    this.match(MySqlParser.KW_RANDOM);
                    this.state = 5620;
                    this.match(MySqlParser.KW_PASSWORD);
                    }
                    }
                    break;
                case MySqlParser.KW_PASSWORD:
                    {
                    {
                    this.state = 5621;
                    this.match(MySqlParser.KW_PASSWORD);
                    this.state = 5622;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 5627;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 11) {
                    {
                    this.state = 5625;
                    this.match(MySqlParser.KW_AND);
                    this.state = 5626;
                    this.createUserAuthOption();
                    }
                }

                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5629;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 5630;
                this.match(MySqlParser.KW_WITH);
                this.state = 5631;
                localContext._authPlugin = this.uid();
                this.state = 5640;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_BY:
                    {
                    {
                    this.state = 5632;
                    this.match(MySqlParser.KW_BY);
                    this.state = 5636;
                    this.errorHandler.sync(this);
                    switch (this.tokenStream.LA(1)) {
                    case MySqlParser.STRING_LITERAL:
                        {
                        this.state = 5633;
                        this.match(MySqlParser.STRING_LITERAL);
                        }
                        break;
                    case MySqlParser.KW_RANDOM:
                        {
                        {
                        this.state = 5634;
                        this.match(MySqlParser.KW_RANDOM);
                        this.state = 5635;
                        this.match(MySqlParser.KW_PASSWORD);
                        }
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    }
                    }
                    break;
                case MySqlParser.KW_AS:
                    {
                    this.state = 5638;
                    this.match(MySqlParser.KW_AS);
                    this.state = 5639;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                    break;
                case MySqlParser.EOF:
                case MySqlParser.KW_ALTER:
                case MySqlParser.KW_ANALYZE:
                case MySqlParser.KW_AND:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_CALL:
                case MySqlParser.KW_CHANGE:
                case MySqlParser.KW_CHECK:
                case MySqlParser.KW_CREATE:
                case MySqlParser.KW_DEFAULT:
                case MySqlParser.KW_DELETE:
                case MySqlParser.KW_DESC:
                case MySqlParser.KW_DESCRIBE:
                case MySqlParser.KW_DROP:
                case MySqlParser.KW_EXPLAIN:
                case MySqlParser.KW_GET:
                case MySqlParser.KW_GRANT:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_KILL:
                case MySqlParser.KW_LOAD:
                case MySqlParser.KW_LOCK:
                case MySqlParser.KW_OPTIMIZE:
                case MySqlParser.KW_PURGE:
                case MySqlParser.KW_RELEASE:
                case MySqlParser.KW_RENAME:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_REQUIRE:
                case MySqlParser.KW_RESIGNAL:
                case MySqlParser.KW_REVOKE:
                case MySqlParser.KW_SELECT:
                case MySqlParser.KW_SET:
                case MySqlParser.KW_SHOW:
                case MySqlParser.KW_SIGNAL:
                case MySqlParser.KW_TABLE:
                case MySqlParser.KW_UNLOCK:
                case MySqlParser.KW_UPDATE:
                case MySqlParser.KW_USE:
                case MySqlParser.KW_VALUES:
                case MySqlParser.KW_WITH:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESTART:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_CLONE:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.LR_BRACKET:
                case MySqlParser.COMMA:
                case MySqlParser.SEMI:
                    break;
                default:
                    break;
                }
                this.state = 5644;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 11) {
                    {
                    this.state = 5642;
                    this.match(MySqlParser.KW_AND);
                    this.state = 5643;
                    this.createUserAuthOption();
                    }
                }

                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5646;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 5647;
                this.match(MySqlParser.KW_WITH);
                this.state = 5648;
                localContext._authPlugin = this.uid();
                this.state = 5650;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 427) {
                    {
                    this.state = 5649;
                    this.createUserInitialAuthOption();
                    }
                }

                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createUserInitialAuthOption(): CreateUserInitialAuthOptionContext {
        let localContext = new CreateUserInitialAuthOptionContext(this.context, this.state);
        this.enterRule(localContext, 492, MySqlParser.RULE_createUserInitialAuthOption);
        try {
            this.state = 5671;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 824, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5654;
                this.match(MySqlParser.KW_INITIAL);
                this.state = 5655;
                this.match(MySqlParser.KW_AUTHENTICATION);
                this.state = 5656;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 5657;
                this.match(MySqlParser.KW_BY);
                this.state = 5661;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_RANDOM:
                    {
                    {
                    this.state = 5658;
                    this.match(MySqlParser.KW_RANDOM);
                    this.state = 5659;
                    this.match(MySqlParser.KW_PASSWORD);
                    }
                    }
                    break;
                case MySqlParser.STRING_LITERAL:
                    {
                    this.state = 5660;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5663;
                this.match(MySqlParser.KW_INITIAL);
                this.state = 5664;
                this.match(MySqlParser.KW_AUTHENTICATION);
                this.state = 5665;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 5666;
                this.match(MySqlParser.KW_WITH);
                this.state = 5667;
                localContext._authPlugin = this.uid();
                this.state = 5668;
                this.match(MySqlParser.KW_AS);
                this.state = 5669;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public userAuthOption(): UserAuthOptionContext {
        let localContext = new UserAuthOptionContext(this.context, this.state);
        this.enterRule(localContext, 494, MySqlParser.RULE_userAuthOption);
        try {
            this.state = 5698;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 825, this.context) ) {
            case 1:
                localContext = new HashAuthOptionContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5673;
                this.userName();
                this.state = 5674;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 5675;
                this.match(MySqlParser.KW_BY);
                this.state = 5676;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 5677;
                (localContext as HashAuthOptionContext)._hashed = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 2:
                localContext = new RandomAuthOptionContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5679;
                this.userName();
                this.state = 5680;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 5681;
                this.match(MySqlParser.KW_BY);
                this.state = 5682;
                this.match(MySqlParser.KW_RANDOM);
                this.state = 5683;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 5684;
                this.authOptionClause();
                }
                break;
            case 3:
                localContext = new StringAuthOptionContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5686;
                this.userName();
                this.state = 5687;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 5688;
                this.match(MySqlParser.KW_BY);
                this.state = 5689;
                this.match(MySqlParser.STRING_LITERAL);
                this.state = 5690;
                this.authOptionClause();
                }
                break;
            case 4:
                localContext = new ModuleAuthOptionContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5692;
                this.userName();
                this.state = 5693;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 5694;
                this.match(MySqlParser.KW_WITH);
                this.state = 5695;
                this.authenticationRule();
                }
                break;
            case 5:
                localContext = new SimpleAuthOptionContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 5697;
                this.userName();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public authOptionClause(): AuthOptionClauseContext {
        let localContext = new AuthOptionClauseContext(this.context, this.state);
        this.enterRule(localContext, 496, MySqlParser.RULE_authOptionClause);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5702;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 826, this.context) ) {
            case 1:
                {
                this.state = 5700;
                this.match(MySqlParser.KW_REPLACE);
                this.state = 5701;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            }
            this.state = 5707;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 147) {
                {
                this.state = 5704;
                this.match(MySqlParser.KW_RETAIN);
                this.state = 5705;
                this.match(MySqlParser.KW_CURRENT);
                this.state = 5706;
                this.match(MySqlParser.KW_PASSWORD);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public authenticationRule(): AuthenticationRuleContext {
        let localContext = new AuthenticationRuleContext(this.context, this.state);
        this.enterRule(localContext, 498, MySqlParser.RULE_authenticationRule);
        let _la: number;
        try {
            this.state = 5723;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 830, this.context) ) {
            case 1:
                localContext = new ModuleContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5709;
                (localContext as ModuleContext)._authPlugin = this.uid();
                this.state = 5717;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 829, this.context) ) {
                case 1:
                    {
                    this.state = 5710;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 13 || _la === 20 || _la === 188)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 5714;
                    this.errorHandler.sync(this);
                    switch (this.tokenStream.LA(1)) {
                    case MySqlParser.STRING_LITERAL:
                        {
                        this.state = 5711;
                        this.match(MySqlParser.STRING_LITERAL);
                        }
                        break;
                    case MySqlParser.KW_RANDOM:
                        {
                        this.state = 5712;
                        this.match(MySqlParser.KW_RANDOM);
                        this.state = 5713;
                        this.match(MySqlParser.KW_PASSWORD);
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    this.state = 5716;
                    this.authOptionClause();
                    }
                    break;
                }
                }
                break;
            case 2:
                localContext = new PasswordModuleOptionContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5719;
                (localContext as PasswordModuleOptionContext)._authPlugin = this.uid();
                this.state = 5720;
                this.match(MySqlParser.KW_USING);
                this.state = 5721;
                this.passwordFunctionClause();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tlsOption(): TlsOptionContext {
        let localContext = new TlsOptionContext(this.context, this.state);
        this.enterRule(localContext, 500, MySqlParser.RULE_tlsOption);
        try {
            this.state = 5733;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_SSL:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5725;
                this.match(MySqlParser.KW_SSL);
                }
                break;
            case MySqlParser.KW_X509:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5726;
                this.match(MySqlParser.KW_X509);
                }
                break;
            case MySqlParser.KW_CIPHER:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5727;
                this.match(MySqlParser.KW_CIPHER);
                this.state = 5728;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_ISSUER:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5729;
                this.match(MySqlParser.KW_ISSUER);
                this.state = 5730;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_SUBJECT:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 5731;
                this.match(MySqlParser.KW_SUBJECT);
                this.state = 5732;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public userResourceOption(): UserResourceOptionContext {
        let localContext = new UserResourceOptionContext(this.context, this.state);
        this.enterRule(localContext, 502, MySqlParser.RULE_userResourceOption);
        try {
            this.state = 5743;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5735;
                this.match(MySqlParser.KW_MAX_QUERIES_PER_HOUR);
                this.state = 5736;
                this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5737;
                this.match(MySqlParser.KW_MAX_UPDATES_PER_HOUR);
                this.state = 5738;
                this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5739;
                this.match(MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR);
                this.state = 5740;
                this.decimalLiteral();
                }
                break;
            case MySqlParser.KW_MAX_USER_CONNECTIONS:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5741;
                this.match(MySqlParser.KW_MAX_USER_CONNECTIONS);
                this.state = 5742;
                this.decimalLiteral();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public userPasswordOption(): UserPasswordOptionContext {
        let localContext = new UserPasswordOptionContext(this.context, this.state);
        this.enterRule(localContext, 504, MySqlParser.RULE_userPasswordOption);
        let _la: number;
        try {
            this.state = 5783;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 838, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5745;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 5746;
                this.match(MySqlParser.KW_EXPIRE);
                this.state = 5753;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_DEFAULT:
                    {
                    this.state = 5747;
                    localContext._expireType = this.match(MySqlParser.KW_DEFAULT);
                    }
                    break;
                case MySqlParser.KW_NEVER:
                    {
                    this.state = 5748;
                    localContext._expireType = this.match(MySqlParser.KW_NEVER);
                    }
                    break;
                case MySqlParser.KW_INTERVAL:
                    {
                    this.state = 5749;
                    localContext._expireType = this.match(MySqlParser.KW_INTERVAL);
                    this.state = 5750;
                    this.decimalLiteral();
                    this.state = 5751;
                    this.match(MySqlParser.KW_DAY);
                    }
                    break;
                case MySqlParser.EOF:
                case MySqlParser.KW_ALTER:
                case MySqlParser.KW_ANALYZE:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_CALL:
                case MySqlParser.KW_CHANGE:
                case MySqlParser.KW_CHECK:
                case MySqlParser.KW_CREATE:
                case MySqlParser.KW_DELETE:
                case MySqlParser.KW_DESC:
                case MySqlParser.KW_DESCRIBE:
                case MySqlParser.KW_DROP:
                case MySqlParser.KW_EXPLAIN:
                case MySqlParser.KW_GET:
                case MySqlParser.KW_GRANT:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_KILL:
                case MySqlParser.KW_LOAD:
                case MySqlParser.KW_LOCK:
                case MySqlParser.KW_OPTIMIZE:
                case MySqlParser.KW_PURGE:
                case MySqlParser.KW_RELEASE:
                case MySqlParser.KW_RENAME:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RESIGNAL:
                case MySqlParser.KW_REVOKE:
                case MySqlParser.KW_SELECT:
                case MySqlParser.KW_SET:
                case MySqlParser.KW_SHOW:
                case MySqlParser.KW_SIGNAL:
                case MySqlParser.KW_TABLE:
                case MySqlParser.KW_UNLOCK:
                case MySqlParser.KW_UPDATE:
                case MySqlParser.KW_USE:
                case MySqlParser.KW_VALUES:
                case MySqlParser.KW_WITH:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESTART:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_CLONE:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.LR_BRACKET:
                case MySqlParser.COMMA:
                case MySqlParser.SEMI:
                    break;
                default:
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5755;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 5756;
                this.match(MySqlParser.KW_HISTORY);
                this.state = 5759;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_DEFAULT:
                    {
                    this.state = 5757;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                    break;
                case MySqlParser.ZERO_DECIMAL:
                case MySqlParser.ONE_DECIMAL:
                case MySqlParser.TWO_DECIMAL:
                case MySqlParser.THREE_DECIMAL:
                case MySqlParser.DECIMAL_LITERAL:
                case MySqlParser.REAL_LITERAL:
                    {
                    this.state = 5758;
                    this.decimalLiteral();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5761;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 5762;
                this.match(MySqlParser.KW_REUSE);
                this.state = 5763;
                this.match(MySqlParser.KW_INTERVAL);
                this.state = 5768;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_DEFAULT:
                    {
                    this.state = 5764;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                    break;
                case MySqlParser.ZERO_DECIMAL:
                case MySqlParser.ONE_DECIMAL:
                case MySqlParser.TWO_DECIMAL:
                case MySqlParser.THREE_DECIMAL:
                case MySqlParser.DECIMAL_LITERAL:
                case MySqlParser.REAL_LITERAL:
                    {
                    this.state = 5765;
                    this.decimalLiteral();
                    this.state = 5766;
                    this.match(MySqlParser.KW_DAY);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5770;
                this.match(MySqlParser.KW_PASSWORD);
                this.state = 5771;
                this.match(MySqlParser.KW_REQUIRE);
                this.state = 5772;
                this.match(MySqlParser.KW_CURRENT);
                this.state = 5774;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 42 || _la === 122) {
                    {
                    this.state = 5773;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 42 || _la === 122)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 5776;
                this.match(MySqlParser.KW_FAILED_LOGIN_ATTEMPTS);
                this.state = 5777;
                this.decimalLiteral();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 5778;
                this.match(MySqlParser.KW_PASSWORD_LOCK_TIME);
                this.state = 5781;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.ZERO_DECIMAL:
                case MySqlParser.ONE_DECIMAL:
                case MySqlParser.TWO_DECIMAL:
                case MySqlParser.THREE_DECIMAL:
                case MySqlParser.DECIMAL_LITERAL:
                case MySqlParser.REAL_LITERAL:
                    {
                    this.state = 5779;
                    this.decimalLiteral();
                    }
                    break;
                case MySqlParser.KW_UNBOUNDED:
                    {
                    this.state = 5780;
                    this.match(MySqlParser.KW_UNBOUNDED);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public userLockOption(): UserLockOptionContext {
        let localContext = new UserLockOptionContext(this.context, this.state);
        this.enterRule(localContext, 506, MySqlParser.RULE_userLockOption);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5785;
            this.match(MySqlParser.KW_ACCOUNT);
            this.state = 5786;
            localContext._lockType = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(_la === 104 || _la === 183)) {
                localContext._lockType = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public factorAuthOption(): FactorAuthOptionContext {
        let localContext = new FactorAuthOptionContext(this.context, this.state);
        this.enterRule(localContext, 508, MySqlParser.RULE_factorAuthOption);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5788;
            this.match(MySqlParser.KW_IDENTIFIED);
            this.state = 5791;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 194) {
                {
                this.state = 5789;
                this.match(MySqlParser.KW_WITH);
                this.state = 5790;
                localContext._authPlugin = this.uid();
                }
            }

            this.state = 5801;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_BY:
                {
                {
                this.state = 5793;
                this.match(MySqlParser.KW_BY);
                this.state = 5797;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.STRING_LITERAL:
                    {
                    this.state = 5794;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                    break;
                case MySqlParser.KW_RANDOM:
                    {
                    {
                    this.state = 5795;
                    this.match(MySqlParser.KW_RANDOM);
                    this.state = 5796;
                    this.match(MySqlParser.KW_PASSWORD);
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                }
                break;
            case MySqlParser.KW_AS:
                {
                this.state = 5799;
                this.match(MySqlParser.KW_AS);
                this.state = 5800;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public registrationOption(): RegistrationOptionContext {
        let localContext = new RegistrationOptionContext(this.context, this.state);
        this.enterRule(localContext, 510, MySqlParser.RULE_registrationOption);
        try {
            this.state = 5818;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 842, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5803;
                this.factor();
                this.state = 5804;
                this.match(MySqlParser.KW_INITIATE);
                this.state = 5805;
                this.match(MySqlParser.KW_REGISTRATION);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5807;
                this.factor();
                this.state = 5808;
                this.match(MySqlParser.KW_FINISH);
                this.state = 5809;
                this.match(MySqlParser.KW_REGISTRATION);
                this.state = 5810;
                this.match(MySqlParser.KW_SET);
                this.state = 5811;
                this.match(MySqlParser.KW_CHALLENGE_RESPONSE);
                this.state = 5812;
                this.match(MySqlParser.KW_AS);
                this.state = 5813;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5815;
                this.factor();
                this.state = 5816;
                this.match(MySqlParser.KW_UNREGISTER);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public factor(): FactorContext {
        let localContext = new FactorContext(this.context, this.state);
        this.enterRule(localContext, 512, MySqlParser.RULE_factor);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5820;
            _la = this.tokenStream.LA(1);
            if(!(_la === 873 || _la === 874)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 5821;
            this.match(MySqlParser.KW_FACTOR);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public privelegeClause(): PrivelegeClauseContext {
        let localContext = new PrivelegeClauseContext(this.context, this.state);
        this.enterRule(localContext, 514, MySqlParser.RULE_privelegeClause);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5823;
            this.privilege();
            this.state = 5828;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 866) {
                {
                this.state = 5824;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 5825;
                this.columnNames();
                this.state = 5826;
                this.match(MySqlParser.RR_BRACKET);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public privilege(): PrivilegeContext {
        let localContext = new PrivilegeContext(this.context, this.state);
        this.enterRule(localContext, 516, MySqlParser.RULE_privilege);
        let _la: number;
        try {
            this.state = 5923;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 848, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5830;
                this.match(MySqlParser.KW_ALL);
                this.state = 5832;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 734) {
                    {
                    this.state = 5831;
                    this.match(MySqlParser.KW_PRIVILEGES);
                    }
                }

                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5834;
                this.match(MySqlParser.KW_ALTER);
                this.state = 5836;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 743) {
                    {
                    this.state = 5835;
                    this.match(MySqlParser.KW_ROUTINE);
                    }
                }

                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5838;
                this.match(MySqlParser.KW_CREATE);
                this.state = 5846;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_TEMPORARY:
                    {
                    this.state = 5839;
                    this.match(MySqlParser.KW_TEMPORARY);
                    this.state = 5840;
                    this.match(MySqlParser.KW_TABLES);
                    }
                    break;
                case MySqlParser.KW_ROUTINE:
                    {
                    this.state = 5841;
                    this.match(MySqlParser.KW_ROUTINE);
                    }
                    break;
                case MySqlParser.KW_VIEW:
                    {
                    this.state = 5842;
                    this.match(MySqlParser.KW_VIEW);
                    }
                    break;
                case MySqlParser.KW_USER:
                    {
                    this.state = 5843;
                    this.match(MySqlParser.KW_USER);
                    }
                    break;
                case MySqlParser.KW_TABLESPACE:
                    {
                    this.state = 5844;
                    this.match(MySqlParser.KW_TABLESPACE);
                    }
                    break;
                case MySqlParser.KW_ROLE:
                    {
                    this.state = 5845;
                    this.match(MySqlParser.KW_ROLE);
                    }
                    break;
                case MySqlParser.KW_ON:
                case MySqlParser.LR_BRACKET:
                case MySqlParser.COMMA:
                    break;
                default:
                    break;
                }
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5848;
                this.match(MySqlParser.KW_DELETE);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 5849;
                this.match(MySqlParser.KW_DROP);
                this.state = 5851;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 582) {
                    {
                    this.state = 5850;
                    this.match(MySqlParser.KW_ROLE);
                    }
                }

                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 5853;
                this.match(MySqlParser.KW_EVENT);
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 5854;
                this.match(MySqlParser.KW_EXECUTE);
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 5855;
                this.match(MySqlParser.KW_FILE);
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 5856;
                this.match(MySqlParser.KW_GRANT);
                this.state = 5857;
                this.match(MySqlParser.KW_OPTION);
                }
                break;
            case 10:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 5858;
                this.match(MySqlParser.KW_INDEX);
                }
                break;
            case 11:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 5859;
                this.match(MySqlParser.KW_INSERT);
                }
                break;
            case 12:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 5860;
                this.match(MySqlParser.KW_LOCK);
                this.state = 5861;
                this.match(MySqlParser.KW_TABLES);
                }
                break;
            case 13:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 5862;
                this.match(MySqlParser.KW_PROCESS);
                }
                break;
            case 14:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 5863;
                this.match(MySqlParser.KW_PROXY);
                }
                break;
            case 15:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 5864;
                this.match(MySqlParser.KW_REFERENCES);
                }
                break;
            case 16:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 5865;
                this.match(MySqlParser.KW_RELOAD);
                }
                break;
            case 17:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 5866;
                this.match(MySqlParser.KW_REPLICATION);
                this.state = 5867;
                _la = this.tokenStream.LA(1);
                if(!(_la === 333 || _la === 598)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 18:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 5868;
                this.match(MySqlParser.KW_SELECT);
                }
                break;
            case 19:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 5869;
                this.match(MySqlParser.KW_SHOW);
                this.state = 5870;
                _la = this.tokenStream.LA(1);
                if(!(_la === 40 || _la === 684)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 20:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 5871;
                this.match(MySqlParser.KW_SHUTDOWN);
                }
                break;
            case 21:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 5872;
                this.match(MySqlParser.KW_SUPER);
                }
                break;
            case 22:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 5873;
                this.match(MySqlParser.KW_TRIGGER);
                }
                break;
            case 23:
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 5874;
                this.match(MySqlParser.KW_UPDATE);
                }
                break;
            case 24:
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 5875;
                this.match(MySqlParser.KW_USAGE);
                }
                break;
            case 25:
                this.enterOuterAlt(localContext, 25);
                {
                this.state = 5876;
                this.match(MySqlParser.KW_APPLICATION_PASSWORD_ADMIN);
                }
                break;
            case 26:
                this.enterOuterAlt(localContext, 26);
                {
                this.state = 5877;
                this.match(MySqlParser.KW_AUDIT_ABORT_EXEMPT);
                }
                break;
            case 27:
                this.enterOuterAlt(localContext, 27);
                {
                this.state = 5878;
                this.match(MySqlParser.KW_AUDIT_ADMIN);
                }
                break;
            case 28:
                this.enterOuterAlt(localContext, 28);
                {
                this.state = 5879;
                this.match(MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN);
                }
                break;
            case 29:
                this.enterOuterAlt(localContext, 29);
                {
                this.state = 5880;
                this.match(MySqlParser.KW_BACKUP_ADMIN);
                }
                break;
            case 30:
                this.enterOuterAlt(localContext, 30);
                {
                this.state = 5881;
                this.match(MySqlParser.KW_BINLOG_ADMIN);
                }
                break;
            case 31:
                this.enterOuterAlt(localContext, 31);
                {
                this.state = 5882;
                this.match(MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN);
                }
                break;
            case 32:
                this.enterOuterAlt(localContext, 32);
                {
                this.state = 5883;
                this.match(MySqlParser.KW_CLONE_ADMIN);
                }
                break;
            case 33:
                this.enterOuterAlt(localContext, 33);
                {
                this.state = 5884;
                this.match(MySqlParser.KW_CONNECTION_ADMIN);
                }
                break;
            case 34:
                this.enterOuterAlt(localContext, 34);
                {
                this.state = 5885;
                this.match(MySqlParser.KW_ENCRYPTION_KEY_ADMIN);
                }
                break;
            case 35:
                this.enterOuterAlt(localContext, 35);
                {
                this.state = 5886;
                this.match(MySqlParser.KW_FIREWALL_ADMIN);
                }
                break;
            case 36:
                this.enterOuterAlt(localContext, 36);
                {
                this.state = 5887;
                this.match(MySqlParser.KW_FIREWALL_EXEMPT);
                }
                break;
            case 37:
                this.enterOuterAlt(localContext, 37);
                {
                this.state = 5888;
                this.match(MySqlParser.KW_FIREWALL_USER);
                }
                break;
            case 38:
                this.enterOuterAlt(localContext, 38);
                {
                this.state = 5889;
                this.match(MySqlParser.KW_FLUSH_OPTIMIZER_COSTS);
                }
                break;
            case 39:
                this.enterOuterAlt(localContext, 39);
                {
                this.state = 5890;
                this.match(MySqlParser.KW_FLUSH_STATUS);
                }
                break;
            case 40:
                this.enterOuterAlt(localContext, 40);
                {
                this.state = 5891;
                this.match(MySqlParser.KW_FLUSH_TABLES);
                }
                break;
            case 41:
                this.enterOuterAlt(localContext, 41);
                {
                this.state = 5892;
                this.match(MySqlParser.KW_FLUSH_USER_RESOURCES);
                }
                break;
            case 42:
                this.enterOuterAlt(localContext, 42);
                {
                this.state = 5893;
                this.match(MySqlParser.KW_GROUP_REPLICATION_ADMIN);
                }
                break;
            case 43:
                this.enterOuterAlt(localContext, 43);
                {
                this.state = 5894;
                this.match(MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE);
                }
                break;
            case 44:
                this.enterOuterAlt(localContext, 44);
                {
                this.state = 5895;
                this.match(MySqlParser.KW_INNODB_REDO_LOG_ENABLE);
                }
                break;
            case 45:
                this.enterOuterAlt(localContext, 45);
                {
                this.state = 5896;
                this.match(MySqlParser.KW_NDB_STORED_USER);
                }
                break;
            case 46:
                this.enterOuterAlt(localContext, 46);
                {
                this.state = 5897;
                this.match(MySqlParser.KW_PASSWORDLESS_USER_ADMIN);
                }
                break;
            case 47:
                this.enterOuterAlt(localContext, 47);
                {
                this.state = 5898;
                this.match(MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN);
                }
                break;
            case 48:
                this.enterOuterAlt(localContext, 48);
                {
                this.state = 5899;
                this.match(MySqlParser.KW_REPLICATION_APPLIER);
                }
                break;
            case 49:
                this.enterOuterAlt(localContext, 49);
                {
                this.state = 5900;
                this.match(MySqlParser.KW_REPLICATION_SLAVE_ADMIN);
                }
                break;
            case 50:
                this.enterOuterAlt(localContext, 50);
                {
                this.state = 5901;
                this.match(MySqlParser.KW_RESOURCE_GROUP_ADMIN);
                }
                break;
            case 51:
                this.enterOuterAlt(localContext, 51);
                {
                this.state = 5902;
                this.match(MySqlParser.KW_RESOURCE_GROUP_USER);
                }
                break;
            case 52:
                this.enterOuterAlt(localContext, 52);
                {
                this.state = 5903;
                this.match(MySqlParser.KW_ROLE_ADMIN);
                }
                break;
            case 53:
                this.enterOuterAlt(localContext, 53);
                {
                this.state = 5904;
                this.match(MySqlParser.KW_SERVICE_CONNECTION_ADMIN);
                }
                break;
            case 54:
                this.enterOuterAlt(localContext, 54);
                {
                this.state = 5905;
                this.match(MySqlParser.KW_SESSION_VARIABLES_ADMIN);
                }
                break;
            case 55:
                this.enterOuterAlt(localContext, 55);
                {
                this.state = 5906;
                this.match(MySqlParser.KW_SET_USER_ID);
                }
                break;
            case 56:
                this.enterOuterAlt(localContext, 56);
                {
                this.state = 5907;
                this.match(MySqlParser.KW_SKIP_QUERY_REWRITE);
                }
                break;
            case 57:
                this.enterOuterAlt(localContext, 57);
                {
                this.state = 5908;
                this.match(MySqlParser.KW_SHOW_ROUTINE);
                }
                break;
            case 58:
                this.enterOuterAlt(localContext, 58);
                {
                this.state = 5909;
                this.match(MySqlParser.KW_SYSTEM_USER);
                }
                break;
            case 59:
                this.enterOuterAlt(localContext, 59);
                {
                this.state = 5910;
                this.match(MySqlParser.KW_SYSTEM_VARIABLES_ADMIN);
                }
                break;
            case 60:
                this.enterOuterAlt(localContext, 60);
                {
                this.state = 5911;
                this.match(MySqlParser.KW_TABLE_ENCRYPTION_ADMIN);
                }
                break;
            case 61:
                this.enterOuterAlt(localContext, 61);
                {
                this.state = 5912;
                this.match(MySqlParser.KW_TP_CONNECTION_ADMIN);
                }
                break;
            case 62:
                this.enterOuterAlt(localContext, 62);
                {
                this.state = 5913;
                this.match(MySqlParser.KW_VERSION_TOKEN_ADMIN);
                }
                break;
            case 63:
                this.enterOuterAlt(localContext, 63);
                {
                this.state = 5914;
                this.match(MySqlParser.KW_XA_RECOVER_ADMIN);
                }
                break;
            case 64:
                this.enterOuterAlt(localContext, 64);
                {
                this.state = 5915;
                this.match(MySqlParser.KW_LOAD);
                this.state = 5916;
                this.match(MySqlParser.KW_FROM);
                this.state = 5917;
                this.match(MySqlParser.KW_S3);
                }
                break;
            case 65:
                this.enterOuterAlt(localContext, 65);
                {
                this.state = 5918;
                this.match(MySqlParser.KW_SELECT);
                this.state = 5919;
                this.match(MySqlParser.KW_INTO);
                this.state = 5920;
                this.match(MySqlParser.KW_S3);
                }
                break;
            case 66:
                this.enterOuterAlt(localContext, 66);
                {
                this.state = 5921;
                this.match(MySqlParser.KW_INVOKE);
                this.state = 5922;
                this.match(MySqlParser.KW_LAMBDA);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public privilegeLevel(): PrivilegeLevelContext {
        let localContext = new PrivilegeLevelContext(this.context, this.state);
        this.enterRule(localContext, 518, MySqlParser.RULE_privilegeLevel);
        try {
            this.state = 5941;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 849, this.context) ) {
            case 1:
                localContext = new CurrentSchemaPriviLevelContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5925;
                this.match(MySqlParser.STAR);
                }
                break;
            case 2:
                localContext = new GlobalPrivLevelContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5926;
                this.match(MySqlParser.STAR);
                this.state = 5927;
                this.match(MySqlParser.DOT);
                this.state = 5928;
                this.match(MySqlParser.STAR);
                }
                break;
            case 3:
                localContext = new DefiniteSchemaPrivLevelContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5929;
                this.uid();
                this.state = 5930;
                this.match(MySqlParser.DOT);
                this.state = 5931;
                this.match(MySqlParser.STAR);
                }
                break;
            case 4:
                localContext = new DefiniteFullTablePrivLevelContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5933;
                this.uid();
                this.state = 5934;
                this.match(MySqlParser.DOT);
                this.state = 5935;
                this.uid();
                }
                break;
            case 5:
                localContext = new DefiniteFullTablePrivLevel2Context(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 5937;
                this.uid();
                this.state = 5938;
                this.dottedId();
                }
                break;
            case 6:
                localContext = new DefiniteTablePrivLevelContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 5940;
                this.uid();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public renameUserClause(): RenameUserClauseContext {
        let localContext = new RenameUserClauseContext(this.context, this.state);
        this.enterRule(localContext, 520, MySqlParser.RULE_renameUserClause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5943;
            localContext._fromFirst = this.userName();
            this.state = 5944;
            this.match(MySqlParser.KW_TO);
            this.state = 5945;
            localContext._toFirst = this.userName();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public analyzeTable(): AnalyzeTableContext {
        let localContext = new AnalyzeTableContext(this.context, this.state);
        this.enterRule(localContext, 522, MySqlParser.RULE_analyzeTable);
        let _la: number;
        try {
            this.state = 5995;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 856, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 5947;
                this.match(MySqlParser.KW_ANALYZE);
                this.state = 5949;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 115 || _la === 450) {
                    {
                    this.state = 5948;
                    this.tableActionOption();
                    }
                }

                this.state = 5951;
                this.match(MySqlParser.KW_TABLE);
                this.state = 5952;
                this.tableNames();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 5953;
                this.match(MySqlParser.KW_ANALYZE);
                this.state = 5955;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 115 || _la === 450) {
                    {
                    this.state = 5954;
                    this.tableActionOption();
                    }
                }

                this.state = 5957;
                this.match(MySqlParser.KW_TABLE);
                this.state = 5958;
                this.tableName();
                this.state = 5959;
                this.match(MySqlParser.KW_UPDATE);
                this.state = 5960;
                this.match(MySqlParser.KW_HISTOGRAM);
                this.state = 5961;
                this.match(MySqlParser.KW_ON);
                this.state = 5962;
                this.columnNames();
                this.state = 5967;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 852, this.context) ) {
                case 1:
                    {
                    this.state = 5963;
                    this.match(MySqlParser.KW_WITH);
                    this.state = 5964;
                    this.decimalLiteral();
                    this.state = 5965;
                    this.match(MySqlParser.KW_BUCKETS);
                    }
                    break;
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 5969;
                this.match(MySqlParser.KW_ANALYZE);
                this.state = 5971;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 115 || _la === 450) {
                    {
                    this.state = 5970;
                    this.tableActionOption();
                    }
                }

                this.state = 5973;
                this.match(MySqlParser.KW_TABLE);
                this.state = 5974;
                this.tableName();
                this.state = 5975;
                this.match(MySqlParser.KW_UPDATE);
                this.state = 5976;
                this.match(MySqlParser.KW_HISTOGRAM);
                this.state = 5977;
                this.match(MySqlParser.KW_ON);
                this.state = 5978;
                this.columnName();
                this.state = 5982;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 188) {
                    {
                    this.state = 5979;
                    this.match(MySqlParser.KW_USING);
                    this.state = 5980;
                    this.match(MySqlParser.KW_DATA);
                    this.state = 5981;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                }

                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 5984;
                this.match(MySqlParser.KW_ANALYZE);
                this.state = 5986;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 115 || _la === 450) {
                    {
                    this.state = 5985;
                    this.tableActionOption();
                    }
                }

                this.state = 5988;
                this.match(MySqlParser.KW_TABLE);
                this.state = 5989;
                this.tableName();
                this.state = 5990;
                this.match(MySqlParser.KW_DROP);
                this.state = 5991;
                this.match(MySqlParser.KW_HISTOGRAM);
                this.state = 5992;
                this.match(MySqlParser.KW_ON);
                this.state = 5993;
                this.columnNames();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public checkTable(): CheckTableContext {
        let localContext = new CheckTableContext(this.context, this.state);
        this.enterRule(localContext, 524, MySqlParser.RULE_checkTable);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 5997;
            this.match(MySqlParser.KW_CHECK);
            this.state = 5998;
            this.match(MySqlParser.KW_TABLE);
            this.state = 5999;
            this.tableNames();
            this.state = 6003;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 65 || _la === 327 || _la === 392 || _la === 396 || _la === 484 || _la === 549) {
                {
                {
                this.state = 6000;
                this.checkTableOption();
                }
                }
                this.state = 6005;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public checksumTable(): ChecksumTableContext {
        let localContext = new ChecksumTableContext(this.context, this.state);
        this.enterRule(localContext, 526, MySqlParser.RULE_checksumTable);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6006;
            this.match(MySqlParser.KW_CHECKSUM);
            this.state = 6007;
            this.match(MySqlParser.KW_TABLE);
            this.state = 6008;
            this.tableNames();
            this.state = 6010;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 392 || _la === 549) {
                {
                this.state = 6009;
                localContext._actionOption = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 392 || _la === 549)) {
                    localContext._actionOption = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public optimizeTable(): OptimizeTableContext {
        let localContext = new OptimizeTableContext(this.context, this.state);
        this.enterRule(localContext, 528, MySqlParser.RULE_optimizeTable);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6012;
            this.match(MySqlParser.KW_OPTIMIZE);
            this.state = 6014;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 115 || _la === 450) {
                {
                this.state = 6013;
                this.tableActionOption();
                }
            }

            this.state = 6016;
            _la = this.tokenStream.LA(1);
            if(!(_la === 173 || _la === 752)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 6017;
            this.tableNames();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public repairTable(): RepairTableContext {
        let localContext = new RepairTableContext(this.context, this.state);
        this.enterRule(localContext, 530, MySqlParser.RULE_repairTable);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6019;
            this.match(MySqlParser.KW_REPAIR);
            this.state = 6021;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 115 || _la === 450) {
                {
                this.state = 6020;
                this.tableActionOption();
                }
            }

            this.state = 6023;
            this.match(MySqlParser.KW_TABLE);
            this.state = 6024;
            this.tableNames();
            this.state = 6026;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 549) {
                {
                this.state = 6025;
                this.match(MySqlParser.KW_QUICK);
                }
            }

            this.state = 6029;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 392) {
                {
                this.state = 6028;
                this.match(MySqlParser.KW_EXTENDED);
                }
            }

            this.state = 6032;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 679) {
                {
                this.state = 6031;
                this.match(MySqlParser.KW_USE_FRM);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tableActionOption(): TableActionOptionContext {
        let localContext = new TableActionOptionContext(this.context, this.state);
        this.enterRule(localContext, 532, MySqlParser.RULE_tableActionOption);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6034;
            _la = this.tokenStream.LA(1);
            if(!(_la === 115 || _la === 450)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public checkTableOption(): CheckTableOptionContext {
        let localContext = new CheckTableOptionContext(this.context, this.state);
        this.enterRule(localContext, 534, MySqlParser.RULE_checkTableOption);
        try {
            this.state = 6043;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_FOR:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6036;
                this.match(MySqlParser.KW_FOR);
                this.state = 6037;
                this.match(MySqlParser.KW_UPGRADE);
                }
                break;
            case MySqlParser.KW_QUICK:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6038;
                this.match(MySqlParser.KW_QUICK);
                }
                break;
            case MySqlParser.KW_FAST:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6039;
                this.match(MySqlParser.KW_FAST);
                }
                break;
            case MySqlParser.KW_MEDIUM:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6040;
                this.match(MySqlParser.KW_MEDIUM);
                }
                break;
            case MySqlParser.KW_EXTENDED:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 6041;
                this.match(MySqlParser.KW_EXTENDED);
                }
                break;
            case MySqlParser.KW_CHANGED:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 6042;
                this.match(MySqlParser.KW_CHANGED);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public createFunction(): CreateFunctionContext {
        let localContext = new CreateFunctionContext(this.context, this.state);
        this.enterRule(localContext, 536, MySqlParser.RULE_createFunction);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6045;
            this.match(MySqlParser.KW_CREATE);
            this.state = 6047;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 307) {
                {
                this.state = 6046;
                this.match(MySqlParser.KW_AGGREGATE);
                }
            }

            this.state = 6049;
            this.match(MySqlParser.KW_FUNCTION);
            this.state = 6051;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 866, this.context) ) {
            case 1:
                {
                this.state = 6050;
                this.ifNotExists();
                }
                break;
            }
            this.state = 6053;
            this.functionNameCreate();
            this.state = 6054;
            this.match(MySqlParser.KW_RETURNS);
            this.state = 6055;
            localContext._returnType = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 208)) & ~0x1F) === 0 && ((1 << (_la - 208)) & 261) !== 0) || _la === 649)) {
                localContext._returnType = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 6056;
            this.match(MySqlParser.KW_SONAME);
            this.state = 6057;
            this.match(MySqlParser.STRING_LITERAL);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public installComponent(): InstallComponentContext {
        let localContext = new InstallComponentContext(this.context, this.state);
        this.enterRule(localContext, 538, MySqlParser.RULE_installComponent);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6059;
            this.match(MySqlParser.KW_INSTALL);
            this.state = 6060;
            this.match(MySqlParser.KW_COMPONENT);
            this.state = 6061;
            localContext._component_name = this.uid();
            this.state = 6066;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 6062;
                this.match(MySqlParser.COMMA);
                this.state = 6063;
                localContext._component_name = this.uid();
                }
                }
                this.state = 6068;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 6078;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 869, this.context) ) {
            case 1:
                {
                this.state = 6069;
                this.match(MySqlParser.KW_SET);
                this.state = 6070;
                this.variableExpr();
                this.state = 6075;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 6071;
                    this.match(MySqlParser.COMMA);
                    this.state = 6072;
                    this.variableExpr();
                    }
                    }
                    this.state = 6077;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public variableExpr(): VariableExprContext {
        let localContext = new VariableExprContext(this.context, this.state);
        this.enterRule(localContext, 540, MySqlParser.RULE_variableExpr);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6080;
            _la = this.tokenStream.LA(1);
            if(!(_la === 413 || _la === 531 || _la === 893 || _la === 894)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 6081;
            localContext._system_var_name = this.fullId();
            this.state = 6082;
            this.match(MySqlParser.EQUAL_SYMBOL);
            this.state = 6083;
            this.expression(0);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public uninstallComponent(): UninstallComponentContext {
        let localContext = new UninstallComponentContext(this.context, this.state);
        this.enterRule(localContext, 542, MySqlParser.RULE_uninstallComponent);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6085;
            this.match(MySqlParser.KW_UNINSTALL);
            this.state = 6086;
            this.match(MySqlParser.KW_COMPONENT);
            this.state = 6087;
            localContext._component_name = this.uid();
            this.state = 6092;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 6088;
                this.match(MySqlParser.COMMA);
                this.state = 6089;
                localContext._component_name = this.uid();
                }
                }
                this.state = 6094;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public installPlugin(): InstallPluginContext {
        let localContext = new InstallPluginContext(this.context, this.state);
        this.enterRule(localContext, 544, MySqlParser.RULE_installPlugin);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6095;
            this.match(MySqlParser.KW_INSTALL);
            this.state = 6096;
            this.match(MySqlParser.KW_PLUGIN);
            this.state = 6097;
            localContext._pluginName = this.uid();
            this.state = 6098;
            this.match(MySqlParser.KW_SONAME);
            this.state = 6099;
            this.match(MySqlParser.STRING_LITERAL);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public uninstallPlugin(): UninstallPluginContext {
        let localContext = new UninstallPluginContext(this.context, this.state);
        this.enterRule(localContext, 546, MySqlParser.RULE_uninstallPlugin);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6101;
            this.match(MySqlParser.KW_UNINSTALL);
            this.state = 6102;
            this.match(MySqlParser.KW_PLUGIN);
            this.state = 6103;
            localContext._pluginName = this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public cloneStatement(): CloneStatementContext {
        let localContext = new CloneStatementContext(this.context, this.state);
        this.enterRule(localContext, 548, MySqlParser.RULE_cloneStatement);
        let _la: number;
        try {
            this.state = 6135;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 876, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6105;
                this.match(MySqlParser.KW_CLONE);
                this.state = 6106;
                this.match(MySqlParser.KW_LOCAL);
                this.state = 6107;
                this.match(MySqlParser.KW_DATA);
                this.state = 6108;
                this.match(MySqlParser.KW_DIRECTORY);
                this.state = 6110;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 857) {
                    {
                    this.state = 6109;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    }
                }

                this.state = 6112;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6113;
                this.match(MySqlParser.KW_CLONE);
                this.state = 6114;
                this.match(MySqlParser.KW_INSTANCE);
                this.state = 6115;
                this.match(MySqlParser.KW_FROM);
                this.state = 6116;
                this.userHostPort();
                this.state = 6117;
                this.match(MySqlParser.KW_IDENTIFIED);
                this.state = 6118;
                this.match(MySqlParser.KW_BY);
                this.state = 6119;
                this.match(MySqlParser.STRING_LITERAL);
                this.state = 6126;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 360) {
                    {
                    this.state = 6120;
                    this.match(MySqlParser.KW_DATA);
                    this.state = 6121;
                    this.match(MySqlParser.KW_DIRECTORY);
                    this.state = 6123;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 857) {
                        {
                        this.state = 6122;
                        this.match(MySqlParser.EQUAL_SYMBOL);
                        }
                    }

                    this.state = 6125;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                }

                this.state = 6133;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 144) {
                    {
                    this.state = 6128;
                    this.match(MySqlParser.KW_REQUIRE);
                    this.state = 6130;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 502) {
                        {
                        this.state = 6129;
                        this.match(MySqlParser.KW_NO);
                        }
                    }

                    this.state = 6132;
                    this.match(MySqlParser.KW_SSL);
                    }
                }

                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public setStatement(): SetStatementContext {
        let localContext = new SetStatementContext(this.context, this.state);
        this.enterRule(localContext, 550, MySqlParser.RULE_setStatement);
        let _la: number;
        try {
            this.state = 6189;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 884, this.context) ) {
            case 1:
                localContext = new SetVariableContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6137;
                this.match(MySqlParser.KW_SET);
                this.state = 6138;
                this.variableClause();
                this.state = 6139;
                _la = this.tokenStream.LA(1);
                if(!(_la === 841 || _la === 857)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6142;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 877, this.context) ) {
                case 1:
                    {
                    this.state = 6140;
                    this.expression(0);
                    }
                    break;
                case 2:
                    {
                    this.state = 6141;
                    this.match(MySqlParser.KW_ON);
                    }
                    break;
                }
                this.state = 6153;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 6144;
                    this.match(MySqlParser.COMMA);
                    this.state = 6145;
                    this.variableClause();
                    this.state = 6146;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 841 || _la === 857)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 6149;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 878, this.context) ) {
                    case 1:
                        {
                        this.state = 6147;
                        this.expression(0);
                        }
                        break;
                    case 2:
                        {
                        this.state = 6148;
                        this.match(MySqlParser.KW_ON);
                        }
                        break;
                    }
                    }
                    }
                    this.state = 6155;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case 2:
                localContext = new SetCharsetContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6156;
                this.match(MySqlParser.KW_SET);
                this.state = 6157;
                this.charSet();
                this.state = 6160;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                    {
                    this.state = 6158;
                    this.charsetName();
                    }
                    break;
                case MySqlParser.KW_DEFAULT:
                    {
                    this.state = 6159;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 3:
                localContext = new SetNamesContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6162;
                this.match(MySqlParser.KW_SET);
                this.state = 6163;
                this.match(MySqlParser.KW_NAMES);
                this.state = 6170;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                    {
                    this.state = 6164;
                    this.charsetName();
                    this.state = 6167;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 28) {
                        {
                        this.state = 6165;
                        this.match(MySqlParser.KW_COLLATE);
                        this.state = 6166;
                        this.collationName();
                        }
                    }

                    }
                    break;
                case MySqlParser.KW_DEFAULT:
                    {
                    this.state = 6169;
                    this.match(MySqlParser.KW_DEFAULT);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 4:
                localContext = new SetPasswordContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6172;
                this.setPasswordStatement();
                }
                break;
            case 5:
                localContext = new SetTransactionContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 6173;
                this.setTransactionStatement();
                }
                break;
            case 6:
                localContext = new SetAutocommitContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 6174;
                this.setAutocommitStatement();
                }
                break;
            case 7:
                localContext = new SetNewValueInsideTriggerContext(localContext);
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 6175;
                this.match(MySqlParser.KW_SET);
                this.state = 6176;
                (localContext as SetNewValueInsideTriggerContext)._system_var_name = this.fullId();
                this.state = 6177;
                _la = this.tokenStream.LA(1);
                if(!(_la === 841 || _la === 857)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6178;
                this.expression(0);
                this.state = 6186;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 6179;
                    this.match(MySqlParser.COMMA);
                    this.state = 6180;
                    (localContext as SetNewValueInsideTriggerContext)._system_var_name = this.fullId();
                    this.state = 6181;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 841 || _la === 857)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 6182;
                    this.expression(0);
                    }
                    }
                    this.state = 6188;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public showStatement(): ShowStatementContext {
        let localContext = new ShowStatementContext(this.context, this.state);
        this.enterRule(localContext, 552, MySqlParser.RULE_showStatement);
        let _la: number;
        try {
            this.state = 6375;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 913, this.context) ) {
            case 1:
                localContext = new ShowMasterLogsContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6191;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6192;
                (localContext as ShowMasterLogsContext)._logFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 228 || _la === 453)) {
                    (localContext as ShowMasterLogsContext)._logFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6193;
                this.match(MySqlParser.KW_LOGS);
                }
                break;
            case 2:
                localContext = new ShowLogEventsContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6194;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6195;
                (localContext as ShowLogEventsContext)._logFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 318 || _la === 559)) {
                    (localContext as ShowLogEventsContext)._logFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6196;
                this.match(MySqlParser.KW_EVENTS);
                this.state = 6199;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 80) {
                    {
                    this.state = 6197;
                    this.match(MySqlParser.KW_IN);
                    this.state = 6198;
                    (localContext as ShowLogEventsContext)._filename = this.match(MySqlParser.STRING_LITERAL);
                    }
                }

                this.state = 6203;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 68) {
                    {
                    this.state = 6201;
                    this.match(MySqlParser.KW_FROM);
                    this.state = 6202;
                    (localContext as ShowLogEventsContext)._fromPosition = this.decimalLiteral();
                    }
                }

                this.state = 6212;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 6205;
                    this.match(MySqlParser.KW_LIMIT);
                    this.state = 6209;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 887, this.context) ) {
                    case 1:
                        {
                        this.state = 6206;
                        (localContext as ShowLogEventsContext)._offset = this.decimalLiteral();
                        this.state = 6207;
                        this.match(MySqlParser.COMMA);
                        }
                        break;
                    }
                    this.state = 6211;
                    (localContext as ShowLogEventsContext)._rowCount = this.decimalLiteral();
                    }
                }

                this.state = 6215;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 65) {
                    {
                    this.state = 6214;
                    this.channelOption();
                    }
                }

                }
                break;
            case 3:
                localContext = new ShowObjectFilterContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6217;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6218;
                this.showCommonEntity();
                this.state = 6220;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 99 || _la === 192) {
                    {
                    this.state = 6219;
                    this.showFilter();
                    }
                }

                }
                break;
            case 4:
                localContext = new ShowColumnsContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6222;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6224;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 392) {
                    {
                    this.state = 6223;
                    this.match(MySqlParser.KW_EXTENDED);
                    }
                }

                this.state = 6227;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 408) {
                    {
                    this.state = 6226;
                    this.match(MySqlParser.KW_FULL);
                    }
                }

                this.state = 6229;
                (localContext as ShowColumnsContext)._columnsFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 337 || _la === 398)) {
                    (localContext as ShowColumnsContext)._columnsFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6230;
                (localContext as ShowColumnsContext)._tableFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 68 || _la === 80)) {
                    (localContext as ShowColumnsContext)._tableFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6231;
                this.tableName();
                this.state = 6234;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 68 || _la === 80) {
                    {
                    this.state = 6232;
                    (localContext as ShowColumnsContext)._schemaFormat = this.tokenStream.LT(1);
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 68 || _la === 80)) {
                        (localContext as ShowColumnsContext)._schemaFormat = this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 6233;
                    this.databaseName();
                    }
                }

                this.state = 6237;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 99 || _la === 192) {
                    {
                    this.state = 6236;
                    this.showFilter();
                    }
                }

                }
                break;
            case 5:
                localContext = new ShowCreateDbContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 6239;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6240;
                this.match(MySqlParser.KW_CREATE);
                this.state = 6241;
                _la = this.tokenStream.LA(1);
                if(!(_la === 39 || _la === 152)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6243;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 895, this.context) ) {
                case 1:
                    {
                    this.state = 6242;
                    this.ifNotExists();
                    }
                    break;
                }
                this.state = 6245;
                this.databaseName();
                }
                break;
            case 6:
                localContext = new ShowCreateFullIdObjectContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 6246;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6247;
                this.match(MySqlParser.KW_CREATE);
                this.state = 6248;
                _la = this.tokenStream.LA(1);
                if(!(_la === 132 || _la === 178 || _la === 385)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6249;
                this.fullId();
                }
                break;
            case 7:
                localContext = new ShowCreateFunctionContext(localContext);
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 6250;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6251;
                this.match(MySqlParser.KW_CREATE);
                this.state = 6252;
                this.match(MySqlParser.KW_FUNCTION);
                this.state = 6253;
                this.functionName();
                }
                break;
            case 8:
                localContext = new ShowCreateViewContext(localContext);
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 6254;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6255;
                this.match(MySqlParser.KW_CREATE);
                this.state = 6256;
                this.match(MySqlParser.KW_VIEW);
                this.state = 6257;
                this.viewName();
                }
                break;
            case 9:
                localContext = new ShowCreateTableContext(localContext);
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 6258;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6259;
                this.match(MySqlParser.KW_CREATE);
                this.state = 6260;
                this.match(MySqlParser.KW_TABLE);
                this.state = 6261;
                this.tableName();
                }
                break;
            case 10:
                localContext = new ShowCreateUserContext(localContext);
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 6262;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6263;
                this.match(MySqlParser.KW_CREATE);
                this.state = 6264;
                this.match(MySqlParser.KW_USER);
                this.state = 6265;
                this.userName();
                }
                break;
            case 11:
                localContext = new ShowEngineContext(localContext);
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 6266;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6267;
                this.match(MySqlParser.KW_ENGINE);
                this.state = 6268;
                this.engineName();
                this.state = 6269;
                (localContext as ShowEngineContext)._engineOption = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 493 || _la === 645)) {
                    (localContext as ShowEngineContext)._engineOption = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 12:
                localContext = new ShowGlobalInfoContext(localContext);
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 6271;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6272;
                this.showGlobalInfoClause();
                }
                break;
            case 13:
                localContext = new ShowErrorsContext(localContext);
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 6273;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6274;
                (localContext as ShowErrorsContext)._errorFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 383 || _la === 688)) {
                    (localContext as ShowErrorsContext)._errorFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6282;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 6275;
                    this.match(MySqlParser.KW_LIMIT);
                    this.state = 6279;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 896, this.context) ) {
                    case 1:
                        {
                        this.state = 6276;
                        (localContext as ShowErrorsContext)._offset = this.decimalLiteral();
                        this.state = 6277;
                        this.match(MySqlParser.COMMA);
                        }
                        break;
                    }
                    this.state = 6281;
                    (localContext as ShowErrorsContext)._rowCount = this.decimalLiteral();
                    }
                }

                }
                break;
            case 14:
                localContext = new ShowCountErrorsContext(localContext);
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 6284;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6285;
                this.match(MySqlParser.KW_COUNT);
                this.state = 6286;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 6287;
                this.match(MySqlParser.STAR);
                this.state = 6288;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 6289;
                (localContext as ShowCountErrorsContext)._errorFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 383 || _la === 688)) {
                    (localContext as ShowCountErrorsContext)._errorFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 15:
                localContext = new ShowSchemaFilterContext(localContext);
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 6290;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6291;
                this.showSchemaEntity();
                this.state = 6294;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 68 || _la === 80) {
                    {
                    this.state = 6292;
                    (localContext as ShowSchemaFilterContext)._schemaFormat = this.tokenStream.LT(1);
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 68 || _la === 80)) {
                        (localContext as ShowSchemaFilterContext)._schemaFormat = this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 6293;
                    this.databaseName();
                    }
                }

                this.state = 6297;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 99 || _la === 192) {
                    {
                    this.state = 6296;
                    this.showFilter();
                    }
                }

                }
                break;
            case 16:
                localContext = new ShowPercedureCodeContext(localContext);
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 6299;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6300;
                this.match(MySqlParser.KW_PROCEDURE);
                this.state = 6301;
                this.match(MySqlParser.KW_CODE);
                this.state = 6302;
                (localContext as ShowPercedureCodeContext)._proc_name = this.fullId();
                }
                break;
            case 17:
                localContext = new ShowFunctionCodeContext(localContext);
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 6303;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6304;
                this.match(MySqlParser.KW_FUNCTION);
                this.state = 6305;
                this.match(MySqlParser.KW_CODE);
                this.state = 6306;
                this.functionName();
                }
                break;
            case 18:
                localContext = new ShowGrantsContext(localContext);
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 6307;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6308;
                this.match(MySqlParser.KW_GRANTS);
                this.state = 6315;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 65) {
                    {
                    this.state = 6309;
                    this.match(MySqlParser.KW_FOR);
                    this.state = 6310;
                    this.userOrRoleName();
                    this.state = 6313;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 188) {
                        {
                        this.state = 6311;
                        this.match(MySqlParser.KW_USING);
                        this.state = 6312;
                        this.userOrRoleNames();
                        }
                    }

                    }
                }

                }
                break;
            case 19:
                localContext = new ShowIndexesContext(localContext);
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 6317;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6319;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 392) {
                    {
                    this.state = 6318;
                    this.match(MySqlParser.KW_EXTENDED);
                    }
                }

                this.state = 6321;
                (localContext as ShowIndexesContext)._indexFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 82 || _la === 93 || _la === 426)) {
                    (localContext as ShowIndexesContext)._indexFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6322;
                (localContext as ShowIndexesContext)._tableFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 68 || _la === 80)) {
                    (localContext as ShowIndexesContext)._tableFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6323;
                this.tableName();
                this.state = 6326;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 68 || _la === 80) {
                    {
                    this.state = 6324;
                    (localContext as ShowIndexesContext)._schemaFormat = this.tokenStream.LT(1);
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 68 || _la === 80)) {
                        (localContext as ShowIndexesContext)._schemaFormat = this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 6325;
                    this.databaseName();
                    }
                }

                this.state = 6330;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 192) {
                    {
                    this.state = 6328;
                    this.match(MySqlParser.KW_WHERE);
                    this.state = 6329;
                    this.expression(0);
                    }
                }

                }
                break;
            case 20:
                localContext = new ShowOpenTablesContext(localContext);
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 6332;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6333;
                this.match(MySqlParser.KW_OPEN);
                this.state = 6334;
                this.match(MySqlParser.KW_TABLES);
                this.state = 6337;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 68 || _la === 80) {
                    {
                    this.state = 6335;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 68 || _la === 80)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 6336;
                    this.databaseName();
                    }
                }

                this.state = 6340;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 99 || _la === 192) {
                    {
                    this.state = 6339;
                    this.showFilter();
                    }
                }

                }
                break;
            case 21:
                localContext = new ShowProfileContext(localContext);
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 6342;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6343;
                this.match(MySqlParser.KW_PROFILE);
                this.state = 6352;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 7 || _la === 320 || _la === 355 || _la === 358 || _la === 439 || _la === 521 || _la === 605 || _la === 655 || _la === 802) {
                    {
                    this.state = 6344;
                    this.showProfileType();
                    this.state = 6349;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 868) {
                        {
                        {
                        this.state = 6345;
                        this.match(MySqlParser.COMMA);
                        this.state = 6346;
                        this.showProfileType();
                        }
                        }
                        this.state = 6351;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    }
                }

                this.state = 6357;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 65) {
                    {
                    this.state = 6354;
                    this.match(MySqlParser.KW_FOR);
                    this.state = 6355;
                    this.match(MySqlParser.KW_QUERY);
                    this.state = 6356;
                    (localContext as ShowProfileContext)._queryCount = this.decimalLiteral();
                    }
                }

                this.state = 6365;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 100) {
                    {
                    this.state = 6359;
                    this.match(MySqlParser.KW_LIMIT);
                    this.state = 6360;
                    (localContext as ShowProfileContext)._rowCount = this.decimalLiteral();
                    this.state = 6363;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 509) {
                        {
                        this.state = 6361;
                        this.match(MySqlParser.KW_OFFSET);
                        this.state = 6362;
                        (localContext as ShowProfileContext)._offset = this.decimalLiteral();
                        }
                    }

                    }
                }

                }
                break;
            case 22:
                localContext = new ShowSlaveStatusContext(localContext);
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 6367;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6368;
                _la = this.tokenStream.LA(1);
                if(!(_la === 563 || _la === 598)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6369;
                this.match(MySqlParser.KW_STATUS);
                this.state = 6371;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 65) {
                    {
                    this.state = 6370;
                    this.channelOption();
                    }
                }

                }
                break;
            case 23:
                localContext = new ShowReplicasContext(localContext);
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 6373;
                this.match(MySqlParser.KW_SHOW);
                this.state = 6374;
                this.match(MySqlParser.KW_REPLICAS);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public variableClause(): VariableClauseContext {
        let localContext = new VariableClauseContext(this.context, this.state);
        this.enterRule(localContext, 554, MySqlParser.RULE_variableClause);
        let _la: number;
        try {
            this.state = 6387;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.LOCAL_ID:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6377;
                this.match(MySqlParser.LOCAL_ID);
                }
                break;
            case MySqlParser.GLOBAL_ID:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6378;
                this.match(MySqlParser.GLOBAL_ID);
                }
                break;
            case MySqlParser.KW_ARRAY:
            case MySqlParser.KW_ATTRIBUTE:
            case MySqlParser.KW_BUCKETS:
            case MySqlParser.KW_CONDITION:
            case MySqlParser.KW_CURRENT:
            case MySqlParser.KW_CURRENT_USER:
            case MySqlParser.KW_DATABASE:
            case MySqlParser.KW_DEFAULT:
            case MySqlParser.KW_DIAGNOSTICS:
            case MySqlParser.KW_EMPTY:
            case MySqlParser.KW_ENFORCED:
            case MySqlParser.KW_EXCEPT:
            case MySqlParser.KW_GROUP:
            case MySqlParser.KW_IF:
            case MySqlParser.KW_INSERT:
            case MySqlParser.KW_LATERAL:
            case MySqlParser.KW_LEFT:
            case MySqlParser.KW_NUMBER:
            case MySqlParser.KW_OPTIONAL:
            case MySqlParser.KW_ORDER:
            case MySqlParser.KW_PRIMARY:
            case MySqlParser.KW_REPEAT:
            case MySqlParser.KW_REPLACE:
            case MySqlParser.KW_RIGHT:
            case MySqlParser.KW_SCHEMA:
            case MySqlParser.KW_SKIP_QUERY_REWRITE:
            case MySqlParser.KW_STACKED:
            case MySqlParser.KW_DATE:
            case MySqlParser.KW_TIME:
            case MySqlParser.KW_TIMESTAMP:
            case MySqlParser.KW_DATETIME:
            case MySqlParser.KW_YEAR:
            case MySqlParser.KW_BINARY:
            case MySqlParser.KW_TEXT:
            case MySqlParser.KW_ENUM:
            case MySqlParser.KW_SERIAL:
            case MySqlParser.KW_JSON_TABLE:
            case MySqlParser.KW_JSON_VALUE:
            case MySqlParser.KW_NESTED:
            case MySqlParser.KW_ORDINALITY:
            case MySqlParser.KW_PATH:
            case MySqlParser.KW_AVG:
            case MySqlParser.KW_BIT_AND:
            case MySqlParser.KW_BIT_OR:
            case MySqlParser.KW_BIT_XOR:
            case MySqlParser.KW_COUNT:
            case MySqlParser.KW_CUME_DIST:
            case MySqlParser.KW_DENSE_RANK:
            case MySqlParser.KW_FIRST_VALUE:
            case MySqlParser.KW_GROUP_CONCAT:
            case MySqlParser.KW_LAG:
            case MySqlParser.KW_LAST_VALUE:
            case MySqlParser.KW_LEAD:
            case MySqlParser.KW_MAX:
            case MySqlParser.KW_MIN:
            case MySqlParser.KW_NTILE:
            case MySqlParser.KW_NTH_VALUE:
            case MySqlParser.KW_PERCENT_RANK:
            case MySqlParser.KW_RANK:
            case MySqlParser.KW_ROW_NUMBER:
            case MySqlParser.KW_STD:
            case MySqlParser.KW_STDDEV:
            case MySqlParser.KW_STDDEV_POP:
            case MySqlParser.KW_STDDEV_SAMP:
            case MySqlParser.KW_SUM:
            case MySqlParser.KW_VAR_POP:
            case MySqlParser.KW_VAR_SAMP:
            case MySqlParser.KW_VARIANCE:
            case MySqlParser.KW_CURRENT_DATE:
            case MySqlParser.KW_CURRENT_TIME:
            case MySqlParser.KW_CURRENT_TIMESTAMP:
            case MySqlParser.KW_LOCALTIME:
            case MySqlParser.KW_CURDATE:
            case MySqlParser.KW_CURTIME:
            case MySqlParser.KW_DATE_ADD:
            case MySqlParser.KW_DATE_SUB:
            case MySqlParser.KW_LOCALTIMESTAMP:
            case MySqlParser.KW_NOW:
            case MySqlParser.KW_POSITION:
            case MySqlParser.KW_SUBSTR:
            case MySqlParser.KW_SUBSTRING:
            case MySqlParser.KW_SYSDATE:
            case MySqlParser.KW_TRIM:
            case MySqlParser.KW_UTC_DATE:
            case MySqlParser.KW_UTC_TIME:
            case MySqlParser.KW_UTC_TIMESTAMP:
            case MySqlParser.KW_ACCOUNT:
            case MySqlParser.KW_ACTION:
            case MySqlParser.KW_AFTER:
            case MySqlParser.KW_AGGREGATE:
            case MySqlParser.KW_ALGORITHM:
            case MySqlParser.KW_ANY:
            case MySqlParser.KW_AT:
            case MySqlParser.KW_AUTHORS:
            case MySqlParser.KW_AUTOCOMMIT:
            case MySqlParser.KW_AUTOEXTEND_SIZE:
            case MySqlParser.KW_AUTO_INCREMENT:
            case MySqlParser.KW_AVG_ROW_LENGTH:
            case MySqlParser.KW_BEGIN:
            case MySqlParser.KW_BINLOG:
            case MySqlParser.KW_BIT:
            case MySqlParser.KW_BLOCK:
            case MySqlParser.KW_BOOL:
            case MySqlParser.KW_BOOLEAN:
            case MySqlParser.KW_BTREE:
            case MySqlParser.KW_CACHE:
            case MySqlParser.KW_CASCADED:
            case MySqlParser.KW_CHAIN:
            case MySqlParser.KW_CHANGED:
            case MySqlParser.KW_CHANNEL:
            case MySqlParser.KW_CHECKSUM:
            case MySqlParser.KW_CIPHER:
            case MySqlParser.KW_CLASS_ORIGIN:
            case MySqlParser.KW_CLIENT:
            case MySqlParser.KW_CLOSE:
            case MySqlParser.KW_COALESCE:
            case MySqlParser.KW_CODE:
            case MySqlParser.KW_COLUMNS:
            case MySqlParser.KW_COLUMN_FORMAT:
            case MySqlParser.KW_COLUMN_NAME:
            case MySqlParser.KW_COMMENT:
            case MySqlParser.KW_COMMIT:
            case MySqlParser.KW_COMPACT:
            case MySqlParser.KW_COMPLETION:
            case MySqlParser.KW_COMPRESSED:
            case MySqlParser.KW_COMPRESSION:
            case MySqlParser.KW_CONCURRENT:
            case MySqlParser.KW_CONNECT:
            case MySqlParser.KW_CONNECTION:
            case MySqlParser.KW_CONSISTENT:
            case MySqlParser.KW_CONSTRAINT_CATALOG:
            case MySqlParser.KW_CONSTRAINT_SCHEMA:
            case MySqlParser.KW_CONSTRAINT_NAME:
            case MySqlParser.KW_CONTAINS:
            case MySqlParser.KW_CONTEXT:
            case MySqlParser.KW_CONTRIBUTORS:
            case MySqlParser.KW_COPY:
            case MySqlParser.KW_CPU:
            case MySqlParser.KW_CURSOR_NAME:
            case MySqlParser.KW_DATA:
            case MySqlParser.KW_DATAFILE:
            case MySqlParser.KW_DEALLOCATE:
            case MySqlParser.KW_DEFAULT_AUTH:
            case MySqlParser.KW_DEFINER:
            case MySqlParser.KW_DELAY_KEY_WRITE:
            case MySqlParser.KW_DES_KEY_FILE:
            case MySqlParser.KW_DIRECTORY:
            case MySqlParser.KW_DISABLE:
            case MySqlParser.KW_DISCARD:
            case MySqlParser.KW_DISK:
            case MySqlParser.KW_DO:
            case MySqlParser.KW_DUMPFILE:
            case MySqlParser.KW_DUPLICATE:
            case MySqlParser.KW_DYNAMIC:
            case MySqlParser.KW_ENABLE:
            case MySqlParser.KW_ENCRYPTION:
            case MySqlParser.KW_END:
            case MySqlParser.KW_ENDS:
            case MySqlParser.KW_ENGINE:
            case MySqlParser.KW_ENGINES:
            case MySqlParser.KW_ERROR:
            case MySqlParser.KW_ERRORS:
            case MySqlParser.KW_ESCAPE:
            case MySqlParser.KW_EVENT:
            case MySqlParser.KW_EVENTS:
            case MySqlParser.KW_EVERY:
            case MySqlParser.KW_EXCHANGE:
            case MySqlParser.KW_EXCLUSIVE:
            case MySqlParser.KW_EXPIRE:
            case MySqlParser.KW_EXPORT:
            case MySqlParser.KW_EXTENDED:
            case MySqlParser.KW_EXTENT_SIZE:
            case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
            case MySqlParser.KW_FAST:
            case MySqlParser.KW_FAULTS:
            case MySqlParser.KW_FIELDS:
            case MySqlParser.KW_FILE_BLOCK_SIZE:
            case MySqlParser.KW_FILTER:
            case MySqlParser.KW_FIRST:
            case MySqlParser.KW_FIXED:
            case MySqlParser.KW_FLUSH:
            case MySqlParser.KW_FOLLOWS:
            case MySqlParser.KW_FOUND:
            case MySqlParser.KW_FULL:
            case MySqlParser.KW_FUNCTION:
            case MySqlParser.KW_GENERAL:
            case MySqlParser.KW_GLOBAL:
            case MySqlParser.KW_GRANTS:
            case MySqlParser.KW_GROUP_REPLICATION:
            case MySqlParser.KW_HANDLER:
            case MySqlParser.KW_HASH:
            case MySqlParser.KW_HELP:
            case MySqlParser.KW_HISTORY:
            case MySqlParser.KW_HOST:
            case MySqlParser.KW_HOSTS:
            case MySqlParser.KW_IDENTIFIED:
            case MySqlParser.KW_IGNORE_SERVER_IDS:
            case MySqlParser.KW_IMPORT:
            case MySqlParser.KW_INDEXES:
            case MySqlParser.KW_INITIAL_SIZE:
            case MySqlParser.KW_INPLACE:
            case MySqlParser.KW_INSERT_METHOD:
            case MySqlParser.KW_INSTALL:
            case MySqlParser.KW_INSTANCE:
            case MySqlParser.KW_INSTANT:
            case MySqlParser.KW_INVISIBLE:
            case MySqlParser.KW_INVOKER:
            case MySqlParser.KW_IO:
            case MySqlParser.KW_IO_THREAD:
            case MySqlParser.KW_IPC:
            case MySqlParser.KW_ISOLATION:
            case MySqlParser.KW_ISSUER:
            case MySqlParser.KW_JSON:
            case MySqlParser.KW_KEY_BLOCK_SIZE:
            case MySqlParser.KW_LANGUAGE:
            case MySqlParser.KW_LAST:
            case MySqlParser.KW_LEAVES:
            case MySqlParser.KW_LESS:
            case MySqlParser.KW_LEVEL:
            case MySqlParser.KW_LIST:
            case MySqlParser.KW_LOCAL:
            case MySqlParser.KW_LOGFILE:
            case MySqlParser.KW_LOGS:
            case MySqlParser.KW_MASTER:
            case MySqlParser.KW_MASTER_AUTO_POSITION:
            case MySqlParser.KW_MASTER_CONNECT_RETRY:
            case MySqlParser.KW_MASTER_DELAY:
            case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
            case MySqlParser.KW_MASTER_HOST:
            case MySqlParser.KW_MASTER_LOG_FILE:
            case MySqlParser.KW_MASTER_LOG_POS:
            case MySqlParser.KW_MASTER_PASSWORD:
            case MySqlParser.KW_MASTER_PORT:
            case MySqlParser.KW_MASTER_RETRY_COUNT:
            case MySqlParser.KW_MASTER_SSL:
            case MySqlParser.KW_MASTER_SSL_CA:
            case MySqlParser.KW_MASTER_SSL_CAPATH:
            case MySqlParser.KW_MASTER_SSL_CERT:
            case MySqlParser.KW_MASTER_SSL_CIPHER:
            case MySqlParser.KW_MASTER_SSL_CRL:
            case MySqlParser.KW_MASTER_SSL_CRLPATH:
            case MySqlParser.KW_MASTER_SSL_KEY:
            case MySqlParser.KW_MASTER_TLS_VERSION:
            case MySqlParser.KW_MASTER_USER:
            case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
            case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
            case MySqlParser.KW_MAX_ROWS:
            case MySqlParser.KW_MAX_SIZE:
            case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
            case MySqlParser.KW_MAX_USER_CONNECTIONS:
            case MySqlParser.KW_MEDIUM:
            case MySqlParser.KW_MEMBER:
            case MySqlParser.KW_MERGE:
            case MySqlParser.KW_MESSAGE_TEXT:
            case MySqlParser.KW_MID:
            case MySqlParser.KW_MIGRATE:
            case MySqlParser.KW_MIN_ROWS:
            case MySqlParser.KW_MODE:
            case MySqlParser.KW_MODIFY:
            case MySqlParser.KW_MUTEX:
            case MySqlParser.KW_MYSQL:
            case MySqlParser.KW_MYSQL_ERRNO:
            case MySqlParser.KW_NAME:
            case MySqlParser.KW_NAMES:
            case MySqlParser.KW_NCHAR:
            case MySqlParser.KW_NEVER:
            case MySqlParser.KW_NEXT:
            case MySqlParser.KW_NO:
            case MySqlParser.KW_NOWAIT:
            case MySqlParser.KW_NODEGROUP:
            case MySqlParser.KW_NONE:
            case MySqlParser.KW_ODBC:
            case MySqlParser.KW_OFFLINE:
            case MySqlParser.KW_OFFSET:
            case MySqlParser.KW_OF:
            case MySqlParser.KW_OLD_PASSWORD:
            case MySqlParser.KW_ONE:
            case MySqlParser.KW_ONLINE:
            case MySqlParser.KW_ONLY:
            case MySqlParser.KW_OPEN:
            case MySqlParser.KW_OPTIMIZER_COSTS:
            case MySqlParser.KW_OPTIONS:
            case MySqlParser.KW_OWNER:
            case MySqlParser.KW_PACK_KEYS:
            case MySqlParser.KW_PAGE:
            case MySqlParser.KW_PAGE_CHECKSUM:
            case MySqlParser.KW_PARSER:
            case MySqlParser.KW_PARTIAL:
            case MySqlParser.KW_PARTITIONING:
            case MySqlParser.KW_PARTITIONS:
            case MySqlParser.KW_PASSWORD:
            case MySqlParser.KW_PASSWORD_LOCK_TIME:
            case MySqlParser.KW_PERSIST:
            case MySqlParser.KW_PERSIST_ONLY:
            case MySqlParser.KW_PHASE:
            case MySqlParser.KW_PLUGIN:
            case MySqlParser.KW_PLUGIN_DIR:
            case MySqlParser.KW_PLUGINS:
            case MySqlParser.KW_PORT:
            case MySqlParser.KW_PRECEDES:
            case MySqlParser.KW_PREPARE:
            case MySqlParser.KW_PRESERVE:
            case MySqlParser.KW_PREV:
            case MySqlParser.KW_PROCESSLIST:
            case MySqlParser.KW_PROFILE:
            case MySqlParser.KW_PROFILES:
            case MySqlParser.KW_PROXY:
            case MySqlParser.KW_QUERY:
            case MySqlParser.KW_QUICK:
            case MySqlParser.KW_REBUILD:
            case MySqlParser.KW_RECOVER:
            case MySqlParser.KW_RECURSIVE:
            case MySqlParser.KW_REDO_BUFFER_SIZE:
            case MySqlParser.KW_REDUNDANT:
            case MySqlParser.KW_RELAY:
            case MySqlParser.KW_RELAY_LOG_FILE:
            case MySqlParser.KW_RELAY_LOG_POS:
            case MySqlParser.KW_RELAYLOG:
            case MySqlParser.KW_REMOVE:
            case MySqlParser.KW_REORGANIZE:
            case MySqlParser.KW_REPAIR:
            case MySqlParser.KW_REPLICATE_DO_DB:
            case MySqlParser.KW_REPLICATE_DO_TABLE:
            case MySqlParser.KW_REPLICATE_IGNORE_DB:
            case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATE_REWRITE_DB:
            case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
            case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATION:
            case MySqlParser.KW_RESET:
            case MySqlParser.KW_RESUME:
            case MySqlParser.KW_RETURNED_SQLSTATE:
            case MySqlParser.KW_RETURNS:
            case MySqlParser.KW_REUSE:
            case MySqlParser.KW_ROLE:
            case MySqlParser.KW_ROLLBACK:
            case MySqlParser.KW_ROLLUP:
            case MySqlParser.KW_ROTATE:
            case MySqlParser.KW_ROW:
            case MySqlParser.KW_ROWS:
            case MySqlParser.KW_ROW_FORMAT:
            case MySqlParser.KW_SAVEPOINT:
            case MySqlParser.KW_SCHEDULE:
            case MySqlParser.KW_SECURITY:
            case MySqlParser.KW_SERVER:
            case MySqlParser.KW_SESSION:
            case MySqlParser.KW_SHARE:
            case MySqlParser.KW_SHARED:
            case MySqlParser.KW_SIGNED:
            case MySqlParser.KW_SIMPLE:
            case MySqlParser.KW_SLAVE:
            case MySqlParser.KW_SLOW:
            case MySqlParser.KW_SNAPSHOT:
            case MySqlParser.KW_SOCKET:
            case MySqlParser.KW_SOME:
            case MySqlParser.KW_SONAME:
            case MySqlParser.KW_SOUNDS:
            case MySqlParser.KW_SOURCE:
            case MySqlParser.KW_SQL_AFTER_GTIDS:
            case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
            case MySqlParser.KW_SQL_BEFORE_GTIDS:
            case MySqlParser.KW_SQL_BUFFER_RESULT:
            case MySqlParser.KW_SQL_CACHE:
            case MySqlParser.KW_SQL_NO_CACHE:
            case MySqlParser.KW_SQL_THREAD:
            case MySqlParser.KW_START:
            case MySqlParser.KW_STARTS:
            case MySqlParser.KW_STATS_AUTO_RECALC:
            case MySqlParser.KW_STATS_PERSISTENT:
            case MySqlParser.KW_STATS_SAMPLE_PAGES:
            case MySqlParser.KW_STATUS:
            case MySqlParser.KW_STOP:
            case MySqlParser.KW_STORAGE:
            case MySqlParser.KW_STRING:
            case MySqlParser.KW_SUBCLASS_ORIGIN:
            case MySqlParser.KW_SUBJECT:
            case MySqlParser.KW_SUBPARTITION:
            case MySqlParser.KW_SUBPARTITIONS:
            case MySqlParser.KW_SUSPEND:
            case MySqlParser.KW_SWAPS:
            case MySqlParser.KW_SWITCHES:
            case MySqlParser.KW_TABLE_NAME:
            case MySqlParser.KW_TABLESPACE:
            case MySqlParser.KW_TABLE_TYPE:
            case MySqlParser.KW_TEMPORARY:
            case MySqlParser.KW_TEMPTABLE:
            case MySqlParser.KW_THAN:
            case MySqlParser.KW_TRADITIONAL:
            case MySqlParser.KW_TRANSACTION:
            case MySqlParser.KW_TRANSACTIONAL:
            case MySqlParser.KW_TRIGGERS:
            case MySqlParser.KW_TRUNCATE:
            case MySqlParser.KW_UNBOUNDED:
            case MySqlParser.KW_UNDEFINED:
            case MySqlParser.KW_UNDOFILE:
            case MySqlParser.KW_UNDO_BUFFER_SIZE:
            case MySqlParser.KW_UNINSTALL:
            case MySqlParser.KW_UNKNOWN:
            case MySqlParser.KW_UNTIL:
            case MySqlParser.KW_UPGRADE:
            case MySqlParser.KW_USER:
            case MySqlParser.KW_USE_FRM:
            case MySqlParser.KW_USER_RESOURCES:
            case MySqlParser.KW_VALIDATION:
            case MySqlParser.KW_VALUE:
            case MySqlParser.KW_VARIABLES:
            case MySqlParser.KW_VIEW:
            case MySqlParser.KW_VIRTUAL:
            case MySqlParser.KW_VISIBLE:
            case MySqlParser.KW_WAIT:
            case MySqlParser.KW_WARNINGS:
            case MySqlParser.KW_WITHOUT:
            case MySqlParser.KW_WORK:
            case MySqlParser.KW_WRAPPER:
            case MySqlParser.KW_X509:
            case MySqlParser.KW_XA:
            case MySqlParser.KW_XML:
            case MySqlParser.KW_QUARTER:
            case MySqlParser.KW_MONTH:
            case MySqlParser.KW_DAY:
            case MySqlParser.KW_HOUR:
            case MySqlParser.KW_MINUTE:
            case MySqlParser.KW_WEEK:
            case MySqlParser.KW_SECOND:
            case MySqlParser.KW_MICROSECOND:
            case MySqlParser.KW_ADMIN:
            case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
            case MySqlParser.KW_AUDIT_ADMIN:
            case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
            case MySqlParser.KW_BACKUP_ADMIN:
            case MySqlParser.KW_BINLOG_ADMIN:
            case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
            case MySqlParser.KW_CLONE_ADMIN:
            case MySqlParser.KW_CONNECTION_ADMIN:
            case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
            case MySqlParser.KW_EXECUTE:
            case MySqlParser.KW_FILE:
            case MySqlParser.KW_FIREWALL_ADMIN:
            case MySqlParser.KW_FIREWALL_EXEMPT:
            case MySqlParser.KW_FIREWALL_USER:
            case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
            case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
            case MySqlParser.KW_INVOKE:
            case MySqlParser.KW_LAMBDA:
            case MySqlParser.KW_NDB_STORED_USER:
            case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
            case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
            case MySqlParser.KW_PRIVILEGES:
            case MySqlParser.KW_PROCESS:
            case MySqlParser.KW_RELOAD:
            case MySqlParser.KW_REPLICATION_APPLIER:
            case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_USER:
            case MySqlParser.KW_ROLE_ADMIN:
            case MySqlParser.KW_ROUTINE:
            case MySqlParser.KW_S3:
            case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
            case MySqlParser.KW_SET_USER_ID:
            case MySqlParser.KW_SHOW_ROUTINE:
            case MySqlParser.KW_SHUTDOWN:
            case MySqlParser.KW_SUPER:
            case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
            case MySqlParser.KW_TABLES:
            case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
            case MySqlParser.KW_VERSION_TOKEN_ADMIN:
            case MySqlParser.KW_XA_RECOVER_ADMIN:
            case MySqlParser.KW_ARMSCII8:
            case MySqlParser.KW_ASCII:
            case MySqlParser.KW_BIG5:
            case MySqlParser.KW_CP1250:
            case MySqlParser.KW_CP1251:
            case MySqlParser.KW_CP1256:
            case MySqlParser.KW_CP1257:
            case MySqlParser.KW_CP850:
            case MySqlParser.KW_CP852:
            case MySqlParser.KW_CP866:
            case MySqlParser.KW_CP932:
            case MySqlParser.KW_DEC8:
            case MySqlParser.KW_EUCJPMS:
            case MySqlParser.KW_EUCKR:
            case MySqlParser.KW_GB18030:
            case MySqlParser.KW_GB2312:
            case MySqlParser.KW_GBK:
            case MySqlParser.KW_GEOSTD8:
            case MySqlParser.KW_GREEK:
            case MySqlParser.KW_HEBREW:
            case MySqlParser.KW_HP8:
            case MySqlParser.KW_KEYBCS2:
            case MySqlParser.KW_KOI8R:
            case MySqlParser.KW_KOI8U:
            case MySqlParser.KW_LATIN1:
            case MySqlParser.KW_LATIN2:
            case MySqlParser.KW_LATIN5:
            case MySqlParser.KW_LATIN7:
            case MySqlParser.KW_MACCE:
            case MySqlParser.KW_MACROMAN:
            case MySqlParser.KW_SJIS:
            case MySqlParser.KW_SWE7:
            case MySqlParser.KW_TIS620:
            case MySqlParser.KW_UCS2:
            case MySqlParser.KW_UJIS:
            case MySqlParser.KW_UTF16:
            case MySqlParser.KW_UTF16LE:
            case MySqlParser.KW_UTF32:
            case MySqlParser.KW_UTF8:
            case MySqlParser.KW_UTF8MB3:
            case MySqlParser.KW_UTF8MB4:
            case MySqlParser.KW_ARCHIVE:
            case MySqlParser.KW_BLACKHOLE:
            case MySqlParser.KW_CSV:
            case MySqlParser.KW_FEDERATED:
            case MySqlParser.KW_INNODB:
            case MySqlParser.KW_MEMORY:
            case MySqlParser.KW_MRG_MYISAM:
            case MySqlParser.KW_MYISAM:
            case MySqlParser.KW_NDB:
            case MySqlParser.KW_NDBCLUSTER:
            case MySqlParser.KW_PERFORMANCE_SCHEMA:
            case MySqlParser.KW_TOKUDB:
            case MySqlParser.KW_REPEATABLE:
            case MySqlParser.KW_COMMITTED:
            case MySqlParser.KW_UNCOMMITTED:
            case MySqlParser.KW_SERIALIZABLE:
            case MySqlParser.KW_GEOMETRYCOLLECTION:
            case MySqlParser.KW_LINESTRING:
            case MySqlParser.KW_MULTILINESTRING:
            case MySqlParser.KW_MULTIPOINT:
            case MySqlParser.KW_MULTIPOLYGON:
            case MySqlParser.KW_POINT:
            case MySqlParser.KW_POLYGON:
            case MySqlParser.KW_CATALOG_NAME:
            case MySqlParser.KW_CHARSET:
            case MySqlParser.KW_COLLATION:
            case MySqlParser.KW_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_FORMAT:
            case MySqlParser.KW_GET_FORMAT:
            case MySqlParser.KW_RANDOM:
            case MySqlParser.KW_REVERSE:
            case MySqlParser.KW_ROW_COUNT:
            case MySqlParser.KW_SCHEMA_NAME:
            case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_SRID:
            case MySqlParser.KW_SYSTEM_USER:
            case MySqlParser.KW_TP_CONNECTION_ADMIN:
            case MySqlParser.KW_WEIGHT_STRING:
            case MySqlParser.MOD:
            case MySqlParser.AT_SIGN:
            case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
            case MySqlParser.STRING_LITERAL:
            case MySqlParser.ID:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6384;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 915, this.context) ) {
                case 1:
                    {
                    this.state = 6381;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 870) {
                        {
                        this.state = 6379;
                        this.match(MySqlParser.AT_SIGN);
                        this.state = 6380;
                        this.match(MySqlParser.AT_SIGN);
                        }
                    }

                    this.state = 6383;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 413 || _la === 450 || _la === 531 || _la === 532 || _la === 593)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                    break;
                }
                this.state = 6386;
                localContext._target = this.uid();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public showCommonEntity(): ShowCommonEntityContext {
        let localContext = new ShowCommonEntityContext(this.context, this.state);
        this.enterRule(localContext, 556, MySqlParser.RULE_showCommonEntity);
        let _la: number;
        try {
            this.state = 6403;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_CHARACTER:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6389;
                this.match(MySqlParser.KW_CHARACTER);
                this.state = 6390;
                this.match(MySqlParser.KW_SET);
                }
                break;
            case MySqlParser.KW_CHARSET:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6391;
                this.match(MySqlParser.KW_CHARSET);
                }
                break;
            case MySqlParser.KW_COLLATION:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6392;
                this.match(MySqlParser.KW_COLLATION);
                }
                break;
            case MySqlParser.KW_DATABASES:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6393;
                this.match(MySqlParser.KW_DATABASES);
                }
                break;
            case MySqlParser.KW_SCHEMAS:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 6394;
                this.match(MySqlParser.KW_SCHEMAS);
                }
                break;
            case MySqlParser.KW_FUNCTION:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 6395;
                this.match(MySqlParser.KW_FUNCTION);
                this.state = 6396;
                this.match(MySqlParser.KW_STATUS);
                }
                break;
            case MySqlParser.KW_PROCEDURE:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 6397;
                this.match(MySqlParser.KW_PROCEDURE);
                this.state = 6398;
                this.match(MySqlParser.KW_STATUS);
                }
                break;
            case MySqlParser.KW_GLOBAL:
            case MySqlParser.KW_SESSION:
            case MySqlParser.KW_STATUS:
            case MySqlParser.KW_VARIABLES:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 6400;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 413 || _la === 593) {
                    {
                    this.state = 6399;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 413 || _la === 593)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 6402;
                _la = this.tokenStream.LA(1);
                if(!(_la === 645 || _la === 683)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public showFilter(): ShowFilterContext {
        let localContext = new ShowFilterContext(this.context, this.state);
        this.enterRule(localContext, 558, MySqlParser.RULE_showFilter);
        try {
            this.state = 6409;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_LIKE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6405;
                this.match(MySqlParser.KW_LIKE);
                this.state = 6406;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.KW_WHERE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6407;
                this.match(MySqlParser.KW_WHERE);
                this.state = 6408;
                this.expression(0);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public showGlobalInfoClause(): ShowGlobalInfoClauseContext {
        let localContext = new ShowGlobalInfoClauseContext(this.context, this.state);
        this.enterRule(localContext, 560, MySqlParser.RULE_showGlobalInfoClause);
        let _la: number;
        try {
            this.state = 6428;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_ENGINES:
            case MySqlParser.KW_STORAGE:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6412;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 647) {
                    {
                    this.state = 6411;
                    this.match(MySqlParser.KW_STORAGE);
                    }
                }

                this.state = 6414;
                this.match(MySqlParser.KW_ENGINES);
                }
                break;
            case MySqlParser.KW_MASTER:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6415;
                this.match(MySqlParser.KW_MASTER);
                this.state = 6416;
                this.match(MySqlParser.KW_STATUS);
                }
                break;
            case MySqlParser.KW_PLUGINS:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6417;
                this.match(MySqlParser.KW_PLUGINS);
                }
                break;
            case MySqlParser.KW_PRIVILEGES:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6418;
                this.match(MySqlParser.KW_PRIVILEGES);
                }
                break;
            case MySqlParser.KW_FULL:
            case MySqlParser.KW_PROCESSLIST:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 6420;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 408) {
                    {
                    this.state = 6419;
                    this.match(MySqlParser.KW_FULL);
                    }
                }

                this.state = 6422;
                this.match(MySqlParser.KW_PROCESSLIST);
                }
                break;
            case MySqlParser.KW_PROFILES:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 6423;
                this.match(MySqlParser.KW_PROFILES);
                }
                break;
            case MySqlParser.KW_SLAVE:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 6424;
                this.match(MySqlParser.KW_SLAVE);
                this.state = 6425;
                this.match(MySqlParser.KW_HOSTS);
                }
                break;
            case MySqlParser.KW_AUTHORS:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 6426;
                this.match(MySqlParser.KW_AUTHORS);
                }
                break;
            case MySqlParser.KW_CONTRIBUTORS:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 6427;
                this.match(MySqlParser.KW_CONTRIBUTORS);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public showSchemaEntity(): ShowSchemaEntityContext {
        let localContext = new ShowSchemaEntityContext(this.context, this.state);
        this.enterRule(localContext, 562, MySqlParser.RULE_showSchemaEntity);
        let _la: number;
        try {
            this.state = 6441;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_EVENTS:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6430;
                this.match(MySqlParser.KW_EVENTS);
                }
                break;
            case MySqlParser.KW_TABLE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6431;
                this.match(MySqlParser.KW_TABLE);
                this.state = 6432;
                this.match(MySqlParser.KW_STATUS);
                }
                break;
            case MySqlParser.KW_EXTENDED:
            case MySqlParser.KW_FULL:
            case MySqlParser.KW_TABLES:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6434;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 392) {
                    {
                    this.state = 6433;
                    this.match(MySqlParser.KW_EXTENDED);
                    }
                }

                this.state = 6437;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 408) {
                    {
                    this.state = 6436;
                    this.match(MySqlParser.KW_FULL);
                    }
                }

                this.state = 6439;
                this.match(MySqlParser.KW_TABLES);
                }
                break;
            case MySqlParser.KW_TRIGGERS:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6440;
                this.match(MySqlParser.KW_TRIGGERS);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public showProfileType(): ShowProfileTypeContext {
        let localContext = new ShowProfileTypeContext(this.context, this.state);
        this.enterRule(localContext, 564, MySqlParser.RULE_showProfileType);
        try {
            this.state = 6455;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_ALL:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6443;
                this.match(MySqlParser.KW_ALL);
                }
                break;
            case MySqlParser.KW_BLOCK:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6444;
                this.match(MySqlParser.KW_BLOCK);
                this.state = 6445;
                this.match(MySqlParser.KW_IO);
                }
                break;
            case MySqlParser.KW_CONTEXT:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6446;
                this.match(MySqlParser.KW_CONTEXT);
                this.state = 6447;
                this.match(MySqlParser.KW_SWITCHES);
                }
                break;
            case MySqlParser.KW_CPU:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6448;
                this.match(MySqlParser.KW_CPU);
                }
                break;
            case MySqlParser.KW_IPC:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 6449;
                this.match(MySqlParser.KW_IPC);
                }
                break;
            case MySqlParser.KW_MEMORY:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 6450;
                this.match(MySqlParser.KW_MEMORY);
                }
                break;
            case MySqlParser.KW_PAGE:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 6451;
                this.match(MySqlParser.KW_PAGE);
                this.state = 6452;
                this.match(MySqlParser.KW_FAULTS);
                }
                break;
            case MySqlParser.KW_SOURCE:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 6453;
                this.match(MySqlParser.KW_SOURCE);
                }
                break;
            case MySqlParser.KW_SWAPS:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 6454;
                this.match(MySqlParser.KW_SWAPS);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public binlogStatement(): BinlogStatementContext {
        let localContext = new BinlogStatementContext(this.context, this.state);
        this.enterRule(localContext, 566, MySqlParser.RULE_binlogStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6457;
            this.match(MySqlParser.KW_BINLOG);
            this.state = 6458;
            this.match(MySqlParser.STRING_LITERAL);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public cacheIndexStatement(): CacheIndexStatementContext {
        let localContext = new CacheIndexStatementContext(this.context, this.state);
        this.enterRule(localContext, 568, MySqlParser.RULE_cacheIndexStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6460;
            this.match(MySqlParser.KW_CACHE);
            this.state = 6461;
            this.match(MySqlParser.KW_INDEX);
            this.state = 6479;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 929, this.context) ) {
            case 1:
                {
                this.state = 6462;
                this.tableIndex();
                this.state = 6467;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 6463;
                    this.match(MySqlParser.COMMA);
                    this.state = 6464;
                    this.tableIndex();
                    }
                    }
                    this.state = 6469;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case 2:
                {
                this.state = 6470;
                this.tableName();
                this.state = 6471;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 6472;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 6475;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_ARRAY:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_BUCKETS:
                case MySqlParser.KW_CONDITION:
                case MySqlParser.KW_CURRENT:
                case MySqlParser.KW_CURRENT_USER:
                case MySqlParser.KW_DATABASE:
                case MySqlParser.KW_DEFAULT:
                case MySqlParser.KW_DIAGNOSTICS:
                case MySqlParser.KW_EMPTY:
                case MySqlParser.KW_ENFORCED:
                case MySqlParser.KW_EXCEPT:
                case MySqlParser.KW_GROUP:
                case MySqlParser.KW_IF:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_LATERAL:
                case MySqlParser.KW_LEFT:
                case MySqlParser.KW_NUMBER:
                case MySqlParser.KW_OPTIONAL:
                case MySqlParser.KW_ORDER:
                case MySqlParser.KW_PRIMARY:
                case MySqlParser.KW_REPEAT:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RIGHT:
                case MySqlParser.KW_SCHEMA:
                case MySqlParser.KW_SKIP_QUERY_REWRITE:
                case MySqlParser.KW_STACKED:
                case MySqlParser.KW_DATE:
                case MySqlParser.KW_TIME:
                case MySqlParser.KW_TIMESTAMP:
                case MySqlParser.KW_DATETIME:
                case MySqlParser.KW_YEAR:
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_TEXT:
                case MySqlParser.KW_ENUM:
                case MySqlParser.KW_SERIAL:
                case MySqlParser.KW_JSON_TABLE:
                case MySqlParser.KW_JSON_VALUE:
                case MySqlParser.KW_NESTED:
                case MySqlParser.KW_ORDINALITY:
                case MySqlParser.KW_PATH:
                case MySqlParser.KW_AVG:
                case MySqlParser.KW_BIT_AND:
                case MySqlParser.KW_BIT_OR:
                case MySqlParser.KW_BIT_XOR:
                case MySqlParser.KW_COUNT:
                case MySqlParser.KW_CUME_DIST:
                case MySqlParser.KW_DENSE_RANK:
                case MySqlParser.KW_FIRST_VALUE:
                case MySqlParser.KW_GROUP_CONCAT:
                case MySqlParser.KW_LAG:
                case MySqlParser.KW_LAST_VALUE:
                case MySqlParser.KW_LEAD:
                case MySqlParser.KW_MAX:
                case MySqlParser.KW_MIN:
                case MySqlParser.KW_NTILE:
                case MySqlParser.KW_NTH_VALUE:
                case MySqlParser.KW_PERCENT_RANK:
                case MySqlParser.KW_RANK:
                case MySqlParser.KW_ROW_NUMBER:
                case MySqlParser.KW_STD:
                case MySqlParser.KW_STDDEV:
                case MySqlParser.KW_STDDEV_POP:
                case MySqlParser.KW_STDDEV_SAMP:
                case MySqlParser.KW_SUM:
                case MySqlParser.KW_VAR_POP:
                case MySqlParser.KW_VAR_SAMP:
                case MySqlParser.KW_VARIANCE:
                case MySqlParser.KW_CURRENT_DATE:
                case MySqlParser.KW_CURRENT_TIME:
                case MySqlParser.KW_CURRENT_TIMESTAMP:
                case MySqlParser.KW_LOCALTIME:
                case MySqlParser.KW_CURDATE:
                case MySqlParser.KW_CURTIME:
                case MySqlParser.KW_DATE_ADD:
                case MySqlParser.KW_DATE_SUB:
                case MySqlParser.KW_LOCALTIMESTAMP:
                case MySqlParser.KW_NOW:
                case MySqlParser.KW_POSITION:
                case MySqlParser.KW_SUBSTR:
                case MySqlParser.KW_SUBSTRING:
                case MySqlParser.KW_SYSDATE:
                case MySqlParser.KW_TRIM:
                case MySqlParser.KW_UTC_DATE:
                case MySqlParser.KW_UTC_TIME:
                case MySqlParser.KW_UTC_TIMESTAMP:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_ACTION:
                case MySqlParser.KW_AFTER:
                case MySqlParser.KW_AGGREGATE:
                case MySqlParser.KW_ALGORITHM:
                case MySqlParser.KW_ANY:
                case MySqlParser.KW_AT:
                case MySqlParser.KW_AUTHORS:
                case MySqlParser.KW_AUTOCOMMIT:
                case MySqlParser.KW_AUTOEXTEND_SIZE:
                case MySqlParser.KW_AUTO_INCREMENT:
                case MySqlParser.KW_AVG_ROW_LENGTH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_BIT:
                case MySqlParser.KW_BLOCK:
                case MySqlParser.KW_BOOL:
                case MySqlParser.KW_BOOLEAN:
                case MySqlParser.KW_BTREE:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CASCADED:
                case MySqlParser.KW_CHAIN:
                case MySqlParser.KW_CHANGED:
                case MySqlParser.KW_CHANNEL:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_CIPHER:
                case MySqlParser.KW_CLASS_ORIGIN:
                case MySqlParser.KW_CLIENT:
                case MySqlParser.KW_CLOSE:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_CODE:
                case MySqlParser.KW_COLUMNS:
                case MySqlParser.KW_COLUMN_FORMAT:
                case MySqlParser.KW_COLUMN_NAME:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_COMPACT:
                case MySqlParser.KW_COMPLETION:
                case MySqlParser.KW_COMPRESSED:
                case MySqlParser.KW_COMPRESSION:
                case MySqlParser.KW_CONCURRENT:
                case MySqlParser.KW_CONNECT:
                case MySqlParser.KW_CONNECTION:
                case MySqlParser.KW_CONSISTENT:
                case MySqlParser.KW_CONSTRAINT_CATALOG:
                case MySqlParser.KW_CONSTRAINT_SCHEMA:
                case MySqlParser.KW_CONSTRAINT_NAME:
                case MySqlParser.KW_CONTAINS:
                case MySqlParser.KW_CONTEXT:
                case MySqlParser.KW_CONTRIBUTORS:
                case MySqlParser.KW_COPY:
                case MySqlParser.KW_CPU:
                case MySqlParser.KW_CURSOR_NAME:
                case MySqlParser.KW_DATA:
                case MySqlParser.KW_DATAFILE:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DEFAULT_AUTH:
                case MySqlParser.KW_DEFINER:
                case MySqlParser.KW_DELAY_KEY_WRITE:
                case MySqlParser.KW_DES_KEY_FILE:
                case MySqlParser.KW_DIRECTORY:
                case MySqlParser.KW_DISABLE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DISK:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_DUMPFILE:
                case MySqlParser.KW_DUPLICATE:
                case MySqlParser.KW_DYNAMIC:
                case MySqlParser.KW_ENABLE:
                case MySqlParser.KW_ENCRYPTION:
                case MySqlParser.KW_END:
                case MySqlParser.KW_ENDS:
                case MySqlParser.KW_ENGINE:
                case MySqlParser.KW_ENGINES:
                case MySqlParser.KW_ERROR:
                case MySqlParser.KW_ERRORS:
                case MySqlParser.KW_ESCAPE:
                case MySqlParser.KW_EVENT:
                case MySqlParser.KW_EVENTS:
                case MySqlParser.KW_EVERY:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_EXCLUSIVE:
                case MySqlParser.KW_EXPIRE:
                case MySqlParser.KW_EXPORT:
                case MySqlParser.KW_EXTENDED:
                case MySqlParser.KW_EXTENT_SIZE:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FAST:
                case MySqlParser.KW_FAULTS:
                case MySqlParser.KW_FIELDS:
                case MySqlParser.KW_FILE_BLOCK_SIZE:
                case MySqlParser.KW_FILTER:
                case MySqlParser.KW_FIRST:
                case MySqlParser.KW_FIXED:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_FOLLOWS:
                case MySqlParser.KW_FOUND:
                case MySqlParser.KW_FULL:
                case MySqlParser.KW_FUNCTION:
                case MySqlParser.KW_GENERAL:
                case MySqlParser.KW_GLOBAL:
                case MySqlParser.KW_GRANTS:
                case MySqlParser.KW_GROUP_REPLICATION:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HASH:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_HISTORY:
                case MySqlParser.KW_HOST:
                case MySqlParser.KW_HOSTS:
                case MySqlParser.KW_IDENTIFIED:
                case MySqlParser.KW_IGNORE_SERVER_IDS:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INDEXES:
                case MySqlParser.KW_INITIAL_SIZE:
                case MySqlParser.KW_INPLACE:
                case MySqlParser.KW_INSERT_METHOD:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_INSTANCE:
                case MySqlParser.KW_INSTANT:
                case MySqlParser.KW_INVISIBLE:
                case MySqlParser.KW_INVOKER:
                case MySqlParser.KW_IO:
                case MySqlParser.KW_IO_THREAD:
                case MySqlParser.KW_IPC:
                case MySqlParser.KW_ISOLATION:
                case MySqlParser.KW_ISSUER:
                case MySqlParser.KW_JSON:
                case MySqlParser.KW_KEY_BLOCK_SIZE:
                case MySqlParser.KW_LANGUAGE:
                case MySqlParser.KW_LAST:
                case MySqlParser.KW_LEAVES:
                case MySqlParser.KW_LESS:
                case MySqlParser.KW_LEVEL:
                case MySqlParser.KW_LIST:
                case MySqlParser.KW_LOCAL:
                case MySqlParser.KW_LOGFILE:
                case MySqlParser.KW_LOGS:
                case MySqlParser.KW_MASTER:
                case MySqlParser.KW_MASTER_AUTO_POSITION:
                case MySqlParser.KW_MASTER_CONNECT_RETRY:
                case MySqlParser.KW_MASTER_DELAY:
                case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
                case MySqlParser.KW_MASTER_HOST:
                case MySqlParser.KW_MASTER_LOG_FILE:
                case MySqlParser.KW_MASTER_LOG_POS:
                case MySqlParser.KW_MASTER_PASSWORD:
                case MySqlParser.KW_MASTER_PORT:
                case MySqlParser.KW_MASTER_RETRY_COUNT:
                case MySqlParser.KW_MASTER_SSL:
                case MySqlParser.KW_MASTER_SSL_CA:
                case MySqlParser.KW_MASTER_SSL_CAPATH:
                case MySqlParser.KW_MASTER_SSL_CERT:
                case MySqlParser.KW_MASTER_SSL_CIPHER:
                case MySqlParser.KW_MASTER_SSL_CRL:
                case MySqlParser.KW_MASTER_SSL_CRLPATH:
                case MySqlParser.KW_MASTER_SSL_KEY:
                case MySqlParser.KW_MASTER_TLS_VERSION:
                case MySqlParser.KW_MASTER_USER:
                case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                case MySqlParser.KW_MAX_ROWS:
                case MySqlParser.KW_MAX_SIZE:
                case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                case MySqlParser.KW_MAX_USER_CONNECTIONS:
                case MySqlParser.KW_MEDIUM:
                case MySqlParser.KW_MEMBER:
                case MySqlParser.KW_MERGE:
                case MySqlParser.KW_MESSAGE_TEXT:
                case MySqlParser.KW_MID:
                case MySqlParser.KW_MIGRATE:
                case MySqlParser.KW_MIN_ROWS:
                case MySqlParser.KW_MODE:
                case MySqlParser.KW_MODIFY:
                case MySqlParser.KW_MUTEX:
                case MySqlParser.KW_MYSQL:
                case MySqlParser.KW_MYSQL_ERRNO:
                case MySqlParser.KW_NAME:
                case MySqlParser.KW_NAMES:
                case MySqlParser.KW_NCHAR:
                case MySqlParser.KW_NEVER:
                case MySqlParser.KW_NEXT:
                case MySqlParser.KW_NO:
                case MySqlParser.KW_NOWAIT:
                case MySqlParser.KW_NODEGROUP:
                case MySqlParser.KW_NONE:
                case MySqlParser.KW_ODBC:
                case MySqlParser.KW_OFFLINE:
                case MySqlParser.KW_OFFSET:
                case MySqlParser.KW_OF:
                case MySqlParser.KW_OLD_PASSWORD:
                case MySqlParser.KW_ONE:
                case MySqlParser.KW_ONLINE:
                case MySqlParser.KW_ONLY:
                case MySqlParser.KW_OPEN:
                case MySqlParser.KW_OPTIMIZER_COSTS:
                case MySqlParser.KW_OPTIONS:
                case MySqlParser.KW_OWNER:
                case MySqlParser.KW_PACK_KEYS:
                case MySqlParser.KW_PAGE:
                case MySqlParser.KW_PAGE_CHECKSUM:
                case MySqlParser.KW_PARSER:
                case MySqlParser.KW_PARTIAL:
                case MySqlParser.KW_PARTITIONING:
                case MySqlParser.KW_PARTITIONS:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PHASE:
                case MySqlParser.KW_PLUGIN:
                case MySqlParser.KW_PLUGIN_DIR:
                case MySqlParser.KW_PLUGINS:
                case MySqlParser.KW_PORT:
                case MySqlParser.KW_PRECEDES:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_PRESERVE:
                case MySqlParser.KW_PREV:
                case MySqlParser.KW_PROCESSLIST:
                case MySqlParser.KW_PROFILE:
                case MySqlParser.KW_PROFILES:
                case MySqlParser.KW_PROXY:
                case MySqlParser.KW_QUERY:
                case MySqlParser.KW_QUICK:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_RECOVER:
                case MySqlParser.KW_RECURSIVE:
                case MySqlParser.KW_REDO_BUFFER_SIZE:
                case MySqlParser.KW_REDUNDANT:
                case MySqlParser.KW_RELAY:
                case MySqlParser.KW_RELAY_LOG_FILE:
                case MySqlParser.KW_RELAY_LOG_POS:
                case MySqlParser.KW_RELAYLOG:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_REPLICATE_DO_DB:
                case MySqlParser.KW_REPLICATE_DO_TABLE:
                case MySqlParser.KW_REPLICATE_IGNORE_DB:
                case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATE_REWRITE_DB:
                case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
                case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATION:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESUME:
                case MySqlParser.KW_RETURNED_SQLSTATE:
                case MySqlParser.KW_RETURNS:
                case MySqlParser.KW_REUSE:
                case MySqlParser.KW_ROLE:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_ROLLUP:
                case MySqlParser.KW_ROTATE:
                case MySqlParser.KW_ROW:
                case MySqlParser.KW_ROWS:
                case MySqlParser.KW_ROW_FORMAT:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_SCHEDULE:
                case MySqlParser.KW_SECURITY:
                case MySqlParser.KW_SERVER:
                case MySqlParser.KW_SESSION:
                case MySqlParser.KW_SHARE:
                case MySqlParser.KW_SHARED:
                case MySqlParser.KW_SIGNED:
                case MySqlParser.KW_SIMPLE:
                case MySqlParser.KW_SLAVE:
                case MySqlParser.KW_SLOW:
                case MySqlParser.KW_SNAPSHOT:
                case MySqlParser.KW_SOCKET:
                case MySqlParser.KW_SOME:
                case MySqlParser.KW_SONAME:
                case MySqlParser.KW_SOUNDS:
                case MySqlParser.KW_SOURCE:
                case MySqlParser.KW_SQL_AFTER_GTIDS:
                case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
                case MySqlParser.KW_SQL_BEFORE_GTIDS:
                case MySqlParser.KW_SQL_BUFFER_RESULT:
                case MySqlParser.KW_SQL_CACHE:
                case MySqlParser.KW_SQL_NO_CACHE:
                case MySqlParser.KW_SQL_THREAD:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STARTS:
                case MySqlParser.KW_STATS_AUTO_RECALC:
                case MySqlParser.KW_STATS_PERSISTENT:
                case MySqlParser.KW_STATS_SAMPLE_PAGES:
                case MySqlParser.KW_STATUS:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_STORAGE:
                case MySqlParser.KW_STRING:
                case MySqlParser.KW_SUBCLASS_ORIGIN:
                case MySqlParser.KW_SUBJECT:
                case MySqlParser.KW_SUBPARTITION:
                case MySqlParser.KW_SUBPARTITIONS:
                case MySqlParser.KW_SUSPEND:
                case MySqlParser.KW_SWAPS:
                case MySqlParser.KW_SWITCHES:
                case MySqlParser.KW_TABLE_NAME:
                case MySqlParser.KW_TABLESPACE:
                case MySqlParser.KW_TABLE_TYPE:
                case MySqlParser.KW_TEMPORARY:
                case MySqlParser.KW_TEMPTABLE:
                case MySqlParser.KW_THAN:
                case MySqlParser.KW_TRADITIONAL:
                case MySqlParser.KW_TRANSACTION:
                case MySqlParser.KW_TRANSACTIONAL:
                case MySqlParser.KW_TRIGGERS:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNBOUNDED:
                case MySqlParser.KW_UNDEFINED:
                case MySqlParser.KW_UNDOFILE:
                case MySqlParser.KW_UNDO_BUFFER_SIZE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UNKNOWN:
                case MySqlParser.KW_UNTIL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_USER:
                case MySqlParser.KW_USE_FRM:
                case MySqlParser.KW_USER_RESOURCES:
                case MySqlParser.KW_VALIDATION:
                case MySqlParser.KW_VALUE:
                case MySqlParser.KW_VARIABLES:
                case MySqlParser.KW_VIEW:
                case MySqlParser.KW_VIRTUAL:
                case MySqlParser.KW_VISIBLE:
                case MySqlParser.KW_WAIT:
                case MySqlParser.KW_WARNINGS:
                case MySqlParser.KW_WITHOUT:
                case MySqlParser.KW_WORK:
                case MySqlParser.KW_WRAPPER:
                case MySqlParser.KW_X509:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_XML:
                case MySqlParser.KW_QUARTER:
                case MySqlParser.KW_MONTH:
                case MySqlParser.KW_DAY:
                case MySqlParser.KW_HOUR:
                case MySqlParser.KW_MINUTE:
                case MySqlParser.KW_WEEK:
                case MySqlParser.KW_SECOND:
                case MySqlParser.KW_MICROSECOND:
                case MySqlParser.KW_ADMIN:
                case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
                case MySqlParser.KW_AUDIT_ADMIN:
                case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
                case MySqlParser.KW_BACKUP_ADMIN:
                case MySqlParser.KW_BINLOG_ADMIN:
                case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
                case MySqlParser.KW_CLONE_ADMIN:
                case MySqlParser.KW_CONNECTION_ADMIN:
                case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_FILE:
                case MySqlParser.KW_FIREWALL_ADMIN:
                case MySqlParser.KW_FIREWALL_EXEMPT:
                case MySqlParser.KW_FIREWALL_USER:
                case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
                case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
                case MySqlParser.KW_INVOKE:
                case MySqlParser.KW_LAMBDA:
                case MySqlParser.KW_NDB_STORED_USER:
                case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
                case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
                case MySqlParser.KW_PRIVILEGES:
                case MySqlParser.KW_PROCESS:
                case MySqlParser.KW_RELOAD:
                case MySqlParser.KW_REPLICATION_APPLIER:
                case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_USER:
                case MySqlParser.KW_ROLE_ADMIN:
                case MySqlParser.KW_ROUTINE:
                case MySqlParser.KW_S3:
                case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
                case MySqlParser.KW_SET_USER_ID:
                case MySqlParser.KW_SHOW_ROUTINE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.KW_SUPER:
                case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
                case MySqlParser.KW_TABLES:
                case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
                case MySqlParser.KW_VERSION_TOKEN_ADMIN:
                case MySqlParser.KW_XA_RECOVER_ADMIN:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.KW_ARCHIVE:
                case MySqlParser.KW_BLACKHOLE:
                case MySqlParser.KW_CSV:
                case MySqlParser.KW_FEDERATED:
                case MySqlParser.KW_INNODB:
                case MySqlParser.KW_MEMORY:
                case MySqlParser.KW_MRG_MYISAM:
                case MySqlParser.KW_MYISAM:
                case MySqlParser.KW_NDB:
                case MySqlParser.KW_NDBCLUSTER:
                case MySqlParser.KW_PERFORMANCE_SCHEMA:
                case MySqlParser.KW_TOKUDB:
                case MySqlParser.KW_REPEATABLE:
                case MySqlParser.KW_COMMITTED:
                case MySqlParser.KW_UNCOMMITTED:
                case MySqlParser.KW_SERIALIZABLE:
                case MySqlParser.KW_GEOMETRYCOLLECTION:
                case MySqlParser.KW_LINESTRING:
                case MySqlParser.KW_MULTILINESTRING:
                case MySqlParser.KW_MULTIPOINT:
                case MySqlParser.KW_MULTIPOLYGON:
                case MySqlParser.KW_POINT:
                case MySqlParser.KW_POLYGON:
                case MySqlParser.KW_CATALOG_NAME:
                case MySqlParser.KW_CHARSET:
                case MySqlParser.KW_COLLATION:
                case MySqlParser.KW_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_FORMAT:
                case MySqlParser.KW_GET_FORMAT:
                case MySqlParser.KW_RANDOM:
                case MySqlParser.KW_REVERSE:
                case MySqlParser.KW_ROW_COUNT:
                case MySqlParser.KW_SCHEMA_NAME:
                case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_SRID:
                case MySqlParser.KW_SYSTEM_USER:
                case MySqlParser.KW_TP_CONNECTION_ADMIN:
                case MySqlParser.KW_WEIGHT_STRING:
                case MySqlParser.MOD:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.ID:
                    {
                    this.state = 6473;
                    this.partitionNames();
                    }
                    break;
                case MySqlParser.KW_ALL:
                    {
                    this.state = 6474;
                    this.match(MySqlParser.KW_ALL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 6477;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
            this.state = 6481;
            this.match(MySqlParser.KW_IN);
            this.state = 6482;
            this.databaseName();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public flushStatement(): FlushStatementContext {
        let localContext = new FlushStatementContext(this.context, this.state);
        this.enterRule(localContext, 570, MySqlParser.RULE_flushStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6484;
            this.match(MySqlParser.KW_FLUSH);
            this.state = 6486;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 115 || _la === 450) {
                {
                this.state = 6485;
                this.tableActionOption();
                }
            }

            this.state = 6488;
            this.flushOption();
            this.state = 6493;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 6489;
                this.match(MySqlParser.COMMA);
                this.state = 6490;
                this.flushOption();
                }
                }
                this.state = 6495;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public killStatement(): KillStatementContext {
        let localContext = new KillStatementContext(this.context, this.state);
        this.enterRule(localContext, 572, MySqlParser.RULE_killStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6496;
            this.match(MySqlParser.KW_KILL);
            this.state = 6498;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 932, this.context) ) {
            case 1:
                {
                this.state = 6497;
                localContext._connectionFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 349 || _la === 548)) {
                    localContext._connectionFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            }
            this.state = 6500;
            this.expression(0);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public loadIndexIntoCache(): LoadIndexIntoCacheContext {
        let localContext = new LoadIndexIntoCacheContext(this.context, this.state);
        this.enterRule(localContext, 574, MySqlParser.RULE_loadIndexIntoCache);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6502;
            this.match(MySqlParser.KW_LOAD);
            this.state = 6503;
            this.match(MySqlParser.KW_INDEX);
            this.state = 6504;
            this.match(MySqlParser.KW_INTO);
            this.state = 6505;
            this.match(MySqlParser.KW_CACHE);
            this.state = 6506;
            this.loadedTableIndexes();
            this.state = 6511;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 6507;
                this.match(MySqlParser.COMMA);
                this.state = 6508;
                this.loadedTableIndexes();
                }
                }
                this.state = 6513;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public resetStatement(): ResetStatementContext {
        let localContext = new ResetStatementContext(this.context, this.state);
        this.enterRule(localContext, 576, MySqlParser.RULE_resetStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6514;
            this.match(MySqlParser.KW_RESET);
            this.state = 6515;
            this.resetOption();
            this.state = 6520;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 6516;
                this.match(MySqlParser.COMMA);
                this.state = 6517;
                this.resetOption();
                }
                }
                this.state = 6522;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public resetOption(): ResetOptionContext {
        let localContext = new ResetOptionContext(this.context, this.state);
        this.enterRule(localContext, 578, MySqlParser.RULE_resetOption);
        try {
            this.state = 6528;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_MASTER:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6523;
                this.match(MySqlParser.KW_MASTER);
                }
                break;
            case MySqlParser.KW_REPLICA:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6524;
                this.match(MySqlParser.KW_REPLICA);
                }
                break;
            case MySqlParser.KW_QUERY:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6525;
                this.match(MySqlParser.KW_QUERY);
                this.state = 6526;
                this.match(MySqlParser.KW_CACHE);
                }
                break;
            case MySqlParser.KW_SLAVE:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6527;
                this.match(MySqlParser.KW_SLAVE);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public resetPersist(): ResetPersistContext {
        let localContext = new ResetPersistContext(this.context, this.state);
        this.enterRule(localContext, 580, MySqlParser.RULE_resetPersist);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6530;
            this.match(MySqlParser.KW_RESET);
            this.state = 6531;
            this.match(MySqlParser.KW_PERSIST);
            this.state = 6536;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 937, this.context) ) {
            case 1:
                {
                this.state = 6533;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 936, this.context) ) {
                case 1:
                    {
                    this.state = 6532;
                    this.ifExists();
                    }
                    break;
                }
                this.state = 6535;
                localContext._system_var_name = this.uid();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public resetAllChannel(): ResetAllChannelContext {
        let localContext = new ResetAllChannelContext(this.context, this.state);
        this.enterRule(localContext, 582, MySqlParser.RULE_resetAllChannel);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6538;
            this.match(MySqlParser.KW_RESET);
            this.state = 6539;
            _la = this.tokenStream.LA(1);
            if(!(_la === 563 || _la === 598)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 6541;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 7) {
                {
                this.state = 6540;
                this.match(MySqlParser.KW_ALL);
                }
            }

            this.state = 6544;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 65) {
                {
                this.state = 6543;
                this.channelOption();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public reStartStatement(): ReStartStatementContext {
        let localContext = new ReStartStatementContext(this.context, this.state);
        this.enterRule(localContext, 584, MySqlParser.RULE_reStartStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6546;
            this.match(MySqlParser.KW_RESTART);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public shutdownStatement(): ShutdownStatementContext {
        let localContext = new ShutdownStatementContext(this.context, this.state);
        this.enterRule(localContext, 586, MySqlParser.RULE_shutdownStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6548;
            this.match(MySqlParser.KW_SHUTDOWN);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tableIndex(): TableIndexContext {
        let localContext = new TableIndexContext(this.context, this.state);
        this.enterRule(localContext, 588, MySqlParser.RULE_tableIndex);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6550;
            this.tableName();
            this.state = 6556;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 82 || _la === 92) {
                {
                this.state = 6551;
                localContext._indexFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 82 || _la === 92)) {
                    localContext._indexFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6552;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 6553;
                this.indexNames();
                this.state = 6554;
                this.match(MySqlParser.RR_BRACKET);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public flushOption(): FlushOptionContext {
        let localContext = new FlushOptionContext(this.context, this.state);
        this.enterRule(localContext, 590, MySqlParser.RULE_flushOption);
        let _la: number;
        try {
            this.state = 6590;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 947, this.context) ) {
            case 1:
                localContext = new SimpleFlushOptionContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6576;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_DES_KEY_FILE:
                    {
                    this.state = 6558;
                    this.match(MySqlParser.KW_DES_KEY_FILE);
                    }
                    break;
                case MySqlParser.KW_HOSTS:
                    {
                    this.state = 6559;
                    this.match(MySqlParser.KW_HOSTS);
                    }
                    break;
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_ENGINE:
                case MySqlParser.KW_ERROR:
                case MySqlParser.KW_GENERAL:
                case MySqlParser.KW_LOGS:
                case MySqlParser.KW_RELAY:
                case MySqlParser.KW_SLOW:
                    {
                    this.state = 6561;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 228 || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 1073741829) !== 0) || _la === 556 || _la === 599) {
                        {
                        this.state = 6560;
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 228 || ((((_la - 380)) & ~0x1F) === 0 && ((1 << (_la - 380)) & 1073741829) !== 0) || _la === 556 || _la === 599)) {
                        this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        }
                    }

                    this.state = 6563;
                    this.match(MySqlParser.KW_LOGS);
                    }
                    break;
                case MySqlParser.KW_OPTIMIZER_COSTS:
                    {
                    this.state = 6564;
                    this.match(MySqlParser.KW_OPTIMIZER_COSTS);
                    }
                    break;
                case MySqlParser.KW_PRIVILEGES:
                    {
                    this.state = 6565;
                    this.match(MySqlParser.KW_PRIVILEGES);
                    }
                    break;
                case MySqlParser.KW_QUERY:
                    {
                    this.state = 6566;
                    this.match(MySqlParser.KW_QUERY);
                    this.state = 6567;
                    this.match(MySqlParser.KW_CACHE);
                    }
                    break;
                case MySqlParser.KW_STATUS:
                    {
                    this.state = 6568;
                    this.match(MySqlParser.KW_STATUS);
                    }
                    break;
                case MySqlParser.KW_USER_RESOURCES:
                    {
                    this.state = 6569;
                    this.match(MySqlParser.KW_USER_RESOURCES);
                    }
                    break;
                case MySqlParser.KW_TABLES:
                    {
                    this.state = 6570;
                    this.match(MySqlParser.KW_TABLES);
                    this.state = 6574;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 942, this.context) ) {
                    case 1:
                        {
                        this.state = 6571;
                        this.match(MySqlParser.KW_WITH);
                        this.state = 6572;
                        this.match(MySqlParser.KW_READ);
                        this.state = 6573;
                        this.match(MySqlParser.KW_LOCK);
                        }
                        break;
                    }
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case 2:
                localContext = new ChannelFlushOptionContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6578;
                this.match(MySqlParser.KW_RELAY);
                this.state = 6579;
                this.match(MySqlParser.KW_LOGS);
                this.state = 6581;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 65) {
                    {
                    this.state = 6580;
                    this.channelOption();
                    }
                }

                }
                break;
            case 3:
                localContext = new TableFlushOptionContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6583;
                _la = this.tokenStream.LA(1);
                if(!(_la === 173 || _la === 752)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6585;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 945, this.context) ) {
                case 1:
                    {
                    this.state = 6584;
                    this.tableNames();
                    }
                    break;
                }
                this.state = 6588;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 946, this.context) ) {
                case 1:
                    {
                    this.state = 6587;
                    this.flushTableOption();
                    }
                    break;
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public flushTableOption(): FlushTableOptionContext {
        let localContext = new FlushTableOptionContext(this.context, this.state);
        this.enterRule(localContext, 592, MySqlParser.RULE_flushTableOption);
        try {
            this.state = 6597;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_WITH:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6592;
                this.match(MySqlParser.KW_WITH);
                this.state = 6593;
                this.match(MySqlParser.KW_READ);
                this.state = 6594;
                this.match(MySqlParser.KW_LOCK);
                }
                break;
            case MySqlParser.KW_FOR:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6595;
                this.match(MySqlParser.KW_FOR);
                this.state = 6596;
                this.match(MySqlParser.KW_EXPORT);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public loadedTableIndexes(): LoadedTableIndexesContext {
        let localContext = new LoadedTableIndexesContext(this.context, this.state);
        this.enterRule(localContext, 594, MySqlParser.RULE_loadedTableIndexes);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6599;
            this.tableName();
            this.state = 6607;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 130) {
                {
                this.state = 6600;
                this.match(MySqlParser.KW_PARTITION);
                this.state = 6601;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 6604;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_ARRAY:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_BUCKETS:
                case MySqlParser.KW_CONDITION:
                case MySqlParser.KW_CURRENT:
                case MySqlParser.KW_CURRENT_USER:
                case MySqlParser.KW_DATABASE:
                case MySqlParser.KW_DEFAULT:
                case MySqlParser.KW_DIAGNOSTICS:
                case MySqlParser.KW_EMPTY:
                case MySqlParser.KW_ENFORCED:
                case MySqlParser.KW_EXCEPT:
                case MySqlParser.KW_GROUP:
                case MySqlParser.KW_IF:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_LATERAL:
                case MySqlParser.KW_LEFT:
                case MySqlParser.KW_NUMBER:
                case MySqlParser.KW_OPTIONAL:
                case MySqlParser.KW_ORDER:
                case MySqlParser.KW_PRIMARY:
                case MySqlParser.KW_REPEAT:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RIGHT:
                case MySqlParser.KW_SCHEMA:
                case MySqlParser.KW_SKIP_QUERY_REWRITE:
                case MySqlParser.KW_STACKED:
                case MySqlParser.KW_DATE:
                case MySqlParser.KW_TIME:
                case MySqlParser.KW_TIMESTAMP:
                case MySqlParser.KW_DATETIME:
                case MySqlParser.KW_YEAR:
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_TEXT:
                case MySqlParser.KW_ENUM:
                case MySqlParser.KW_SERIAL:
                case MySqlParser.KW_JSON_TABLE:
                case MySqlParser.KW_JSON_VALUE:
                case MySqlParser.KW_NESTED:
                case MySqlParser.KW_ORDINALITY:
                case MySqlParser.KW_PATH:
                case MySqlParser.KW_AVG:
                case MySqlParser.KW_BIT_AND:
                case MySqlParser.KW_BIT_OR:
                case MySqlParser.KW_BIT_XOR:
                case MySqlParser.KW_COUNT:
                case MySqlParser.KW_CUME_DIST:
                case MySqlParser.KW_DENSE_RANK:
                case MySqlParser.KW_FIRST_VALUE:
                case MySqlParser.KW_GROUP_CONCAT:
                case MySqlParser.KW_LAG:
                case MySqlParser.KW_LAST_VALUE:
                case MySqlParser.KW_LEAD:
                case MySqlParser.KW_MAX:
                case MySqlParser.KW_MIN:
                case MySqlParser.KW_NTILE:
                case MySqlParser.KW_NTH_VALUE:
                case MySqlParser.KW_PERCENT_RANK:
                case MySqlParser.KW_RANK:
                case MySqlParser.KW_ROW_NUMBER:
                case MySqlParser.KW_STD:
                case MySqlParser.KW_STDDEV:
                case MySqlParser.KW_STDDEV_POP:
                case MySqlParser.KW_STDDEV_SAMP:
                case MySqlParser.KW_SUM:
                case MySqlParser.KW_VAR_POP:
                case MySqlParser.KW_VAR_SAMP:
                case MySqlParser.KW_VARIANCE:
                case MySqlParser.KW_CURRENT_DATE:
                case MySqlParser.KW_CURRENT_TIME:
                case MySqlParser.KW_CURRENT_TIMESTAMP:
                case MySqlParser.KW_LOCALTIME:
                case MySqlParser.KW_CURDATE:
                case MySqlParser.KW_CURTIME:
                case MySqlParser.KW_DATE_ADD:
                case MySqlParser.KW_DATE_SUB:
                case MySqlParser.KW_LOCALTIMESTAMP:
                case MySqlParser.KW_NOW:
                case MySqlParser.KW_POSITION:
                case MySqlParser.KW_SUBSTR:
                case MySqlParser.KW_SUBSTRING:
                case MySqlParser.KW_SYSDATE:
                case MySqlParser.KW_TRIM:
                case MySqlParser.KW_UTC_DATE:
                case MySqlParser.KW_UTC_TIME:
                case MySqlParser.KW_UTC_TIMESTAMP:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_ACTION:
                case MySqlParser.KW_AFTER:
                case MySqlParser.KW_AGGREGATE:
                case MySqlParser.KW_ALGORITHM:
                case MySqlParser.KW_ANY:
                case MySqlParser.KW_AT:
                case MySqlParser.KW_AUTHORS:
                case MySqlParser.KW_AUTOCOMMIT:
                case MySqlParser.KW_AUTOEXTEND_SIZE:
                case MySqlParser.KW_AUTO_INCREMENT:
                case MySqlParser.KW_AVG_ROW_LENGTH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_BIT:
                case MySqlParser.KW_BLOCK:
                case MySqlParser.KW_BOOL:
                case MySqlParser.KW_BOOLEAN:
                case MySqlParser.KW_BTREE:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CASCADED:
                case MySqlParser.KW_CHAIN:
                case MySqlParser.KW_CHANGED:
                case MySqlParser.KW_CHANNEL:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_CIPHER:
                case MySqlParser.KW_CLASS_ORIGIN:
                case MySqlParser.KW_CLIENT:
                case MySqlParser.KW_CLOSE:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_CODE:
                case MySqlParser.KW_COLUMNS:
                case MySqlParser.KW_COLUMN_FORMAT:
                case MySqlParser.KW_COLUMN_NAME:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_COMPACT:
                case MySqlParser.KW_COMPLETION:
                case MySqlParser.KW_COMPRESSED:
                case MySqlParser.KW_COMPRESSION:
                case MySqlParser.KW_CONCURRENT:
                case MySqlParser.KW_CONNECT:
                case MySqlParser.KW_CONNECTION:
                case MySqlParser.KW_CONSISTENT:
                case MySqlParser.KW_CONSTRAINT_CATALOG:
                case MySqlParser.KW_CONSTRAINT_SCHEMA:
                case MySqlParser.KW_CONSTRAINT_NAME:
                case MySqlParser.KW_CONTAINS:
                case MySqlParser.KW_CONTEXT:
                case MySqlParser.KW_CONTRIBUTORS:
                case MySqlParser.KW_COPY:
                case MySqlParser.KW_CPU:
                case MySqlParser.KW_CURSOR_NAME:
                case MySqlParser.KW_DATA:
                case MySqlParser.KW_DATAFILE:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DEFAULT_AUTH:
                case MySqlParser.KW_DEFINER:
                case MySqlParser.KW_DELAY_KEY_WRITE:
                case MySqlParser.KW_DES_KEY_FILE:
                case MySqlParser.KW_DIRECTORY:
                case MySqlParser.KW_DISABLE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DISK:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_DUMPFILE:
                case MySqlParser.KW_DUPLICATE:
                case MySqlParser.KW_DYNAMIC:
                case MySqlParser.KW_ENABLE:
                case MySqlParser.KW_ENCRYPTION:
                case MySqlParser.KW_END:
                case MySqlParser.KW_ENDS:
                case MySqlParser.KW_ENGINE:
                case MySqlParser.KW_ENGINES:
                case MySqlParser.KW_ERROR:
                case MySqlParser.KW_ERRORS:
                case MySqlParser.KW_ESCAPE:
                case MySqlParser.KW_EVENT:
                case MySqlParser.KW_EVENTS:
                case MySqlParser.KW_EVERY:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_EXCLUSIVE:
                case MySqlParser.KW_EXPIRE:
                case MySqlParser.KW_EXPORT:
                case MySqlParser.KW_EXTENDED:
                case MySqlParser.KW_EXTENT_SIZE:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FAST:
                case MySqlParser.KW_FAULTS:
                case MySqlParser.KW_FIELDS:
                case MySqlParser.KW_FILE_BLOCK_SIZE:
                case MySqlParser.KW_FILTER:
                case MySqlParser.KW_FIRST:
                case MySqlParser.KW_FIXED:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_FOLLOWS:
                case MySqlParser.KW_FOUND:
                case MySqlParser.KW_FULL:
                case MySqlParser.KW_FUNCTION:
                case MySqlParser.KW_GENERAL:
                case MySqlParser.KW_GLOBAL:
                case MySqlParser.KW_GRANTS:
                case MySqlParser.KW_GROUP_REPLICATION:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HASH:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_HISTORY:
                case MySqlParser.KW_HOST:
                case MySqlParser.KW_HOSTS:
                case MySqlParser.KW_IDENTIFIED:
                case MySqlParser.KW_IGNORE_SERVER_IDS:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INDEXES:
                case MySqlParser.KW_INITIAL_SIZE:
                case MySqlParser.KW_INPLACE:
                case MySqlParser.KW_INSERT_METHOD:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_INSTANCE:
                case MySqlParser.KW_INSTANT:
                case MySqlParser.KW_INVISIBLE:
                case MySqlParser.KW_INVOKER:
                case MySqlParser.KW_IO:
                case MySqlParser.KW_IO_THREAD:
                case MySqlParser.KW_IPC:
                case MySqlParser.KW_ISOLATION:
                case MySqlParser.KW_ISSUER:
                case MySqlParser.KW_JSON:
                case MySqlParser.KW_KEY_BLOCK_SIZE:
                case MySqlParser.KW_LANGUAGE:
                case MySqlParser.KW_LAST:
                case MySqlParser.KW_LEAVES:
                case MySqlParser.KW_LESS:
                case MySqlParser.KW_LEVEL:
                case MySqlParser.KW_LIST:
                case MySqlParser.KW_LOCAL:
                case MySqlParser.KW_LOGFILE:
                case MySqlParser.KW_LOGS:
                case MySqlParser.KW_MASTER:
                case MySqlParser.KW_MASTER_AUTO_POSITION:
                case MySqlParser.KW_MASTER_CONNECT_RETRY:
                case MySqlParser.KW_MASTER_DELAY:
                case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
                case MySqlParser.KW_MASTER_HOST:
                case MySqlParser.KW_MASTER_LOG_FILE:
                case MySqlParser.KW_MASTER_LOG_POS:
                case MySqlParser.KW_MASTER_PASSWORD:
                case MySqlParser.KW_MASTER_PORT:
                case MySqlParser.KW_MASTER_RETRY_COUNT:
                case MySqlParser.KW_MASTER_SSL:
                case MySqlParser.KW_MASTER_SSL_CA:
                case MySqlParser.KW_MASTER_SSL_CAPATH:
                case MySqlParser.KW_MASTER_SSL_CERT:
                case MySqlParser.KW_MASTER_SSL_CIPHER:
                case MySqlParser.KW_MASTER_SSL_CRL:
                case MySqlParser.KW_MASTER_SSL_CRLPATH:
                case MySqlParser.KW_MASTER_SSL_KEY:
                case MySqlParser.KW_MASTER_TLS_VERSION:
                case MySqlParser.KW_MASTER_USER:
                case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                case MySqlParser.KW_MAX_ROWS:
                case MySqlParser.KW_MAX_SIZE:
                case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                case MySqlParser.KW_MAX_USER_CONNECTIONS:
                case MySqlParser.KW_MEDIUM:
                case MySqlParser.KW_MEMBER:
                case MySqlParser.KW_MERGE:
                case MySqlParser.KW_MESSAGE_TEXT:
                case MySqlParser.KW_MID:
                case MySqlParser.KW_MIGRATE:
                case MySqlParser.KW_MIN_ROWS:
                case MySqlParser.KW_MODE:
                case MySqlParser.KW_MODIFY:
                case MySqlParser.KW_MUTEX:
                case MySqlParser.KW_MYSQL:
                case MySqlParser.KW_MYSQL_ERRNO:
                case MySqlParser.KW_NAME:
                case MySqlParser.KW_NAMES:
                case MySqlParser.KW_NCHAR:
                case MySqlParser.KW_NEVER:
                case MySqlParser.KW_NEXT:
                case MySqlParser.KW_NO:
                case MySqlParser.KW_NOWAIT:
                case MySqlParser.KW_NODEGROUP:
                case MySqlParser.KW_NONE:
                case MySqlParser.KW_ODBC:
                case MySqlParser.KW_OFFLINE:
                case MySqlParser.KW_OFFSET:
                case MySqlParser.KW_OF:
                case MySqlParser.KW_OLD_PASSWORD:
                case MySqlParser.KW_ONE:
                case MySqlParser.KW_ONLINE:
                case MySqlParser.KW_ONLY:
                case MySqlParser.KW_OPEN:
                case MySqlParser.KW_OPTIMIZER_COSTS:
                case MySqlParser.KW_OPTIONS:
                case MySqlParser.KW_OWNER:
                case MySqlParser.KW_PACK_KEYS:
                case MySqlParser.KW_PAGE:
                case MySqlParser.KW_PAGE_CHECKSUM:
                case MySqlParser.KW_PARSER:
                case MySqlParser.KW_PARTIAL:
                case MySqlParser.KW_PARTITIONING:
                case MySqlParser.KW_PARTITIONS:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PHASE:
                case MySqlParser.KW_PLUGIN:
                case MySqlParser.KW_PLUGIN_DIR:
                case MySqlParser.KW_PLUGINS:
                case MySqlParser.KW_PORT:
                case MySqlParser.KW_PRECEDES:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_PRESERVE:
                case MySqlParser.KW_PREV:
                case MySqlParser.KW_PROCESSLIST:
                case MySqlParser.KW_PROFILE:
                case MySqlParser.KW_PROFILES:
                case MySqlParser.KW_PROXY:
                case MySqlParser.KW_QUERY:
                case MySqlParser.KW_QUICK:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_RECOVER:
                case MySqlParser.KW_RECURSIVE:
                case MySqlParser.KW_REDO_BUFFER_SIZE:
                case MySqlParser.KW_REDUNDANT:
                case MySqlParser.KW_RELAY:
                case MySqlParser.KW_RELAY_LOG_FILE:
                case MySqlParser.KW_RELAY_LOG_POS:
                case MySqlParser.KW_RELAYLOG:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_REPLICATE_DO_DB:
                case MySqlParser.KW_REPLICATE_DO_TABLE:
                case MySqlParser.KW_REPLICATE_IGNORE_DB:
                case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATE_REWRITE_DB:
                case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
                case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATION:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESUME:
                case MySqlParser.KW_RETURNED_SQLSTATE:
                case MySqlParser.KW_RETURNS:
                case MySqlParser.KW_REUSE:
                case MySqlParser.KW_ROLE:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_ROLLUP:
                case MySqlParser.KW_ROTATE:
                case MySqlParser.KW_ROW:
                case MySqlParser.KW_ROWS:
                case MySqlParser.KW_ROW_FORMAT:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_SCHEDULE:
                case MySqlParser.KW_SECURITY:
                case MySqlParser.KW_SERVER:
                case MySqlParser.KW_SESSION:
                case MySqlParser.KW_SHARE:
                case MySqlParser.KW_SHARED:
                case MySqlParser.KW_SIGNED:
                case MySqlParser.KW_SIMPLE:
                case MySqlParser.KW_SLAVE:
                case MySqlParser.KW_SLOW:
                case MySqlParser.KW_SNAPSHOT:
                case MySqlParser.KW_SOCKET:
                case MySqlParser.KW_SOME:
                case MySqlParser.KW_SONAME:
                case MySqlParser.KW_SOUNDS:
                case MySqlParser.KW_SOURCE:
                case MySqlParser.KW_SQL_AFTER_GTIDS:
                case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
                case MySqlParser.KW_SQL_BEFORE_GTIDS:
                case MySqlParser.KW_SQL_BUFFER_RESULT:
                case MySqlParser.KW_SQL_CACHE:
                case MySqlParser.KW_SQL_NO_CACHE:
                case MySqlParser.KW_SQL_THREAD:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STARTS:
                case MySqlParser.KW_STATS_AUTO_RECALC:
                case MySqlParser.KW_STATS_PERSISTENT:
                case MySqlParser.KW_STATS_SAMPLE_PAGES:
                case MySqlParser.KW_STATUS:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_STORAGE:
                case MySqlParser.KW_STRING:
                case MySqlParser.KW_SUBCLASS_ORIGIN:
                case MySqlParser.KW_SUBJECT:
                case MySqlParser.KW_SUBPARTITION:
                case MySqlParser.KW_SUBPARTITIONS:
                case MySqlParser.KW_SUSPEND:
                case MySqlParser.KW_SWAPS:
                case MySqlParser.KW_SWITCHES:
                case MySqlParser.KW_TABLE_NAME:
                case MySqlParser.KW_TABLESPACE:
                case MySqlParser.KW_TABLE_TYPE:
                case MySqlParser.KW_TEMPORARY:
                case MySqlParser.KW_TEMPTABLE:
                case MySqlParser.KW_THAN:
                case MySqlParser.KW_TRADITIONAL:
                case MySqlParser.KW_TRANSACTION:
                case MySqlParser.KW_TRANSACTIONAL:
                case MySqlParser.KW_TRIGGERS:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNBOUNDED:
                case MySqlParser.KW_UNDEFINED:
                case MySqlParser.KW_UNDOFILE:
                case MySqlParser.KW_UNDO_BUFFER_SIZE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UNKNOWN:
                case MySqlParser.KW_UNTIL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_USER:
                case MySqlParser.KW_USE_FRM:
                case MySqlParser.KW_USER_RESOURCES:
                case MySqlParser.KW_VALIDATION:
                case MySqlParser.KW_VALUE:
                case MySqlParser.KW_VARIABLES:
                case MySqlParser.KW_VIEW:
                case MySqlParser.KW_VIRTUAL:
                case MySqlParser.KW_VISIBLE:
                case MySqlParser.KW_WAIT:
                case MySqlParser.KW_WARNINGS:
                case MySqlParser.KW_WITHOUT:
                case MySqlParser.KW_WORK:
                case MySqlParser.KW_WRAPPER:
                case MySqlParser.KW_X509:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_XML:
                case MySqlParser.KW_QUARTER:
                case MySqlParser.KW_MONTH:
                case MySqlParser.KW_DAY:
                case MySqlParser.KW_HOUR:
                case MySqlParser.KW_MINUTE:
                case MySqlParser.KW_WEEK:
                case MySqlParser.KW_SECOND:
                case MySqlParser.KW_MICROSECOND:
                case MySqlParser.KW_ADMIN:
                case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
                case MySqlParser.KW_AUDIT_ADMIN:
                case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
                case MySqlParser.KW_BACKUP_ADMIN:
                case MySqlParser.KW_BINLOG_ADMIN:
                case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
                case MySqlParser.KW_CLONE_ADMIN:
                case MySqlParser.KW_CONNECTION_ADMIN:
                case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_FILE:
                case MySqlParser.KW_FIREWALL_ADMIN:
                case MySqlParser.KW_FIREWALL_EXEMPT:
                case MySqlParser.KW_FIREWALL_USER:
                case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
                case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
                case MySqlParser.KW_INVOKE:
                case MySqlParser.KW_LAMBDA:
                case MySqlParser.KW_NDB_STORED_USER:
                case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
                case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
                case MySqlParser.KW_PRIVILEGES:
                case MySqlParser.KW_PROCESS:
                case MySqlParser.KW_RELOAD:
                case MySqlParser.KW_REPLICATION_APPLIER:
                case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_USER:
                case MySqlParser.KW_ROLE_ADMIN:
                case MySqlParser.KW_ROUTINE:
                case MySqlParser.KW_S3:
                case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
                case MySqlParser.KW_SET_USER_ID:
                case MySqlParser.KW_SHOW_ROUTINE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.KW_SUPER:
                case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
                case MySqlParser.KW_TABLES:
                case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
                case MySqlParser.KW_VERSION_TOKEN_ADMIN:
                case MySqlParser.KW_XA_RECOVER_ADMIN:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.KW_ARCHIVE:
                case MySqlParser.KW_BLACKHOLE:
                case MySqlParser.KW_CSV:
                case MySqlParser.KW_FEDERATED:
                case MySqlParser.KW_INNODB:
                case MySqlParser.KW_MEMORY:
                case MySqlParser.KW_MRG_MYISAM:
                case MySqlParser.KW_MYISAM:
                case MySqlParser.KW_NDB:
                case MySqlParser.KW_NDBCLUSTER:
                case MySqlParser.KW_PERFORMANCE_SCHEMA:
                case MySqlParser.KW_TOKUDB:
                case MySqlParser.KW_REPEATABLE:
                case MySqlParser.KW_COMMITTED:
                case MySqlParser.KW_UNCOMMITTED:
                case MySqlParser.KW_SERIALIZABLE:
                case MySqlParser.KW_GEOMETRYCOLLECTION:
                case MySqlParser.KW_LINESTRING:
                case MySqlParser.KW_MULTILINESTRING:
                case MySqlParser.KW_MULTIPOINT:
                case MySqlParser.KW_MULTIPOLYGON:
                case MySqlParser.KW_POINT:
                case MySqlParser.KW_POLYGON:
                case MySqlParser.KW_CATALOG_NAME:
                case MySqlParser.KW_CHARSET:
                case MySqlParser.KW_COLLATION:
                case MySqlParser.KW_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_FORMAT:
                case MySqlParser.KW_GET_FORMAT:
                case MySqlParser.KW_RANDOM:
                case MySqlParser.KW_REVERSE:
                case MySqlParser.KW_ROW_COUNT:
                case MySqlParser.KW_SCHEMA_NAME:
                case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_SRID:
                case MySqlParser.KW_SYSTEM_USER:
                case MySqlParser.KW_TP_CONNECTION_ADMIN:
                case MySqlParser.KW_WEIGHT_STRING:
                case MySqlParser.MOD:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.ID:
                    {
                    this.state = 6602;
                    this.partitionNames();
                    }
                    break;
                case MySqlParser.KW_ALL:
                    {
                    this.state = 6603;
                    this.match(MySqlParser.KW_ALL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 6606;
                this.match(MySqlParser.RR_BRACKET);
                }
            }

            this.state = 6616;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 952, this.context) ) {
            case 1:
                {
                this.state = 6610;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 82 || _la === 92) {
                    {
                    this.state = 6609;
                    localContext._indexFormat = this.tokenStream.LT(1);
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 82 || _la === 92)) {
                        localContext._indexFormat = this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                this.state = 6612;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 6613;
                this.indexNames();
                this.state = 6614;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
            this.state = 6620;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 79) {
                {
                this.state = 6618;
                this.match(MySqlParser.KW_IGNORE);
                this.state = 6619;
                this.match(MySqlParser.KW_LEAVES);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public simpleDescribeStatement(): SimpleDescribeStatementContext {
        let localContext = new SimpleDescribeStatementContext(this.context, this.state);
        this.enterRule(localContext, 596, MySqlParser.RULE_simpleDescribeStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6622;
            localContext._command = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 45)) & ~0x1F) === 0 && ((1 << (_la - 45)) & 131075) !== 0))) {
                localContext._command = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 6623;
            this.tableName();
            this.state = 6626;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 954, this.context) ) {
            case 1:
                {
                this.state = 6624;
                localContext._column = this.columnName();
                }
                break;
            case 2:
                {
                this.state = 6625;
                localContext._pattern = this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public fullDescribeStatement(): FullDescribeStatementContext {
        let localContext = new FullDescribeStatementContext(this.context, this.state);
        this.enterRule(localContext, 598, MySqlParser.RULE_fullDescribeStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6628;
            localContext._command = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 45)) & ~0x1F) === 0 && ((1 << (_la - 45)) & 131075) !== 0))) {
                localContext._command = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 6634;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_EXTENDED:
                {
                this.state = 6629;
                this.match(MySqlParser.KW_EXTENDED);
                }
                break;
            case MySqlParser.KW_PARTITIONS:
                {
                this.state = 6630;
                this.match(MySqlParser.KW_PARTITIONS);
                }
                break;
            case MySqlParser.KW_FORMAT:
                {
                this.state = 6631;
                this.match(MySqlParser.KW_FORMAT);
                this.state = 6632;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 6633;
                _la = this.tokenStream.LA(1);
                if(!(_la === 442 || _la === 663 || _la === 666)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_DELETE:
            case MySqlParser.KW_FOR:
            case MySqlParser.KW_INSERT:
            case MySqlParser.KW_REPLACE:
            case MySqlParser.KW_SELECT:
            case MySqlParser.KW_UPDATE:
            case MySqlParser.LR_BRACKET:
                break;
            default:
                break;
            }
            this.state = 6636;
            this.describeObjectClause();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public analyzeDescribeStatement(): AnalyzeDescribeStatementContext {
        let localContext = new AnalyzeDescribeStatementContext(this.context, this.state);
        this.enterRule(localContext, 600, MySqlParser.RULE_analyzeDescribeStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6638;
            localContext._command = this.tokenStream.LT(1);
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 45)) & ~0x1F) === 0 && ((1 << (_la - 45)) & 131075) !== 0))) {
                localContext._command = this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 6639;
            this.match(MySqlParser.KW_ANALYZE);
            this.state = 6643;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 826) {
                {
                this.state = 6640;
                this.match(MySqlParser.KW_FORMAT);
                this.state = 6641;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 6642;
                this.match(MySqlParser.KW_TREE);
                }
            }

            this.state = 6645;
            this.selectStatement();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public helpStatement(): HelpStatementContext {
        let localContext = new HelpStatementContext(this.context, this.state);
        this.enterRule(localContext, 602, MySqlParser.RULE_helpStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6647;
            this.match(MySqlParser.KW_HELP);
            this.state = 6648;
            this.match(MySqlParser.STRING_LITERAL);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public useStatement(): UseStatementContext {
        let localContext = new UseStatementContext(this.context, this.state);
        this.enterRule(localContext, 604, MySqlParser.RULE_useStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6650;
            this.match(MySqlParser.KW_USE);
            this.state = 6651;
            this.databaseName();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public signalStatement(): SignalStatementContext {
        let localContext = new SignalStatementContext(this.context, this.state);
        this.enterRule(localContext, 606, MySqlParser.RULE_signalStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6653;
            this.match(MySqlParser.KW_SIGNAL);
            this.state = 6661;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_SQLSTATE:
                {
                {
                this.state = 6654;
                this.match(MySqlParser.KW_SQLSTATE);
                this.state = 6656;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 682) {
                    {
                    this.state = 6655;
                    this.match(MySqlParser.KW_VALUE);
                    }
                }

                this.state = 6658;
                this.stringLiteral();
                }
                }
                break;
            case MySqlParser.ID:
                {
                this.state = 6659;
                this.match(MySqlParser.ID);
                }
                break;
            case MySqlParser.REVERSE_QUOTE_ID:
                {
                this.state = 6660;
                this.match(MySqlParser.REVERSE_QUOTE_ID);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 6672;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 960, this.context) ) {
            case 1:
                {
                this.state = 6663;
                this.match(MySqlParser.KW_SET);
                this.state = 6664;
                this.signalConditionInformation();
                this.state = 6669;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 6665;
                    this.match(MySqlParser.COMMA);
                    this.state = 6666;
                    this.signalConditionInformation();
                    }
                    }
                    this.state = 6671;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public resignalStatement(): ResignalStatementContext {
        let localContext = new ResignalStatementContext(this.context, this.state);
        this.enterRule(localContext, 608, MySqlParser.RULE_resignalStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6674;
            this.match(MySqlParser.KW_RESIGNAL);
            this.state = 6682;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_SQLSTATE:
                {
                {
                this.state = 6675;
                this.match(MySqlParser.KW_SQLSTATE);
                this.state = 6677;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 682) {
                    {
                    this.state = 6676;
                    this.match(MySqlParser.KW_VALUE);
                    }
                }

                this.state = 6679;
                this.stringLiteral();
                }
                }
                break;
            case MySqlParser.ID:
                {
                this.state = 6680;
                this.match(MySqlParser.ID);
                }
                break;
            case MySqlParser.REVERSE_QUOTE_ID:
                {
                this.state = 6681;
                this.match(MySqlParser.REVERSE_QUOTE_ID);
                }
                break;
            case MySqlParser.EOF:
            case MySqlParser.KW_ALTER:
            case MySqlParser.KW_ANALYZE:
            case MySqlParser.KW_CALL:
            case MySqlParser.KW_CHANGE:
            case MySqlParser.KW_CHECK:
            case MySqlParser.KW_CREATE:
            case MySqlParser.KW_DELETE:
            case MySqlParser.KW_DESC:
            case MySqlParser.KW_DESCRIBE:
            case MySqlParser.KW_DROP:
            case MySqlParser.KW_EXPLAIN:
            case MySqlParser.KW_GET:
            case MySqlParser.KW_GRANT:
            case MySqlParser.KW_INSERT:
            case MySqlParser.KW_KILL:
            case MySqlParser.KW_LOAD:
            case MySqlParser.KW_LOCK:
            case MySqlParser.KW_OPTIMIZE:
            case MySqlParser.KW_PURGE:
            case MySqlParser.KW_RELEASE:
            case MySqlParser.KW_RENAME:
            case MySqlParser.KW_REPLACE:
            case MySqlParser.KW_RESIGNAL:
            case MySqlParser.KW_REVOKE:
            case MySqlParser.KW_SELECT:
            case MySqlParser.KW_SET:
            case MySqlParser.KW_SHOW:
            case MySqlParser.KW_SIGNAL:
            case MySqlParser.KW_TABLE:
            case MySqlParser.KW_UNLOCK:
            case MySqlParser.KW_UPDATE:
            case MySqlParser.KW_USE:
            case MySqlParser.KW_VALUES:
            case MySqlParser.KW_WITH:
            case MySqlParser.KW_BEGIN:
            case MySqlParser.KW_BINLOG:
            case MySqlParser.KW_CACHE:
            case MySqlParser.KW_CHECKSUM:
            case MySqlParser.KW_COMMIT:
            case MySqlParser.KW_DEALLOCATE:
            case MySqlParser.KW_DO:
            case MySqlParser.KW_FLUSH:
            case MySqlParser.KW_HANDLER:
            case MySqlParser.KW_HELP:
            case MySqlParser.KW_IMPORT:
            case MySqlParser.KW_INSTALL:
            case MySqlParser.KW_PREPARE:
            case MySqlParser.KW_REPAIR:
            case MySqlParser.KW_RESET:
            case MySqlParser.KW_RESTART:
            case MySqlParser.KW_ROLLBACK:
            case MySqlParser.KW_SAVEPOINT:
            case MySqlParser.KW_START:
            case MySqlParser.KW_STOP:
            case MySqlParser.KW_TRUNCATE:
            case MySqlParser.KW_UNINSTALL:
            case MySqlParser.KW_XA:
            case MySqlParser.KW_CLONE:
            case MySqlParser.KW_EXECUTE:
            case MySqlParser.KW_SHUTDOWN:
            case MySqlParser.LR_BRACKET:
            case MySqlParser.SEMI:
                break;
            default:
                break;
            }
            this.state = 6693;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 964, this.context) ) {
            case 1:
                {
                this.state = 6684;
                this.match(MySqlParser.KW_SET);
                this.state = 6685;
                this.signalConditionInformation();
                this.state = 6690;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 6686;
                    this.match(MySqlParser.COMMA);
                    this.state = 6687;
                    this.signalConditionInformation();
                    }
                    }
                    this.state = 6692;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public signalConditionInformation(): SignalConditionInformationContext {
        let localContext = new SignalConditionInformationContext(this.context, this.state);
        this.enterRule(localContext, 610, MySqlParser.RULE_signalConditionInformation);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6695;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 332)) & ~0x1F) === 0 && ((1 << (_la - 332)) & 137887873) !== 0) || _la === 487 || _la === 495 || _la === 650 || _la === 657 || _la === 822 || _la === 832)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 6696;
            this.match(MySqlParser.EQUAL_SYMBOL);
            this.state = 6701;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.START_NATIONAL_STRING_LITERAL:
            case MySqlParser.STRING_LITERAL:
            case MySqlParser.STRING_CHARSET_NAME:
                {
                this.state = 6697;
                this.stringLiteral();
                }
                break;
            case MySqlParser.DECIMAL_LITERAL:
                {
                this.state = 6698;
                this.match(MySqlParser.DECIMAL_LITERAL);
                }
                break;
            case MySqlParser.LOCAL_ID:
            case MySqlParser.GLOBAL_ID:
                {
                this.state = 6699;
                this.mysqlVariable();
                }
                break;
            case MySqlParser.KW_ARRAY:
            case MySqlParser.KW_ATTRIBUTE:
            case MySqlParser.KW_BUCKETS:
            case MySqlParser.KW_CONDITION:
            case MySqlParser.KW_CURRENT:
            case MySqlParser.KW_CURRENT_USER:
            case MySqlParser.KW_DATABASE:
            case MySqlParser.KW_DEFAULT:
            case MySqlParser.KW_DIAGNOSTICS:
            case MySqlParser.KW_EMPTY:
            case MySqlParser.KW_ENFORCED:
            case MySqlParser.KW_EXCEPT:
            case MySqlParser.KW_GROUP:
            case MySqlParser.KW_IF:
            case MySqlParser.KW_INSERT:
            case MySqlParser.KW_LATERAL:
            case MySqlParser.KW_LEFT:
            case MySqlParser.KW_NUMBER:
            case MySqlParser.KW_OPTIONAL:
            case MySqlParser.KW_ORDER:
            case MySqlParser.KW_PRIMARY:
            case MySqlParser.KW_REPEAT:
            case MySqlParser.KW_REPLACE:
            case MySqlParser.KW_RIGHT:
            case MySqlParser.KW_SCHEMA:
            case MySqlParser.KW_SKIP_QUERY_REWRITE:
            case MySqlParser.KW_STACKED:
            case MySqlParser.KW_DATE:
            case MySqlParser.KW_TIME:
            case MySqlParser.KW_TIMESTAMP:
            case MySqlParser.KW_DATETIME:
            case MySqlParser.KW_YEAR:
            case MySqlParser.KW_BINARY:
            case MySqlParser.KW_TEXT:
            case MySqlParser.KW_ENUM:
            case MySqlParser.KW_SERIAL:
            case MySqlParser.KW_JSON_TABLE:
            case MySqlParser.KW_JSON_VALUE:
            case MySqlParser.KW_NESTED:
            case MySqlParser.KW_ORDINALITY:
            case MySqlParser.KW_PATH:
            case MySqlParser.KW_AVG:
            case MySqlParser.KW_BIT_AND:
            case MySqlParser.KW_BIT_OR:
            case MySqlParser.KW_BIT_XOR:
            case MySqlParser.KW_COUNT:
            case MySqlParser.KW_CUME_DIST:
            case MySqlParser.KW_DENSE_RANK:
            case MySqlParser.KW_FIRST_VALUE:
            case MySqlParser.KW_GROUP_CONCAT:
            case MySqlParser.KW_LAG:
            case MySqlParser.KW_LAST_VALUE:
            case MySqlParser.KW_LEAD:
            case MySqlParser.KW_MAX:
            case MySqlParser.KW_MIN:
            case MySqlParser.KW_NTILE:
            case MySqlParser.KW_NTH_VALUE:
            case MySqlParser.KW_PERCENT_RANK:
            case MySqlParser.KW_RANK:
            case MySqlParser.KW_ROW_NUMBER:
            case MySqlParser.KW_STD:
            case MySqlParser.KW_STDDEV:
            case MySqlParser.KW_STDDEV_POP:
            case MySqlParser.KW_STDDEV_SAMP:
            case MySqlParser.KW_SUM:
            case MySqlParser.KW_VAR_POP:
            case MySqlParser.KW_VAR_SAMP:
            case MySqlParser.KW_VARIANCE:
            case MySqlParser.KW_CURRENT_DATE:
            case MySqlParser.KW_CURRENT_TIME:
            case MySqlParser.KW_CURRENT_TIMESTAMP:
            case MySqlParser.KW_LOCALTIME:
            case MySqlParser.KW_CURDATE:
            case MySqlParser.KW_CURTIME:
            case MySqlParser.KW_DATE_ADD:
            case MySqlParser.KW_DATE_SUB:
            case MySqlParser.KW_LOCALTIMESTAMP:
            case MySqlParser.KW_NOW:
            case MySqlParser.KW_POSITION:
            case MySqlParser.KW_SUBSTR:
            case MySqlParser.KW_SUBSTRING:
            case MySqlParser.KW_SYSDATE:
            case MySqlParser.KW_TRIM:
            case MySqlParser.KW_UTC_DATE:
            case MySqlParser.KW_UTC_TIME:
            case MySqlParser.KW_UTC_TIMESTAMP:
            case MySqlParser.KW_ACCOUNT:
            case MySqlParser.KW_ACTION:
            case MySqlParser.KW_AFTER:
            case MySqlParser.KW_AGGREGATE:
            case MySqlParser.KW_ALGORITHM:
            case MySqlParser.KW_ANY:
            case MySqlParser.KW_AT:
            case MySqlParser.KW_AUTHORS:
            case MySqlParser.KW_AUTOCOMMIT:
            case MySqlParser.KW_AUTOEXTEND_SIZE:
            case MySqlParser.KW_AUTO_INCREMENT:
            case MySqlParser.KW_AVG_ROW_LENGTH:
            case MySqlParser.KW_BEGIN:
            case MySqlParser.KW_BINLOG:
            case MySqlParser.KW_BIT:
            case MySqlParser.KW_BLOCK:
            case MySqlParser.KW_BOOL:
            case MySqlParser.KW_BOOLEAN:
            case MySqlParser.KW_BTREE:
            case MySqlParser.KW_CACHE:
            case MySqlParser.KW_CASCADED:
            case MySqlParser.KW_CHAIN:
            case MySqlParser.KW_CHANGED:
            case MySqlParser.KW_CHANNEL:
            case MySqlParser.KW_CHECKSUM:
            case MySqlParser.KW_CIPHER:
            case MySqlParser.KW_CLASS_ORIGIN:
            case MySqlParser.KW_CLIENT:
            case MySqlParser.KW_CLOSE:
            case MySqlParser.KW_COALESCE:
            case MySqlParser.KW_CODE:
            case MySqlParser.KW_COLUMNS:
            case MySqlParser.KW_COLUMN_FORMAT:
            case MySqlParser.KW_COLUMN_NAME:
            case MySqlParser.KW_COMMENT:
            case MySqlParser.KW_COMMIT:
            case MySqlParser.KW_COMPACT:
            case MySqlParser.KW_COMPLETION:
            case MySqlParser.KW_COMPRESSED:
            case MySqlParser.KW_COMPRESSION:
            case MySqlParser.KW_CONCURRENT:
            case MySqlParser.KW_CONNECT:
            case MySqlParser.KW_CONNECTION:
            case MySqlParser.KW_CONSISTENT:
            case MySqlParser.KW_CONSTRAINT_CATALOG:
            case MySqlParser.KW_CONSTRAINT_SCHEMA:
            case MySqlParser.KW_CONSTRAINT_NAME:
            case MySqlParser.KW_CONTAINS:
            case MySqlParser.KW_CONTEXT:
            case MySqlParser.KW_CONTRIBUTORS:
            case MySqlParser.KW_COPY:
            case MySqlParser.KW_CPU:
            case MySqlParser.KW_CURSOR_NAME:
            case MySqlParser.KW_DATA:
            case MySqlParser.KW_DATAFILE:
            case MySqlParser.KW_DEALLOCATE:
            case MySqlParser.KW_DEFAULT_AUTH:
            case MySqlParser.KW_DEFINER:
            case MySqlParser.KW_DELAY_KEY_WRITE:
            case MySqlParser.KW_DES_KEY_FILE:
            case MySqlParser.KW_DIRECTORY:
            case MySqlParser.KW_DISABLE:
            case MySqlParser.KW_DISCARD:
            case MySqlParser.KW_DISK:
            case MySqlParser.KW_DO:
            case MySqlParser.KW_DUMPFILE:
            case MySqlParser.KW_DUPLICATE:
            case MySqlParser.KW_DYNAMIC:
            case MySqlParser.KW_ENABLE:
            case MySqlParser.KW_ENCRYPTION:
            case MySqlParser.KW_END:
            case MySqlParser.KW_ENDS:
            case MySqlParser.KW_ENGINE:
            case MySqlParser.KW_ENGINES:
            case MySqlParser.KW_ERROR:
            case MySqlParser.KW_ERRORS:
            case MySqlParser.KW_ESCAPE:
            case MySqlParser.KW_EVENT:
            case MySqlParser.KW_EVENTS:
            case MySqlParser.KW_EVERY:
            case MySqlParser.KW_EXCHANGE:
            case MySqlParser.KW_EXCLUSIVE:
            case MySqlParser.KW_EXPIRE:
            case MySqlParser.KW_EXPORT:
            case MySqlParser.KW_EXTENDED:
            case MySqlParser.KW_EXTENT_SIZE:
            case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
            case MySqlParser.KW_FAST:
            case MySqlParser.KW_FAULTS:
            case MySqlParser.KW_FIELDS:
            case MySqlParser.KW_FILE_BLOCK_SIZE:
            case MySqlParser.KW_FILTER:
            case MySqlParser.KW_FIRST:
            case MySqlParser.KW_FIXED:
            case MySqlParser.KW_FLUSH:
            case MySqlParser.KW_FOLLOWS:
            case MySqlParser.KW_FOUND:
            case MySqlParser.KW_FULL:
            case MySqlParser.KW_FUNCTION:
            case MySqlParser.KW_GENERAL:
            case MySqlParser.KW_GLOBAL:
            case MySqlParser.KW_GRANTS:
            case MySqlParser.KW_GROUP_REPLICATION:
            case MySqlParser.KW_HANDLER:
            case MySqlParser.KW_HASH:
            case MySqlParser.KW_HELP:
            case MySqlParser.KW_HISTORY:
            case MySqlParser.KW_HOST:
            case MySqlParser.KW_HOSTS:
            case MySqlParser.KW_IDENTIFIED:
            case MySqlParser.KW_IGNORE_SERVER_IDS:
            case MySqlParser.KW_IMPORT:
            case MySqlParser.KW_INDEXES:
            case MySqlParser.KW_INITIAL_SIZE:
            case MySqlParser.KW_INPLACE:
            case MySqlParser.KW_INSERT_METHOD:
            case MySqlParser.KW_INSTALL:
            case MySqlParser.KW_INSTANCE:
            case MySqlParser.KW_INSTANT:
            case MySqlParser.KW_INVISIBLE:
            case MySqlParser.KW_INVOKER:
            case MySqlParser.KW_IO:
            case MySqlParser.KW_IO_THREAD:
            case MySqlParser.KW_IPC:
            case MySqlParser.KW_ISOLATION:
            case MySqlParser.KW_ISSUER:
            case MySqlParser.KW_JSON:
            case MySqlParser.KW_KEY_BLOCK_SIZE:
            case MySqlParser.KW_LANGUAGE:
            case MySqlParser.KW_LAST:
            case MySqlParser.KW_LEAVES:
            case MySqlParser.KW_LESS:
            case MySqlParser.KW_LEVEL:
            case MySqlParser.KW_LIST:
            case MySqlParser.KW_LOCAL:
            case MySqlParser.KW_LOGFILE:
            case MySqlParser.KW_LOGS:
            case MySqlParser.KW_MASTER:
            case MySqlParser.KW_MASTER_AUTO_POSITION:
            case MySqlParser.KW_MASTER_CONNECT_RETRY:
            case MySqlParser.KW_MASTER_DELAY:
            case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
            case MySqlParser.KW_MASTER_HOST:
            case MySqlParser.KW_MASTER_LOG_FILE:
            case MySqlParser.KW_MASTER_LOG_POS:
            case MySqlParser.KW_MASTER_PASSWORD:
            case MySqlParser.KW_MASTER_PORT:
            case MySqlParser.KW_MASTER_RETRY_COUNT:
            case MySqlParser.KW_MASTER_SSL:
            case MySqlParser.KW_MASTER_SSL_CA:
            case MySqlParser.KW_MASTER_SSL_CAPATH:
            case MySqlParser.KW_MASTER_SSL_CERT:
            case MySqlParser.KW_MASTER_SSL_CIPHER:
            case MySqlParser.KW_MASTER_SSL_CRL:
            case MySqlParser.KW_MASTER_SSL_CRLPATH:
            case MySqlParser.KW_MASTER_SSL_KEY:
            case MySqlParser.KW_MASTER_TLS_VERSION:
            case MySqlParser.KW_MASTER_USER:
            case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
            case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
            case MySqlParser.KW_MAX_ROWS:
            case MySqlParser.KW_MAX_SIZE:
            case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
            case MySqlParser.KW_MAX_USER_CONNECTIONS:
            case MySqlParser.KW_MEDIUM:
            case MySqlParser.KW_MEMBER:
            case MySqlParser.KW_MERGE:
            case MySqlParser.KW_MESSAGE_TEXT:
            case MySqlParser.KW_MID:
            case MySqlParser.KW_MIGRATE:
            case MySqlParser.KW_MIN_ROWS:
            case MySqlParser.KW_MODE:
            case MySqlParser.KW_MODIFY:
            case MySqlParser.KW_MUTEX:
            case MySqlParser.KW_MYSQL:
            case MySqlParser.KW_MYSQL_ERRNO:
            case MySqlParser.KW_NAME:
            case MySqlParser.KW_NAMES:
            case MySqlParser.KW_NCHAR:
            case MySqlParser.KW_NEVER:
            case MySqlParser.KW_NEXT:
            case MySqlParser.KW_NO:
            case MySqlParser.KW_NOWAIT:
            case MySqlParser.KW_NODEGROUP:
            case MySqlParser.KW_NONE:
            case MySqlParser.KW_ODBC:
            case MySqlParser.KW_OFFLINE:
            case MySqlParser.KW_OFFSET:
            case MySqlParser.KW_OF:
            case MySqlParser.KW_OLD_PASSWORD:
            case MySqlParser.KW_ONE:
            case MySqlParser.KW_ONLINE:
            case MySqlParser.KW_ONLY:
            case MySqlParser.KW_OPEN:
            case MySqlParser.KW_OPTIMIZER_COSTS:
            case MySqlParser.KW_OPTIONS:
            case MySqlParser.KW_OWNER:
            case MySqlParser.KW_PACK_KEYS:
            case MySqlParser.KW_PAGE:
            case MySqlParser.KW_PAGE_CHECKSUM:
            case MySqlParser.KW_PARSER:
            case MySqlParser.KW_PARTIAL:
            case MySqlParser.KW_PARTITIONING:
            case MySqlParser.KW_PARTITIONS:
            case MySqlParser.KW_PASSWORD:
            case MySqlParser.KW_PASSWORD_LOCK_TIME:
            case MySqlParser.KW_PHASE:
            case MySqlParser.KW_PLUGIN:
            case MySqlParser.KW_PLUGIN_DIR:
            case MySqlParser.KW_PLUGINS:
            case MySqlParser.KW_PORT:
            case MySqlParser.KW_PRECEDES:
            case MySqlParser.KW_PREPARE:
            case MySqlParser.KW_PRESERVE:
            case MySqlParser.KW_PREV:
            case MySqlParser.KW_PROCESSLIST:
            case MySqlParser.KW_PROFILE:
            case MySqlParser.KW_PROFILES:
            case MySqlParser.KW_PROXY:
            case MySqlParser.KW_QUERY:
            case MySqlParser.KW_QUICK:
            case MySqlParser.KW_REBUILD:
            case MySqlParser.KW_RECOVER:
            case MySqlParser.KW_RECURSIVE:
            case MySqlParser.KW_REDO_BUFFER_SIZE:
            case MySqlParser.KW_REDUNDANT:
            case MySqlParser.KW_RELAY:
            case MySqlParser.KW_RELAY_LOG_FILE:
            case MySqlParser.KW_RELAY_LOG_POS:
            case MySqlParser.KW_RELAYLOG:
            case MySqlParser.KW_REMOVE:
            case MySqlParser.KW_REORGANIZE:
            case MySqlParser.KW_REPAIR:
            case MySqlParser.KW_REPLICATE_DO_DB:
            case MySqlParser.KW_REPLICATE_DO_TABLE:
            case MySqlParser.KW_REPLICATE_IGNORE_DB:
            case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATE_REWRITE_DB:
            case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
            case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATION:
            case MySqlParser.KW_RESET:
            case MySqlParser.KW_RESUME:
            case MySqlParser.KW_RETURNED_SQLSTATE:
            case MySqlParser.KW_RETURNS:
            case MySqlParser.KW_REUSE:
            case MySqlParser.KW_ROLE:
            case MySqlParser.KW_ROLLBACK:
            case MySqlParser.KW_ROLLUP:
            case MySqlParser.KW_ROTATE:
            case MySqlParser.KW_ROW:
            case MySqlParser.KW_ROWS:
            case MySqlParser.KW_ROW_FORMAT:
            case MySqlParser.KW_SAVEPOINT:
            case MySqlParser.KW_SCHEDULE:
            case MySqlParser.KW_SECURITY:
            case MySqlParser.KW_SERVER:
            case MySqlParser.KW_SESSION:
            case MySqlParser.KW_SHARE:
            case MySqlParser.KW_SHARED:
            case MySqlParser.KW_SIGNED:
            case MySqlParser.KW_SIMPLE:
            case MySqlParser.KW_SLAVE:
            case MySqlParser.KW_SLOW:
            case MySqlParser.KW_SNAPSHOT:
            case MySqlParser.KW_SOCKET:
            case MySqlParser.KW_SOME:
            case MySqlParser.KW_SONAME:
            case MySqlParser.KW_SOUNDS:
            case MySqlParser.KW_SOURCE:
            case MySqlParser.KW_SQL_AFTER_GTIDS:
            case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
            case MySqlParser.KW_SQL_BEFORE_GTIDS:
            case MySqlParser.KW_SQL_BUFFER_RESULT:
            case MySqlParser.KW_SQL_CACHE:
            case MySqlParser.KW_SQL_NO_CACHE:
            case MySqlParser.KW_SQL_THREAD:
            case MySqlParser.KW_START:
            case MySqlParser.KW_STARTS:
            case MySqlParser.KW_STATS_AUTO_RECALC:
            case MySqlParser.KW_STATS_PERSISTENT:
            case MySqlParser.KW_STATS_SAMPLE_PAGES:
            case MySqlParser.KW_STATUS:
            case MySqlParser.KW_STOP:
            case MySqlParser.KW_STORAGE:
            case MySqlParser.KW_STRING:
            case MySqlParser.KW_SUBCLASS_ORIGIN:
            case MySqlParser.KW_SUBJECT:
            case MySqlParser.KW_SUBPARTITION:
            case MySqlParser.KW_SUBPARTITIONS:
            case MySqlParser.KW_SUSPEND:
            case MySqlParser.KW_SWAPS:
            case MySqlParser.KW_SWITCHES:
            case MySqlParser.KW_TABLE_NAME:
            case MySqlParser.KW_TABLESPACE:
            case MySqlParser.KW_TABLE_TYPE:
            case MySqlParser.KW_TEMPORARY:
            case MySqlParser.KW_TEMPTABLE:
            case MySqlParser.KW_THAN:
            case MySqlParser.KW_TRADITIONAL:
            case MySqlParser.KW_TRANSACTION:
            case MySqlParser.KW_TRANSACTIONAL:
            case MySqlParser.KW_TRIGGERS:
            case MySqlParser.KW_TRUNCATE:
            case MySqlParser.KW_UNBOUNDED:
            case MySqlParser.KW_UNDEFINED:
            case MySqlParser.KW_UNDOFILE:
            case MySqlParser.KW_UNDO_BUFFER_SIZE:
            case MySqlParser.KW_UNINSTALL:
            case MySqlParser.KW_UNKNOWN:
            case MySqlParser.KW_UNTIL:
            case MySqlParser.KW_UPGRADE:
            case MySqlParser.KW_USER:
            case MySqlParser.KW_USE_FRM:
            case MySqlParser.KW_USER_RESOURCES:
            case MySqlParser.KW_VALIDATION:
            case MySqlParser.KW_VALUE:
            case MySqlParser.KW_VARIABLES:
            case MySqlParser.KW_VIEW:
            case MySqlParser.KW_VIRTUAL:
            case MySqlParser.KW_VISIBLE:
            case MySqlParser.KW_WAIT:
            case MySqlParser.KW_WARNINGS:
            case MySqlParser.KW_WITHOUT:
            case MySqlParser.KW_WORK:
            case MySqlParser.KW_WRAPPER:
            case MySqlParser.KW_X509:
            case MySqlParser.KW_XA:
            case MySqlParser.KW_XML:
            case MySqlParser.KW_QUARTER:
            case MySqlParser.KW_MONTH:
            case MySqlParser.KW_DAY:
            case MySqlParser.KW_HOUR:
            case MySqlParser.KW_MINUTE:
            case MySqlParser.KW_WEEK:
            case MySqlParser.KW_SECOND:
            case MySqlParser.KW_MICROSECOND:
            case MySqlParser.KW_ADMIN:
            case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
            case MySqlParser.KW_AUDIT_ADMIN:
            case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
            case MySqlParser.KW_BACKUP_ADMIN:
            case MySqlParser.KW_BINLOG_ADMIN:
            case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
            case MySqlParser.KW_CLONE_ADMIN:
            case MySqlParser.KW_CONNECTION_ADMIN:
            case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
            case MySqlParser.KW_EXECUTE:
            case MySqlParser.KW_FILE:
            case MySqlParser.KW_FIREWALL_ADMIN:
            case MySqlParser.KW_FIREWALL_EXEMPT:
            case MySqlParser.KW_FIREWALL_USER:
            case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
            case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
            case MySqlParser.KW_INVOKE:
            case MySqlParser.KW_LAMBDA:
            case MySqlParser.KW_NDB_STORED_USER:
            case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
            case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
            case MySqlParser.KW_PRIVILEGES:
            case MySqlParser.KW_PROCESS:
            case MySqlParser.KW_RELOAD:
            case MySqlParser.KW_REPLICATION_APPLIER:
            case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_USER:
            case MySqlParser.KW_ROLE_ADMIN:
            case MySqlParser.KW_ROUTINE:
            case MySqlParser.KW_S3:
            case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
            case MySqlParser.KW_SET_USER_ID:
            case MySqlParser.KW_SHOW_ROUTINE:
            case MySqlParser.KW_SHUTDOWN:
            case MySqlParser.KW_SUPER:
            case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
            case MySqlParser.KW_TABLES:
            case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
            case MySqlParser.KW_VERSION_TOKEN_ADMIN:
            case MySqlParser.KW_XA_RECOVER_ADMIN:
            case MySqlParser.KW_ARMSCII8:
            case MySqlParser.KW_ASCII:
            case MySqlParser.KW_BIG5:
            case MySqlParser.KW_CP1250:
            case MySqlParser.KW_CP1251:
            case MySqlParser.KW_CP1256:
            case MySqlParser.KW_CP1257:
            case MySqlParser.KW_CP850:
            case MySqlParser.KW_CP852:
            case MySqlParser.KW_CP866:
            case MySqlParser.KW_CP932:
            case MySqlParser.KW_DEC8:
            case MySqlParser.KW_EUCJPMS:
            case MySqlParser.KW_EUCKR:
            case MySqlParser.KW_GB18030:
            case MySqlParser.KW_GB2312:
            case MySqlParser.KW_GBK:
            case MySqlParser.KW_GEOSTD8:
            case MySqlParser.KW_GREEK:
            case MySqlParser.KW_HEBREW:
            case MySqlParser.KW_HP8:
            case MySqlParser.KW_KEYBCS2:
            case MySqlParser.KW_KOI8R:
            case MySqlParser.KW_KOI8U:
            case MySqlParser.KW_LATIN1:
            case MySqlParser.KW_LATIN2:
            case MySqlParser.KW_LATIN5:
            case MySqlParser.KW_LATIN7:
            case MySqlParser.KW_MACCE:
            case MySqlParser.KW_MACROMAN:
            case MySqlParser.KW_SJIS:
            case MySqlParser.KW_SWE7:
            case MySqlParser.KW_TIS620:
            case MySqlParser.KW_UCS2:
            case MySqlParser.KW_UJIS:
            case MySqlParser.KW_UTF16:
            case MySqlParser.KW_UTF16LE:
            case MySqlParser.KW_UTF32:
            case MySqlParser.KW_UTF8:
            case MySqlParser.KW_UTF8MB3:
            case MySqlParser.KW_UTF8MB4:
            case MySqlParser.KW_ARCHIVE:
            case MySqlParser.KW_BLACKHOLE:
            case MySqlParser.KW_CSV:
            case MySqlParser.KW_FEDERATED:
            case MySqlParser.KW_INNODB:
            case MySqlParser.KW_MEMORY:
            case MySqlParser.KW_MRG_MYISAM:
            case MySqlParser.KW_MYISAM:
            case MySqlParser.KW_NDB:
            case MySqlParser.KW_NDBCLUSTER:
            case MySqlParser.KW_PERFORMANCE_SCHEMA:
            case MySqlParser.KW_TOKUDB:
            case MySqlParser.KW_REPEATABLE:
            case MySqlParser.KW_COMMITTED:
            case MySqlParser.KW_UNCOMMITTED:
            case MySqlParser.KW_SERIALIZABLE:
            case MySqlParser.KW_GEOMETRYCOLLECTION:
            case MySqlParser.KW_LINESTRING:
            case MySqlParser.KW_MULTILINESTRING:
            case MySqlParser.KW_MULTIPOINT:
            case MySqlParser.KW_MULTIPOLYGON:
            case MySqlParser.KW_POINT:
            case MySqlParser.KW_POLYGON:
            case MySqlParser.KW_CATALOG_NAME:
            case MySqlParser.KW_CHARSET:
            case MySqlParser.KW_COLLATION:
            case MySqlParser.KW_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_FORMAT:
            case MySqlParser.KW_GET_FORMAT:
            case MySqlParser.KW_RANDOM:
            case MySqlParser.KW_REVERSE:
            case MySqlParser.KW_ROW_COUNT:
            case MySqlParser.KW_SCHEMA_NAME:
            case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_SRID:
            case MySqlParser.KW_SYSTEM_USER:
            case MySqlParser.KW_TP_CONNECTION_ADMIN:
            case MySqlParser.KW_WEIGHT_STRING:
            case MySqlParser.MOD:
            case MySqlParser.ID:
                {
                this.state = 6700;
                this.simpleId();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public withStatement(): WithStatementContext {
        let localContext = new WithStatementContext(this.context, this.state);
        this.enterRule(localContext, 612, MySqlParser.RULE_withStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6703;
            this.match(MySqlParser.KW_WITH);
            this.state = 6705;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 966, this.context) ) {
            case 1:
                {
                this.state = 6704;
                this.match(MySqlParser.KW_RECURSIVE);
                }
                break;
            }
            this.state = 6707;
            this.commonTableExpressions();
            this.state = 6712;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 6708;
                this.match(MySqlParser.COMMA);
                this.state = 6709;
                this.commonTableExpressions();
                }
                }
                this.state = 6714;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tableStatement(): TableStatementContext {
        let localContext = new TableStatementContext(this.context, this.state);
        this.enterRule(localContext, 614, MySqlParser.RULE_tableStatement);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6715;
            this.match(MySqlParser.KW_TABLE);
            this.state = 6716;
            this.tableName();
            this.state = 6718;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 968, this.context) ) {
            case 1:
                {
                this.state = 6717;
                this.orderByClause();
                }
                break;
            }
            this.state = 6721;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 969, this.context) ) {
            case 1:
                {
                this.state = 6720;
                this.limitClause();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public diagnosticsStatement(): DiagnosticsStatementContext {
        let localContext = new DiagnosticsStatementContext(this.context, this.state);
        this.enterRule(localContext, 616, MySqlParser.RULE_diagnosticsStatement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6723;
            this.match(MySqlParser.KW_GET);
            this.state = 6725;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 36 || _la === 170) {
                {
                this.state = 6724;
                _la = this.tokenStream.LA(1);
                if(!(_la === 36 || _la === 170)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            this.state = 6727;
            this.match(MySqlParser.KW_DIAGNOSTICS);
            this.state = 6759;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 974, this.context) ) {
            case 1:
                {
                {
                this.state = 6728;
                this.variableClause();
                this.state = 6729;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 6730;
                _la = this.tokenStream.LA(1);
                if(!(_la === 117 || _la === 831)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 6738;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 6731;
                    this.match(MySqlParser.COMMA);
                    this.state = 6732;
                    this.variableClause();
                    this.state = 6733;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    this.state = 6734;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 117 || _la === 831)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                    }
                    this.state = 6740;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                }
                break;
            case 2:
                {
                {
                this.state = 6741;
                this.match(MySqlParser.KW_CONDITION);
                this.state = 6744;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.ZERO_DECIMAL:
                case MySqlParser.ONE_DECIMAL:
                case MySqlParser.TWO_DECIMAL:
                case MySqlParser.THREE_DECIMAL:
                case MySqlParser.DECIMAL_LITERAL:
                case MySqlParser.REAL_LITERAL:
                    {
                    this.state = 6742;
                    this.decimalLiteral();
                    }
                    break;
                case MySqlParser.KW_ARRAY:
                case MySqlParser.KW_ATTRIBUTE:
                case MySqlParser.KW_BUCKETS:
                case MySqlParser.KW_CONDITION:
                case MySqlParser.KW_CURRENT:
                case MySqlParser.KW_CURRENT_USER:
                case MySqlParser.KW_DATABASE:
                case MySqlParser.KW_DEFAULT:
                case MySqlParser.KW_DIAGNOSTICS:
                case MySqlParser.KW_EMPTY:
                case MySqlParser.KW_ENFORCED:
                case MySqlParser.KW_EXCEPT:
                case MySqlParser.KW_GROUP:
                case MySqlParser.KW_IF:
                case MySqlParser.KW_INSERT:
                case MySqlParser.KW_LATERAL:
                case MySqlParser.KW_LEFT:
                case MySqlParser.KW_NUMBER:
                case MySqlParser.KW_OPTIONAL:
                case MySqlParser.KW_ORDER:
                case MySqlParser.KW_PRIMARY:
                case MySqlParser.KW_REPEAT:
                case MySqlParser.KW_REPLACE:
                case MySqlParser.KW_RIGHT:
                case MySqlParser.KW_SCHEMA:
                case MySqlParser.KW_SKIP_QUERY_REWRITE:
                case MySqlParser.KW_STACKED:
                case MySqlParser.KW_DATE:
                case MySqlParser.KW_TIME:
                case MySqlParser.KW_TIMESTAMP:
                case MySqlParser.KW_DATETIME:
                case MySqlParser.KW_YEAR:
                case MySqlParser.KW_BINARY:
                case MySqlParser.KW_TEXT:
                case MySqlParser.KW_ENUM:
                case MySqlParser.KW_SERIAL:
                case MySqlParser.KW_JSON_TABLE:
                case MySqlParser.KW_JSON_VALUE:
                case MySqlParser.KW_NESTED:
                case MySqlParser.KW_ORDINALITY:
                case MySqlParser.KW_PATH:
                case MySqlParser.KW_AVG:
                case MySqlParser.KW_BIT_AND:
                case MySqlParser.KW_BIT_OR:
                case MySqlParser.KW_BIT_XOR:
                case MySqlParser.KW_COUNT:
                case MySqlParser.KW_CUME_DIST:
                case MySqlParser.KW_DENSE_RANK:
                case MySqlParser.KW_FIRST_VALUE:
                case MySqlParser.KW_GROUP_CONCAT:
                case MySqlParser.KW_LAG:
                case MySqlParser.KW_LAST_VALUE:
                case MySqlParser.KW_LEAD:
                case MySqlParser.KW_MAX:
                case MySqlParser.KW_MIN:
                case MySqlParser.KW_NTILE:
                case MySqlParser.KW_NTH_VALUE:
                case MySqlParser.KW_PERCENT_RANK:
                case MySqlParser.KW_RANK:
                case MySqlParser.KW_ROW_NUMBER:
                case MySqlParser.KW_STD:
                case MySqlParser.KW_STDDEV:
                case MySqlParser.KW_STDDEV_POP:
                case MySqlParser.KW_STDDEV_SAMP:
                case MySqlParser.KW_SUM:
                case MySqlParser.KW_VAR_POP:
                case MySqlParser.KW_VAR_SAMP:
                case MySqlParser.KW_VARIANCE:
                case MySqlParser.KW_CURRENT_DATE:
                case MySqlParser.KW_CURRENT_TIME:
                case MySqlParser.KW_CURRENT_TIMESTAMP:
                case MySqlParser.KW_LOCALTIME:
                case MySqlParser.KW_CURDATE:
                case MySqlParser.KW_CURTIME:
                case MySqlParser.KW_DATE_ADD:
                case MySqlParser.KW_DATE_SUB:
                case MySqlParser.KW_LOCALTIMESTAMP:
                case MySqlParser.KW_NOW:
                case MySqlParser.KW_POSITION:
                case MySqlParser.KW_SUBSTR:
                case MySqlParser.KW_SUBSTRING:
                case MySqlParser.KW_SYSDATE:
                case MySqlParser.KW_TRIM:
                case MySqlParser.KW_UTC_DATE:
                case MySqlParser.KW_UTC_TIME:
                case MySqlParser.KW_UTC_TIMESTAMP:
                case MySqlParser.KW_ACCOUNT:
                case MySqlParser.KW_ACTION:
                case MySqlParser.KW_AFTER:
                case MySqlParser.KW_AGGREGATE:
                case MySqlParser.KW_ALGORITHM:
                case MySqlParser.KW_ANY:
                case MySqlParser.KW_AT:
                case MySqlParser.KW_AUTHORS:
                case MySqlParser.KW_AUTOCOMMIT:
                case MySqlParser.KW_AUTOEXTEND_SIZE:
                case MySqlParser.KW_AUTO_INCREMENT:
                case MySqlParser.KW_AVG_ROW_LENGTH:
                case MySqlParser.KW_BEGIN:
                case MySqlParser.KW_BINLOG:
                case MySqlParser.KW_BIT:
                case MySqlParser.KW_BLOCK:
                case MySqlParser.KW_BOOL:
                case MySqlParser.KW_BOOLEAN:
                case MySqlParser.KW_BTREE:
                case MySqlParser.KW_CACHE:
                case MySqlParser.KW_CASCADED:
                case MySqlParser.KW_CHAIN:
                case MySqlParser.KW_CHANGED:
                case MySqlParser.KW_CHANNEL:
                case MySqlParser.KW_CHECKSUM:
                case MySqlParser.KW_CIPHER:
                case MySqlParser.KW_CLASS_ORIGIN:
                case MySqlParser.KW_CLIENT:
                case MySqlParser.KW_CLOSE:
                case MySqlParser.KW_COALESCE:
                case MySqlParser.KW_CODE:
                case MySqlParser.KW_COLUMNS:
                case MySqlParser.KW_COLUMN_FORMAT:
                case MySqlParser.KW_COLUMN_NAME:
                case MySqlParser.KW_COMMENT:
                case MySqlParser.KW_COMMIT:
                case MySqlParser.KW_COMPACT:
                case MySqlParser.KW_COMPLETION:
                case MySqlParser.KW_COMPRESSED:
                case MySqlParser.KW_COMPRESSION:
                case MySqlParser.KW_CONCURRENT:
                case MySqlParser.KW_CONNECT:
                case MySqlParser.KW_CONNECTION:
                case MySqlParser.KW_CONSISTENT:
                case MySqlParser.KW_CONSTRAINT_CATALOG:
                case MySqlParser.KW_CONSTRAINT_SCHEMA:
                case MySqlParser.KW_CONSTRAINT_NAME:
                case MySqlParser.KW_CONTAINS:
                case MySqlParser.KW_CONTEXT:
                case MySqlParser.KW_CONTRIBUTORS:
                case MySqlParser.KW_COPY:
                case MySqlParser.KW_CPU:
                case MySqlParser.KW_CURSOR_NAME:
                case MySqlParser.KW_DATA:
                case MySqlParser.KW_DATAFILE:
                case MySqlParser.KW_DEALLOCATE:
                case MySqlParser.KW_DEFAULT_AUTH:
                case MySqlParser.KW_DEFINER:
                case MySqlParser.KW_DELAY_KEY_WRITE:
                case MySqlParser.KW_DES_KEY_FILE:
                case MySqlParser.KW_DIRECTORY:
                case MySqlParser.KW_DISABLE:
                case MySqlParser.KW_DISCARD:
                case MySqlParser.KW_DISK:
                case MySqlParser.KW_DO:
                case MySqlParser.KW_DUMPFILE:
                case MySqlParser.KW_DUPLICATE:
                case MySqlParser.KW_DYNAMIC:
                case MySqlParser.KW_ENABLE:
                case MySqlParser.KW_ENCRYPTION:
                case MySqlParser.KW_END:
                case MySqlParser.KW_ENDS:
                case MySqlParser.KW_ENGINE:
                case MySqlParser.KW_ENGINES:
                case MySqlParser.KW_ERROR:
                case MySqlParser.KW_ERRORS:
                case MySqlParser.KW_ESCAPE:
                case MySqlParser.KW_EVENT:
                case MySqlParser.KW_EVENTS:
                case MySqlParser.KW_EVERY:
                case MySqlParser.KW_EXCHANGE:
                case MySqlParser.KW_EXCLUSIVE:
                case MySqlParser.KW_EXPIRE:
                case MySqlParser.KW_EXPORT:
                case MySqlParser.KW_EXTENDED:
                case MySqlParser.KW_EXTENT_SIZE:
                case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
                case MySqlParser.KW_FAST:
                case MySqlParser.KW_FAULTS:
                case MySqlParser.KW_FIELDS:
                case MySqlParser.KW_FILE_BLOCK_SIZE:
                case MySqlParser.KW_FILTER:
                case MySqlParser.KW_FIRST:
                case MySqlParser.KW_FIXED:
                case MySqlParser.KW_FLUSH:
                case MySqlParser.KW_FOLLOWS:
                case MySqlParser.KW_FOUND:
                case MySqlParser.KW_FULL:
                case MySqlParser.KW_FUNCTION:
                case MySqlParser.KW_GENERAL:
                case MySqlParser.KW_GLOBAL:
                case MySqlParser.KW_GRANTS:
                case MySqlParser.KW_GROUP_REPLICATION:
                case MySqlParser.KW_HANDLER:
                case MySqlParser.KW_HASH:
                case MySqlParser.KW_HELP:
                case MySqlParser.KW_HISTORY:
                case MySqlParser.KW_HOST:
                case MySqlParser.KW_HOSTS:
                case MySqlParser.KW_IDENTIFIED:
                case MySqlParser.KW_IGNORE_SERVER_IDS:
                case MySqlParser.KW_IMPORT:
                case MySqlParser.KW_INDEXES:
                case MySqlParser.KW_INITIAL_SIZE:
                case MySqlParser.KW_INPLACE:
                case MySqlParser.KW_INSERT_METHOD:
                case MySqlParser.KW_INSTALL:
                case MySqlParser.KW_INSTANCE:
                case MySqlParser.KW_INSTANT:
                case MySqlParser.KW_INVISIBLE:
                case MySqlParser.KW_INVOKER:
                case MySqlParser.KW_IO:
                case MySqlParser.KW_IO_THREAD:
                case MySqlParser.KW_IPC:
                case MySqlParser.KW_ISOLATION:
                case MySqlParser.KW_ISSUER:
                case MySqlParser.KW_JSON:
                case MySqlParser.KW_KEY_BLOCK_SIZE:
                case MySqlParser.KW_LANGUAGE:
                case MySqlParser.KW_LAST:
                case MySqlParser.KW_LEAVES:
                case MySqlParser.KW_LESS:
                case MySqlParser.KW_LEVEL:
                case MySqlParser.KW_LIST:
                case MySqlParser.KW_LOCAL:
                case MySqlParser.KW_LOGFILE:
                case MySqlParser.KW_LOGS:
                case MySqlParser.KW_MASTER:
                case MySqlParser.KW_MASTER_AUTO_POSITION:
                case MySqlParser.KW_MASTER_CONNECT_RETRY:
                case MySqlParser.KW_MASTER_DELAY:
                case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
                case MySqlParser.KW_MASTER_HOST:
                case MySqlParser.KW_MASTER_LOG_FILE:
                case MySqlParser.KW_MASTER_LOG_POS:
                case MySqlParser.KW_MASTER_PASSWORD:
                case MySqlParser.KW_MASTER_PORT:
                case MySqlParser.KW_MASTER_RETRY_COUNT:
                case MySqlParser.KW_MASTER_SSL:
                case MySqlParser.KW_MASTER_SSL_CA:
                case MySqlParser.KW_MASTER_SSL_CAPATH:
                case MySqlParser.KW_MASTER_SSL_CERT:
                case MySqlParser.KW_MASTER_SSL_CIPHER:
                case MySqlParser.KW_MASTER_SSL_CRL:
                case MySqlParser.KW_MASTER_SSL_CRLPATH:
                case MySqlParser.KW_MASTER_SSL_KEY:
                case MySqlParser.KW_MASTER_TLS_VERSION:
                case MySqlParser.KW_MASTER_USER:
                case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
                case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
                case MySqlParser.KW_MAX_ROWS:
                case MySqlParser.KW_MAX_SIZE:
                case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
                case MySqlParser.KW_MAX_USER_CONNECTIONS:
                case MySqlParser.KW_MEDIUM:
                case MySqlParser.KW_MEMBER:
                case MySqlParser.KW_MERGE:
                case MySqlParser.KW_MESSAGE_TEXT:
                case MySqlParser.KW_MID:
                case MySqlParser.KW_MIGRATE:
                case MySqlParser.KW_MIN_ROWS:
                case MySqlParser.KW_MODE:
                case MySqlParser.KW_MODIFY:
                case MySqlParser.KW_MUTEX:
                case MySqlParser.KW_MYSQL:
                case MySqlParser.KW_MYSQL_ERRNO:
                case MySqlParser.KW_NAME:
                case MySqlParser.KW_NAMES:
                case MySqlParser.KW_NCHAR:
                case MySqlParser.KW_NEVER:
                case MySqlParser.KW_NEXT:
                case MySqlParser.KW_NO:
                case MySqlParser.KW_NOWAIT:
                case MySqlParser.KW_NODEGROUP:
                case MySqlParser.KW_NONE:
                case MySqlParser.KW_ODBC:
                case MySqlParser.KW_OFFLINE:
                case MySqlParser.KW_OFFSET:
                case MySqlParser.KW_OF:
                case MySqlParser.KW_OLD_PASSWORD:
                case MySqlParser.KW_ONE:
                case MySqlParser.KW_ONLINE:
                case MySqlParser.KW_ONLY:
                case MySqlParser.KW_OPEN:
                case MySqlParser.KW_OPTIMIZER_COSTS:
                case MySqlParser.KW_OPTIONS:
                case MySqlParser.KW_OWNER:
                case MySqlParser.KW_PACK_KEYS:
                case MySqlParser.KW_PAGE:
                case MySqlParser.KW_PAGE_CHECKSUM:
                case MySqlParser.KW_PARSER:
                case MySqlParser.KW_PARTIAL:
                case MySqlParser.KW_PARTITIONING:
                case MySqlParser.KW_PARTITIONS:
                case MySqlParser.KW_PASSWORD:
                case MySqlParser.KW_PASSWORD_LOCK_TIME:
                case MySqlParser.KW_PERSIST:
                case MySqlParser.KW_PERSIST_ONLY:
                case MySqlParser.KW_PHASE:
                case MySqlParser.KW_PLUGIN:
                case MySqlParser.KW_PLUGIN_DIR:
                case MySqlParser.KW_PLUGINS:
                case MySqlParser.KW_PORT:
                case MySqlParser.KW_PRECEDES:
                case MySqlParser.KW_PREPARE:
                case MySqlParser.KW_PRESERVE:
                case MySqlParser.KW_PREV:
                case MySqlParser.KW_PROCESSLIST:
                case MySqlParser.KW_PROFILE:
                case MySqlParser.KW_PROFILES:
                case MySqlParser.KW_PROXY:
                case MySqlParser.KW_QUERY:
                case MySqlParser.KW_QUICK:
                case MySqlParser.KW_REBUILD:
                case MySqlParser.KW_RECOVER:
                case MySqlParser.KW_RECURSIVE:
                case MySqlParser.KW_REDO_BUFFER_SIZE:
                case MySqlParser.KW_REDUNDANT:
                case MySqlParser.KW_RELAY:
                case MySqlParser.KW_RELAY_LOG_FILE:
                case MySqlParser.KW_RELAY_LOG_POS:
                case MySqlParser.KW_RELAYLOG:
                case MySqlParser.KW_REMOVE:
                case MySqlParser.KW_REORGANIZE:
                case MySqlParser.KW_REPAIR:
                case MySqlParser.KW_REPLICATE_DO_DB:
                case MySqlParser.KW_REPLICATE_DO_TABLE:
                case MySqlParser.KW_REPLICATE_IGNORE_DB:
                case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATE_REWRITE_DB:
                case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
                case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
                case MySqlParser.KW_REPLICATION:
                case MySqlParser.KW_RESET:
                case MySqlParser.KW_RESUME:
                case MySqlParser.KW_RETURNED_SQLSTATE:
                case MySqlParser.KW_RETURNS:
                case MySqlParser.KW_REUSE:
                case MySqlParser.KW_ROLE:
                case MySqlParser.KW_ROLLBACK:
                case MySqlParser.KW_ROLLUP:
                case MySqlParser.KW_ROTATE:
                case MySqlParser.KW_ROW:
                case MySqlParser.KW_ROWS:
                case MySqlParser.KW_ROW_FORMAT:
                case MySqlParser.KW_SAVEPOINT:
                case MySqlParser.KW_SCHEDULE:
                case MySqlParser.KW_SECURITY:
                case MySqlParser.KW_SERVER:
                case MySqlParser.KW_SESSION:
                case MySqlParser.KW_SHARE:
                case MySqlParser.KW_SHARED:
                case MySqlParser.KW_SIGNED:
                case MySqlParser.KW_SIMPLE:
                case MySqlParser.KW_SLAVE:
                case MySqlParser.KW_SLOW:
                case MySqlParser.KW_SNAPSHOT:
                case MySqlParser.KW_SOCKET:
                case MySqlParser.KW_SOME:
                case MySqlParser.KW_SONAME:
                case MySqlParser.KW_SOUNDS:
                case MySqlParser.KW_SOURCE:
                case MySqlParser.KW_SQL_AFTER_GTIDS:
                case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
                case MySqlParser.KW_SQL_BEFORE_GTIDS:
                case MySqlParser.KW_SQL_BUFFER_RESULT:
                case MySqlParser.KW_SQL_CACHE:
                case MySqlParser.KW_SQL_NO_CACHE:
                case MySqlParser.KW_SQL_THREAD:
                case MySqlParser.KW_START:
                case MySqlParser.KW_STARTS:
                case MySqlParser.KW_STATS_AUTO_RECALC:
                case MySqlParser.KW_STATS_PERSISTENT:
                case MySqlParser.KW_STATS_SAMPLE_PAGES:
                case MySqlParser.KW_STATUS:
                case MySqlParser.KW_STOP:
                case MySqlParser.KW_STORAGE:
                case MySqlParser.KW_STRING:
                case MySqlParser.KW_SUBCLASS_ORIGIN:
                case MySqlParser.KW_SUBJECT:
                case MySqlParser.KW_SUBPARTITION:
                case MySqlParser.KW_SUBPARTITIONS:
                case MySqlParser.KW_SUSPEND:
                case MySqlParser.KW_SWAPS:
                case MySqlParser.KW_SWITCHES:
                case MySqlParser.KW_TABLE_NAME:
                case MySqlParser.KW_TABLESPACE:
                case MySqlParser.KW_TABLE_TYPE:
                case MySqlParser.KW_TEMPORARY:
                case MySqlParser.KW_TEMPTABLE:
                case MySqlParser.KW_THAN:
                case MySqlParser.KW_TRADITIONAL:
                case MySqlParser.KW_TRANSACTION:
                case MySqlParser.KW_TRANSACTIONAL:
                case MySqlParser.KW_TRIGGERS:
                case MySqlParser.KW_TRUNCATE:
                case MySqlParser.KW_UNBOUNDED:
                case MySqlParser.KW_UNDEFINED:
                case MySqlParser.KW_UNDOFILE:
                case MySqlParser.KW_UNDO_BUFFER_SIZE:
                case MySqlParser.KW_UNINSTALL:
                case MySqlParser.KW_UNKNOWN:
                case MySqlParser.KW_UNTIL:
                case MySqlParser.KW_UPGRADE:
                case MySqlParser.KW_USER:
                case MySqlParser.KW_USE_FRM:
                case MySqlParser.KW_USER_RESOURCES:
                case MySqlParser.KW_VALIDATION:
                case MySqlParser.KW_VALUE:
                case MySqlParser.KW_VARIABLES:
                case MySqlParser.KW_VIEW:
                case MySqlParser.KW_VIRTUAL:
                case MySqlParser.KW_VISIBLE:
                case MySqlParser.KW_WAIT:
                case MySqlParser.KW_WARNINGS:
                case MySqlParser.KW_WITHOUT:
                case MySqlParser.KW_WORK:
                case MySqlParser.KW_WRAPPER:
                case MySqlParser.KW_X509:
                case MySqlParser.KW_XA:
                case MySqlParser.KW_XML:
                case MySqlParser.KW_QUARTER:
                case MySqlParser.KW_MONTH:
                case MySqlParser.KW_DAY:
                case MySqlParser.KW_HOUR:
                case MySqlParser.KW_MINUTE:
                case MySqlParser.KW_WEEK:
                case MySqlParser.KW_SECOND:
                case MySqlParser.KW_MICROSECOND:
                case MySqlParser.KW_ADMIN:
                case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
                case MySqlParser.KW_AUDIT_ADMIN:
                case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
                case MySqlParser.KW_BACKUP_ADMIN:
                case MySqlParser.KW_BINLOG_ADMIN:
                case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
                case MySqlParser.KW_CLONE_ADMIN:
                case MySqlParser.KW_CONNECTION_ADMIN:
                case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
                case MySqlParser.KW_EXECUTE:
                case MySqlParser.KW_FILE:
                case MySqlParser.KW_FIREWALL_ADMIN:
                case MySqlParser.KW_FIREWALL_EXEMPT:
                case MySqlParser.KW_FIREWALL_USER:
                case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
                case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
                case MySqlParser.KW_INVOKE:
                case MySqlParser.KW_LAMBDA:
                case MySqlParser.KW_NDB_STORED_USER:
                case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
                case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
                case MySqlParser.KW_PRIVILEGES:
                case MySqlParser.KW_PROCESS:
                case MySqlParser.KW_RELOAD:
                case MySqlParser.KW_REPLICATION_APPLIER:
                case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
                case MySqlParser.KW_RESOURCE_GROUP_USER:
                case MySqlParser.KW_ROLE_ADMIN:
                case MySqlParser.KW_ROUTINE:
                case MySqlParser.KW_S3:
                case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
                case MySqlParser.KW_SET_USER_ID:
                case MySqlParser.KW_SHOW_ROUTINE:
                case MySqlParser.KW_SHUTDOWN:
                case MySqlParser.KW_SUPER:
                case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
                case MySqlParser.KW_TABLES:
                case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
                case MySqlParser.KW_VERSION_TOKEN_ADMIN:
                case MySqlParser.KW_XA_RECOVER_ADMIN:
                case MySqlParser.KW_ARMSCII8:
                case MySqlParser.KW_ASCII:
                case MySqlParser.KW_BIG5:
                case MySqlParser.KW_CP1250:
                case MySqlParser.KW_CP1251:
                case MySqlParser.KW_CP1256:
                case MySqlParser.KW_CP1257:
                case MySqlParser.KW_CP850:
                case MySqlParser.KW_CP852:
                case MySqlParser.KW_CP866:
                case MySqlParser.KW_CP932:
                case MySqlParser.KW_DEC8:
                case MySqlParser.KW_EUCJPMS:
                case MySqlParser.KW_EUCKR:
                case MySqlParser.KW_GB18030:
                case MySqlParser.KW_GB2312:
                case MySqlParser.KW_GBK:
                case MySqlParser.KW_GEOSTD8:
                case MySqlParser.KW_GREEK:
                case MySqlParser.KW_HEBREW:
                case MySqlParser.KW_HP8:
                case MySqlParser.KW_KEYBCS2:
                case MySqlParser.KW_KOI8R:
                case MySqlParser.KW_KOI8U:
                case MySqlParser.KW_LATIN1:
                case MySqlParser.KW_LATIN2:
                case MySqlParser.KW_LATIN5:
                case MySqlParser.KW_LATIN7:
                case MySqlParser.KW_MACCE:
                case MySqlParser.KW_MACROMAN:
                case MySqlParser.KW_SJIS:
                case MySqlParser.KW_SWE7:
                case MySqlParser.KW_TIS620:
                case MySqlParser.KW_UCS2:
                case MySqlParser.KW_UJIS:
                case MySqlParser.KW_UTF16:
                case MySqlParser.KW_UTF16LE:
                case MySqlParser.KW_UTF32:
                case MySqlParser.KW_UTF8:
                case MySqlParser.KW_UTF8MB3:
                case MySqlParser.KW_UTF8MB4:
                case MySqlParser.KW_ARCHIVE:
                case MySqlParser.KW_BLACKHOLE:
                case MySqlParser.KW_CSV:
                case MySqlParser.KW_FEDERATED:
                case MySqlParser.KW_INNODB:
                case MySqlParser.KW_MEMORY:
                case MySqlParser.KW_MRG_MYISAM:
                case MySqlParser.KW_MYISAM:
                case MySqlParser.KW_NDB:
                case MySqlParser.KW_NDBCLUSTER:
                case MySqlParser.KW_PERFORMANCE_SCHEMA:
                case MySqlParser.KW_TOKUDB:
                case MySqlParser.KW_REPEATABLE:
                case MySqlParser.KW_COMMITTED:
                case MySqlParser.KW_UNCOMMITTED:
                case MySqlParser.KW_SERIALIZABLE:
                case MySqlParser.KW_GEOMETRYCOLLECTION:
                case MySqlParser.KW_LINESTRING:
                case MySqlParser.KW_MULTILINESTRING:
                case MySqlParser.KW_MULTIPOINT:
                case MySqlParser.KW_MULTIPOLYGON:
                case MySqlParser.KW_POINT:
                case MySqlParser.KW_POLYGON:
                case MySqlParser.KW_CATALOG_NAME:
                case MySqlParser.KW_CHARSET:
                case MySqlParser.KW_COLLATION:
                case MySqlParser.KW_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_FORMAT:
                case MySqlParser.KW_GET_FORMAT:
                case MySqlParser.KW_RANDOM:
                case MySqlParser.KW_REVERSE:
                case MySqlParser.KW_ROW_COUNT:
                case MySqlParser.KW_SCHEMA_NAME:
                case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
                case MySqlParser.KW_SRID:
                case MySqlParser.KW_SYSTEM_USER:
                case MySqlParser.KW_TP_CONNECTION_ADMIN:
                case MySqlParser.KW_WEIGHT_STRING:
                case MySqlParser.MOD:
                case MySqlParser.AT_SIGN:
                case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.ID:
                case MySqlParser.LOCAL_ID:
                case MySqlParser.GLOBAL_ID:
                    {
                    this.state = 6743;
                    this.variableClause();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 6746;
                this.variableClause();
                this.state = 6747;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 6748;
                this.diagnosticsConditionInformationName();
                this.state = 6756;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 6749;
                    this.match(MySqlParser.COMMA);
                    this.state = 6750;
                    this.variableClause();
                    this.state = 6751;
                    this.match(MySqlParser.EQUAL_SYMBOL);
                    this.state = 6752;
                    this.diagnosticsConditionInformationName();
                    }
                    }
                    this.state = 6758;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public diagnosticsConditionInformationName(): DiagnosticsConditionInformationNameContext {
        let localContext = new DiagnosticsConditionInformationNameContext(this.context, this.state);
        this.enterRule(localContext, 618, MySqlParser.RULE_diagnosticsConditionInformationName);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6761;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 332)) & ~0x1F) === 0 && ((1 << (_la - 332)) & 137887873) !== 0) || _la === 487 || _la === 495 || _la === 578 || _la === 650 || _la === 657 || _la === 822 || _la === 832)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public describeObjectClause(): DescribeObjectClauseContext {
        let localContext = new DescribeObjectClauseContext(this.context, this.state);
        this.enterRule(localContext, 620, MySqlParser.RULE_describeObjectClause);
        try {
            this.state = 6773;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_DELETE:
            case MySqlParser.KW_INSERT:
            case MySqlParser.KW_REPLACE:
            case MySqlParser.KW_SELECT:
            case MySqlParser.KW_UPDATE:
            case MySqlParser.LR_BRACKET:
                localContext = new DescribeStatementsContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6768;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.KW_SELECT:
                case MySqlParser.LR_BRACKET:
                    {
                    this.state = 6763;
                    this.selectStatement();
                    }
                    break;
                case MySqlParser.KW_DELETE:
                    {
                    this.state = 6764;
                    this.deleteStatement();
                    }
                    break;
                case MySqlParser.KW_INSERT:
                    {
                    this.state = 6765;
                    this.insertStatement();
                    }
                    break;
                case MySqlParser.KW_REPLACE:
                    {
                    this.state = 6766;
                    this.replaceStatement();
                    }
                    break;
                case MySqlParser.KW_UPDATE:
                    {
                    this.state = 6767;
                    this.updateStatement();
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                }
                break;
            case MySqlParser.KW_FOR:
                localContext = new DescribeConnectionContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6770;
                this.match(MySqlParser.KW_FOR);
                this.state = 6771;
                this.match(MySqlParser.KW_CONNECTION);
                this.state = 6772;
                (localContext as DescribeConnectionContext)._connection_id = this.uid();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public databaseNameCreate(): DatabaseNameCreateContext {
        let localContext = new DatabaseNameCreateContext(this.context, this.state);
        this.enterRule(localContext, 622, MySqlParser.RULE_databaseNameCreate);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6775;
            this.fullId();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public databaseName(): DatabaseNameContext {
        let localContext = new DatabaseNameContext(this.context, this.state);
        this.enterRule(localContext, 624, MySqlParser.RULE_databaseName);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6777;
            this.fullId();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public functionNameCreate(): FunctionNameCreateContext {
        let localContext = new FunctionNameCreateContext(this.context, this.state);
        this.enterRule(localContext, 626, MySqlParser.RULE_functionNameCreate);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6779;
            this.fullId();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public functionName(): FunctionNameContext {
        let localContext = new FunctionNameContext(this.context, this.state);
        this.enterRule(localContext, 628, MySqlParser.RULE_functionName);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6781;
            this.fullId();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public viewNameCreate(): ViewNameCreateContext {
        let localContext = new ViewNameCreateContext(this.context, this.state);
        this.enterRule(localContext, 630, MySqlParser.RULE_viewNameCreate);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6783;
            this.fullId();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public viewName(): ViewNameContext {
        let localContext = new ViewNameContext(this.context, this.state);
        this.enterRule(localContext, 632, MySqlParser.RULE_viewName);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6785;
            this.fullId();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public indexNameCreate(): IndexNameCreateContext {
        let localContext = new IndexNameCreateContext(this.context, this.state);
        this.enterRule(localContext, 634, MySqlParser.RULE_indexNameCreate);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6787;
            this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public indexNames(): IndexNamesContext {
        let localContext = new IndexNamesContext(this.context, this.state);
        this.enterRule(localContext, 636, MySqlParser.RULE_indexNames);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6789;
            this.indexName();
            this.state = 6794;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 6790;
                this.match(MySqlParser.COMMA);
                this.state = 6791;
                this.indexName();
                }
                }
                this.state = 6796;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public indexName(): IndexNameContext {
        let localContext = new IndexNameContext(this.context, this.state);
        this.enterRule(localContext, 638, MySqlParser.RULE_indexName);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6797;
            this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public groupNameCreate(): GroupNameCreateContext {
        let localContext = new GroupNameCreateContext(this.context, this.state);
        this.enterRule(localContext, 640, MySqlParser.RULE_groupNameCreate);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6799;
            this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public groupName(): GroupNameContext {
        let localContext = new GroupNameContext(this.context, this.state);
        this.enterRule(localContext, 642, MySqlParser.RULE_groupName);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6801;
            this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tableNameCreate(): TableNameCreateContext {
        let localContext = new TableNameCreateContext(this.context, this.state);
        this.enterRule(localContext, 644, MySqlParser.RULE_tableNameCreate);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6803;
            this.fullId();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tableNames(): TableNamesContext {
        let localContext = new TableNamesContext(this.context, this.state);
        this.enterRule(localContext, 646, MySqlParser.RULE_tableNames);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6805;
            this.tableName();
            this.state = 6810;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 978, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 6806;
                    this.match(MySqlParser.COMMA);
                    this.state = 6807;
                    this.tableName();
                    }
                    }
                }
                this.state = 6812;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 978, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tableName(): TableNameContext {
        let localContext = new TableNameContext(this.context, this.state);
        this.enterRule(localContext, 648, MySqlParser.RULE_tableName);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6813;
            this.fullId();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public userOrRoleNames(): UserOrRoleNamesContext {
        let localContext = new UserOrRoleNamesContext(this.context, this.state);
        this.enterRule(localContext, 650, MySqlParser.RULE_userOrRoleNames);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6815;
            this.userOrRoleName();
            this.state = 6820;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 6816;
                this.match(MySqlParser.COMMA);
                this.state = 6817;
                this.userOrRoleName();
                }
                }
                this.state = 6822;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public userOrRoleName(): UserOrRoleNameContext {
        let localContext = new UserOrRoleNameContext(this.context, this.state);
        this.enterRule(localContext, 652, MySqlParser.RULE_userOrRoleName);
        try {
            this.state = 6825;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 980, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6823;
                this.userName();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6824;
                this.uid();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public columnNameCreate(): ColumnNameCreateContext {
        let localContext = new ColumnNameCreateContext(this.context, this.state);
        this.enterRule(localContext, 654, MySqlParser.RULE_columnNameCreate);
        let _la: number;
        try {
            this.state = 6841;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 985, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6827;
                this.uid();
                this.state = 6832;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 865) {
                    {
                    this.state = 6828;
                    this.dottedId();
                    this.state = 6830;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 865) {
                        {
                        this.state = 6829;
                        this.dottedId();
                        }
                    }

                    }
                }

                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6835;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 983, this.context) ) {
                case 1:
                    {
                    this.state = 6834;
                    this.matchWildcard();
                    }
                    break;
                }
                this.state = 6837;
                this.dottedId();
                this.state = 6839;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 865) {
                    {
                    this.state = 6838;
                    this.dottedId();
                    }
                }

                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public columnNames(): ColumnNamesContext {
        let localContext = new ColumnNamesContext(this.context, this.state);
        this.enterRule(localContext, 656, MySqlParser.RULE_columnNames);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6843;
            this.columnName();
            this.state = 6848;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 986, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 6844;
                    this.match(MySqlParser.COMMA);
                    this.state = 6845;
                    this.columnName();
                    }
                    }
                }
                this.state = 6850;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 986, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public columnName(): ColumnNameContext {
        let localContext = new ColumnNameContext(this.context, this.state);
        this.enterRule(localContext, 658, MySqlParser.RULE_columnName);
        try {
            this.state = 6866;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 991, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6851;
                this.uid();
                this.state = 6856;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 988, this.context) ) {
                case 1:
                    {
                    this.state = 6852;
                    this.dottedId();
                    this.state = 6854;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 987, this.context) ) {
                    case 1:
                        {
                        this.state = 6853;
                        this.dottedId();
                        }
                        break;
                    }
                    }
                    break;
                }
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6859;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 989, this.context) ) {
                case 1:
                    {
                    this.state = 6858;
                    this.matchWildcard();
                    }
                    break;
                }
                this.state = 6861;
                this.dottedId();
                this.state = 6863;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 990, this.context) ) {
                case 1:
                    {
                    this.state = 6862;
                    this.dottedId();
                    }
                    break;
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6865;
                if (!(this.shouldMatchEmpty())) {
                    throw this.createFailedPredicateException("this.shouldMatchEmpty()");
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tablespaceNameCreate(): TablespaceNameCreateContext {
        let localContext = new TablespaceNameCreateContext(this.context, this.state);
        this.enterRule(localContext, 660, MySqlParser.RULE_tablespaceNameCreate);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6868;
            this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public tablespaceName(): TablespaceNameContext {
        let localContext = new TablespaceNameContext(this.context, this.state);
        this.enterRule(localContext, 662, MySqlParser.RULE_tablespaceName);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6870;
            this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partitionNameCreate(): PartitionNameCreateContext {
        let localContext = new PartitionNameCreateContext(this.context, this.state);
        this.enterRule(localContext, 664, MySqlParser.RULE_partitionNameCreate);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6872;
            this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partitionNames(): PartitionNamesContext {
        let localContext = new PartitionNamesContext(this.context, this.state);
        this.enterRule(localContext, 666, MySqlParser.RULE_partitionNames);
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6874;
            this.partitionName();
            this.state = 6879;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 992, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    {
                    {
                    this.state = 6875;
                    this.match(MySqlParser.COMMA);
                    this.state = 6876;
                    this.partitionName();
                    }
                    }
                }
                this.state = 6881;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 992, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partitionName(): PartitionNameContext {
        let localContext = new PartitionNameContext(this.context, this.state);
        this.enterRule(localContext, 668, MySqlParser.RULE_partitionName);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6882;
            this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public indexColumnName(): IndexColumnNameContext {
        let localContext = new IndexColumnNameContext(this.context, this.state);
        this.enterRule(localContext, 670, MySqlParser.RULE_indexColumnName);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6892;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 994, this.context) ) {
            case 1:
                {
                this.state = 6884;
                this.uid();
                this.state = 6889;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 993, this.context) ) {
                case 1:
                    {
                    this.state = 6885;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 6886;
                    this.decimalLiteral();
                    this.state = 6887;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                }
                }
                break;
            case 2:
                {
                this.state = 6891;
                this.expression(0);
                }
                break;
            }
            this.state = 6895;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 995, this.context) ) {
            case 1:
                {
                this.state = 6894;
                localContext._sortType = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 14 || _la === 45)) {
                    localContext._sortType = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public userHostPort(): UserHostPortContext {
        let localContext = new UserHostPortContext(this.context, this.state);
        this.enterRule(localContext, 672, MySqlParser.RULE_userHostPort);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6897;
            this.userAtHost();
            this.state = 6898;
            this.match(MySqlParser.COLON_SYMB);
            this.state = 6899;
            this.decimalLiteral();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public userAtHost(): UserAtHostContext {
        let localContext = new UserAtHostContext(this.context, this.state);
        this.enterRule(localContext, 674, MySqlParser.RULE_userAtHost);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6901;
            this.simpleUserName();
            this.state = 6902;
            this.match(MySqlParser.HOST_IP_ADDRESS);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public simpleUserName(): SimpleUserNameContext {
        let localContext = new SimpleUserNameContext(this.context, this.state);
        this.enterRule(localContext, 676, MySqlParser.RULE_simpleUserName);
        try {
            this.state = 6908;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 996, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6904;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6905;
                this.match(MySqlParser.ID);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6906;
                this.match(MySqlParser.KW_ADMIN);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6907;
                this.keywordsCanBeId();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public hostName(): HostNameContext {
        let localContext = new HostNameContext(this.context, this.state);
        this.enterRule(localContext, 678, MySqlParser.RULE_hostName);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6910;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 870)) & ~0x1F) === 0 && ((1 << (_la - 870)) & 6291457) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public userName(): UserNameContext {
        let localContext = new UserNameContext(this.context, this.state);
        this.enterRule(localContext, 680, MySqlParser.RULE_userName);
        let _la: number;
        try {
            this.state = 6917;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 998, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6912;
                this.simpleUserName();
                this.state = 6914;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 870)) & ~0x1F) === 0 && ((1 << (_la - 870)) & 6291457) !== 0)) {
                    {
                    this.state = 6913;
                    this.hostName();
                    }
                }

                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6916;
                this.currentUserExpression();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public mysqlVariable(): MysqlVariableContext {
        let localContext = new MysqlVariableContext(this.context, this.state);
        this.enterRule(localContext, 682, MySqlParser.RULE_mysqlVariable);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6919;
            _la = this.tokenStream.LA(1);
            if(!(_la === 892 || _la === 893)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public charsetName(): CharsetNameContext {
        let localContext = new CharsetNameContext(this.context, this.state);
        this.enterRule(localContext, 684, MySqlParser.RULE_charsetName);
        try {
            this.state = 6925;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 999, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6921;
                this.match(MySqlParser.KW_BINARY);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6922;
                this.charsetNameBase();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6923;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6924;
                this.match(MySqlParser.CHARSET_REVERSE_QOUTE_STRING);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public collationName(): CollationNameContext {
        let localContext = new CollationNameContext(this.context, this.state);
        this.enterRule(localContext, 686, MySqlParser.RULE_collationName);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6927;
            this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public engineName(): EngineNameContext {
        let localContext = new EngineNameContext(this.context, this.state);
        this.enterRule(localContext, 688, MySqlParser.RULE_engineName);
        try {
            this.state = 6932;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_CONNECT:
            case MySqlParser.KW_ARCHIVE:
            case MySqlParser.KW_BLACKHOLE:
            case MySqlParser.KW_CSV:
            case MySqlParser.KW_FEDERATED:
            case MySqlParser.KW_INNODB:
            case MySqlParser.KW_MEMORY:
            case MySqlParser.KW_MRG_MYISAM:
            case MySqlParser.KW_MYISAM:
            case MySqlParser.KW_NDB:
            case MySqlParser.KW_NDBCLUSTER:
            case MySqlParser.KW_PERFORMANCE_SCHEMA:
            case MySqlParser.KW_TOKUDB:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6929;
                this.engineNameBase();
                }
                break;
            case MySqlParser.ID:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6930;
                this.match(MySqlParser.ID);
                }
                break;
            case MySqlParser.STRING_LITERAL:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6931;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public engineNameBase(): EngineNameBaseContext {
        let localContext = new EngineNameBaseContext(this.context, this.state);
        this.enterRule(localContext, 690, MySqlParser.RULE_engineNameBase);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6934;
            _la = this.tokenStream.LA(1);
            if(!(_la === 348 || ((((_la - 797)) & ~0x1F) === 0 && ((1 << (_la - 797)) & 4095) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public uuidSet(): UuidSetContext {
        let localContext = new UuidSetContext(this.context, this.state);
        this.enterRule(localContext, 692, MySqlParser.RULE_uuidSet);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6936;
            this.decimalLiteral();
            this.state = 6937;
            this.match(MySqlParser.MINUS);
            this.state = 6938;
            this.decimalLiteral();
            this.state = 6939;
            this.match(MySqlParser.MINUS);
            this.state = 6940;
            this.decimalLiteral();
            this.state = 6941;
            this.match(MySqlParser.MINUS);
            this.state = 6942;
            this.decimalLiteral();
            this.state = 6943;
            this.match(MySqlParser.MINUS);
            this.state = 6944;
            this.decimalLiteral();
            this.state = 6950;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            do {
                {
                {
                this.state = 6945;
                this.match(MySqlParser.COLON_SYMB);
                this.state = 6946;
                this.decimalLiteral();
                this.state = 6947;
                this.match(MySqlParser.MINUS);
                this.state = 6948;
                this.decimalLiteral();
                }
                }
                this.state = 6952;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            } while (_la === 878);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public xid(): XidContext {
        let localContext = new XidContext(this.context, this.state);
        this.enterRule(localContext, 694, MySqlParser.RULE_xid);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6954;
            localContext._globalTableUid = this.xuidStringId();
            this.state = 6961;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 868) {
                {
                this.state = 6955;
                this.match(MySqlParser.COMMA);
                this.state = 6956;
                localContext._qualifier = this.xuidStringId();
                this.state = 6959;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 868) {
                    {
                    this.state = 6957;
                    this.match(MySqlParser.COMMA);
                    this.state = 6958;
                    localContext._idFormat = this.decimalLiteral();
                    }
                }

                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public xuidStringId(): XuidStringIdContext {
        let localContext = new XuidStringIdContext(this.context, this.state);
        this.enterRule(localContext, 696, MySqlParser.RULE_xuidStringId);
        let _la: number;
        try {
            this.state = 6970;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.STRING_LITERAL:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6963;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            case MySqlParser.BIT_STRING:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6964;
                this.match(MySqlParser.BIT_STRING);
                }
                break;
            case MySqlParser.HEXADECIMAL_LITERAL:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6966;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                do {
                    {
                    {
                    this.state = 6965;
                    this.match(MySqlParser.HEXADECIMAL_LITERAL);
                    }
                    }
                    this.state = 6968;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                } while (_la === 884);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public fullId(): FullIdContext {
        let localContext = new FullIdContext(this.context, this.state);
        this.enterRule(localContext, 698, MySqlParser.RULE_fullId);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6972;
            this.uid();
            this.state = 6974;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1006, this.context) ) {
            case 1:
                {
                this.state = 6973;
                this.dottedId();
                }
                break;
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public uidList(): UidListContext {
        let localContext = new UidListContext(this.context, this.state);
        this.enterRule(localContext, 700, MySqlParser.RULE_uidList);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 6976;
            this.uid();
            this.state = 6981;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 6977;
                this.match(MySqlParser.COMMA);
                this.state = 6978;
                this.uid();
                }
                }
                this.state = 6983;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public uid(): UidContext {
        let localContext = new UidContext(this.context, this.state);
        this.enterRule(localContext, 702, MySqlParser.RULE_uid);
        try {
            this.state = 6987;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_ARRAY:
            case MySqlParser.KW_ATTRIBUTE:
            case MySqlParser.KW_BUCKETS:
            case MySqlParser.KW_CONDITION:
            case MySqlParser.KW_CURRENT:
            case MySqlParser.KW_CURRENT_USER:
            case MySqlParser.KW_DATABASE:
            case MySqlParser.KW_DEFAULT:
            case MySqlParser.KW_DIAGNOSTICS:
            case MySqlParser.KW_EMPTY:
            case MySqlParser.KW_ENFORCED:
            case MySqlParser.KW_EXCEPT:
            case MySqlParser.KW_GROUP:
            case MySqlParser.KW_IF:
            case MySqlParser.KW_INSERT:
            case MySqlParser.KW_LATERAL:
            case MySqlParser.KW_LEFT:
            case MySqlParser.KW_NUMBER:
            case MySqlParser.KW_OPTIONAL:
            case MySqlParser.KW_ORDER:
            case MySqlParser.KW_PRIMARY:
            case MySqlParser.KW_REPEAT:
            case MySqlParser.KW_REPLACE:
            case MySqlParser.KW_RIGHT:
            case MySqlParser.KW_SCHEMA:
            case MySqlParser.KW_SKIP_QUERY_REWRITE:
            case MySqlParser.KW_STACKED:
            case MySqlParser.KW_DATE:
            case MySqlParser.KW_TIME:
            case MySqlParser.KW_TIMESTAMP:
            case MySqlParser.KW_DATETIME:
            case MySqlParser.KW_YEAR:
            case MySqlParser.KW_BINARY:
            case MySqlParser.KW_TEXT:
            case MySqlParser.KW_ENUM:
            case MySqlParser.KW_SERIAL:
            case MySqlParser.KW_JSON_TABLE:
            case MySqlParser.KW_JSON_VALUE:
            case MySqlParser.KW_NESTED:
            case MySqlParser.KW_ORDINALITY:
            case MySqlParser.KW_PATH:
            case MySqlParser.KW_AVG:
            case MySqlParser.KW_BIT_AND:
            case MySqlParser.KW_BIT_OR:
            case MySqlParser.KW_BIT_XOR:
            case MySqlParser.KW_COUNT:
            case MySqlParser.KW_CUME_DIST:
            case MySqlParser.KW_DENSE_RANK:
            case MySqlParser.KW_FIRST_VALUE:
            case MySqlParser.KW_GROUP_CONCAT:
            case MySqlParser.KW_LAG:
            case MySqlParser.KW_LAST_VALUE:
            case MySqlParser.KW_LEAD:
            case MySqlParser.KW_MAX:
            case MySqlParser.KW_MIN:
            case MySqlParser.KW_NTILE:
            case MySqlParser.KW_NTH_VALUE:
            case MySqlParser.KW_PERCENT_RANK:
            case MySqlParser.KW_RANK:
            case MySqlParser.KW_ROW_NUMBER:
            case MySqlParser.KW_STD:
            case MySqlParser.KW_STDDEV:
            case MySqlParser.KW_STDDEV_POP:
            case MySqlParser.KW_STDDEV_SAMP:
            case MySqlParser.KW_SUM:
            case MySqlParser.KW_VAR_POP:
            case MySqlParser.KW_VAR_SAMP:
            case MySqlParser.KW_VARIANCE:
            case MySqlParser.KW_CURRENT_DATE:
            case MySqlParser.KW_CURRENT_TIME:
            case MySqlParser.KW_CURRENT_TIMESTAMP:
            case MySqlParser.KW_LOCALTIME:
            case MySqlParser.KW_CURDATE:
            case MySqlParser.KW_CURTIME:
            case MySqlParser.KW_DATE_ADD:
            case MySqlParser.KW_DATE_SUB:
            case MySqlParser.KW_LOCALTIMESTAMP:
            case MySqlParser.KW_NOW:
            case MySqlParser.KW_POSITION:
            case MySqlParser.KW_SUBSTR:
            case MySqlParser.KW_SUBSTRING:
            case MySqlParser.KW_SYSDATE:
            case MySqlParser.KW_TRIM:
            case MySqlParser.KW_UTC_DATE:
            case MySqlParser.KW_UTC_TIME:
            case MySqlParser.KW_UTC_TIMESTAMP:
            case MySqlParser.KW_ACCOUNT:
            case MySqlParser.KW_ACTION:
            case MySqlParser.KW_AFTER:
            case MySqlParser.KW_AGGREGATE:
            case MySqlParser.KW_ALGORITHM:
            case MySqlParser.KW_ANY:
            case MySqlParser.KW_AT:
            case MySqlParser.KW_AUTHORS:
            case MySqlParser.KW_AUTOCOMMIT:
            case MySqlParser.KW_AUTOEXTEND_SIZE:
            case MySqlParser.KW_AUTO_INCREMENT:
            case MySqlParser.KW_AVG_ROW_LENGTH:
            case MySqlParser.KW_BEGIN:
            case MySqlParser.KW_BINLOG:
            case MySqlParser.KW_BIT:
            case MySqlParser.KW_BLOCK:
            case MySqlParser.KW_BOOL:
            case MySqlParser.KW_BOOLEAN:
            case MySqlParser.KW_BTREE:
            case MySqlParser.KW_CACHE:
            case MySqlParser.KW_CASCADED:
            case MySqlParser.KW_CHAIN:
            case MySqlParser.KW_CHANGED:
            case MySqlParser.KW_CHANNEL:
            case MySqlParser.KW_CHECKSUM:
            case MySqlParser.KW_CIPHER:
            case MySqlParser.KW_CLASS_ORIGIN:
            case MySqlParser.KW_CLIENT:
            case MySqlParser.KW_CLOSE:
            case MySqlParser.KW_COALESCE:
            case MySqlParser.KW_CODE:
            case MySqlParser.KW_COLUMNS:
            case MySqlParser.KW_COLUMN_FORMAT:
            case MySqlParser.KW_COLUMN_NAME:
            case MySqlParser.KW_COMMENT:
            case MySqlParser.KW_COMMIT:
            case MySqlParser.KW_COMPACT:
            case MySqlParser.KW_COMPLETION:
            case MySqlParser.KW_COMPRESSED:
            case MySqlParser.KW_COMPRESSION:
            case MySqlParser.KW_CONCURRENT:
            case MySqlParser.KW_CONNECT:
            case MySqlParser.KW_CONNECTION:
            case MySqlParser.KW_CONSISTENT:
            case MySqlParser.KW_CONSTRAINT_CATALOG:
            case MySqlParser.KW_CONSTRAINT_SCHEMA:
            case MySqlParser.KW_CONSTRAINT_NAME:
            case MySqlParser.KW_CONTAINS:
            case MySqlParser.KW_CONTEXT:
            case MySqlParser.KW_CONTRIBUTORS:
            case MySqlParser.KW_COPY:
            case MySqlParser.KW_CPU:
            case MySqlParser.KW_CURSOR_NAME:
            case MySqlParser.KW_DATA:
            case MySqlParser.KW_DATAFILE:
            case MySqlParser.KW_DEALLOCATE:
            case MySqlParser.KW_DEFAULT_AUTH:
            case MySqlParser.KW_DEFINER:
            case MySqlParser.KW_DELAY_KEY_WRITE:
            case MySqlParser.KW_DES_KEY_FILE:
            case MySqlParser.KW_DIRECTORY:
            case MySqlParser.KW_DISABLE:
            case MySqlParser.KW_DISCARD:
            case MySqlParser.KW_DISK:
            case MySqlParser.KW_DO:
            case MySqlParser.KW_DUMPFILE:
            case MySqlParser.KW_DUPLICATE:
            case MySqlParser.KW_DYNAMIC:
            case MySqlParser.KW_ENABLE:
            case MySqlParser.KW_ENCRYPTION:
            case MySqlParser.KW_END:
            case MySqlParser.KW_ENDS:
            case MySqlParser.KW_ENGINE:
            case MySqlParser.KW_ENGINES:
            case MySqlParser.KW_ERROR:
            case MySqlParser.KW_ERRORS:
            case MySqlParser.KW_ESCAPE:
            case MySqlParser.KW_EVENT:
            case MySqlParser.KW_EVENTS:
            case MySqlParser.KW_EVERY:
            case MySqlParser.KW_EXCHANGE:
            case MySqlParser.KW_EXCLUSIVE:
            case MySqlParser.KW_EXPIRE:
            case MySqlParser.KW_EXPORT:
            case MySqlParser.KW_EXTENDED:
            case MySqlParser.KW_EXTENT_SIZE:
            case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
            case MySqlParser.KW_FAST:
            case MySqlParser.KW_FAULTS:
            case MySqlParser.KW_FIELDS:
            case MySqlParser.KW_FILE_BLOCK_SIZE:
            case MySqlParser.KW_FILTER:
            case MySqlParser.KW_FIRST:
            case MySqlParser.KW_FIXED:
            case MySqlParser.KW_FLUSH:
            case MySqlParser.KW_FOLLOWS:
            case MySqlParser.KW_FOUND:
            case MySqlParser.KW_FULL:
            case MySqlParser.KW_FUNCTION:
            case MySqlParser.KW_GENERAL:
            case MySqlParser.KW_GLOBAL:
            case MySqlParser.KW_GRANTS:
            case MySqlParser.KW_GROUP_REPLICATION:
            case MySqlParser.KW_HANDLER:
            case MySqlParser.KW_HASH:
            case MySqlParser.KW_HELP:
            case MySqlParser.KW_HISTORY:
            case MySqlParser.KW_HOST:
            case MySqlParser.KW_HOSTS:
            case MySqlParser.KW_IDENTIFIED:
            case MySqlParser.KW_IGNORE_SERVER_IDS:
            case MySqlParser.KW_IMPORT:
            case MySqlParser.KW_INDEXES:
            case MySqlParser.KW_INITIAL_SIZE:
            case MySqlParser.KW_INPLACE:
            case MySqlParser.KW_INSERT_METHOD:
            case MySqlParser.KW_INSTALL:
            case MySqlParser.KW_INSTANCE:
            case MySqlParser.KW_INSTANT:
            case MySqlParser.KW_INVISIBLE:
            case MySqlParser.KW_INVOKER:
            case MySqlParser.KW_IO:
            case MySqlParser.KW_IO_THREAD:
            case MySqlParser.KW_IPC:
            case MySqlParser.KW_ISOLATION:
            case MySqlParser.KW_ISSUER:
            case MySqlParser.KW_JSON:
            case MySqlParser.KW_KEY_BLOCK_SIZE:
            case MySqlParser.KW_LANGUAGE:
            case MySqlParser.KW_LAST:
            case MySqlParser.KW_LEAVES:
            case MySqlParser.KW_LESS:
            case MySqlParser.KW_LEVEL:
            case MySqlParser.KW_LIST:
            case MySqlParser.KW_LOCAL:
            case MySqlParser.KW_LOGFILE:
            case MySqlParser.KW_LOGS:
            case MySqlParser.KW_MASTER:
            case MySqlParser.KW_MASTER_AUTO_POSITION:
            case MySqlParser.KW_MASTER_CONNECT_RETRY:
            case MySqlParser.KW_MASTER_DELAY:
            case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
            case MySqlParser.KW_MASTER_HOST:
            case MySqlParser.KW_MASTER_LOG_FILE:
            case MySqlParser.KW_MASTER_LOG_POS:
            case MySqlParser.KW_MASTER_PASSWORD:
            case MySqlParser.KW_MASTER_PORT:
            case MySqlParser.KW_MASTER_RETRY_COUNT:
            case MySqlParser.KW_MASTER_SSL:
            case MySqlParser.KW_MASTER_SSL_CA:
            case MySqlParser.KW_MASTER_SSL_CAPATH:
            case MySqlParser.KW_MASTER_SSL_CERT:
            case MySqlParser.KW_MASTER_SSL_CIPHER:
            case MySqlParser.KW_MASTER_SSL_CRL:
            case MySqlParser.KW_MASTER_SSL_CRLPATH:
            case MySqlParser.KW_MASTER_SSL_KEY:
            case MySqlParser.KW_MASTER_TLS_VERSION:
            case MySqlParser.KW_MASTER_USER:
            case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
            case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
            case MySqlParser.KW_MAX_ROWS:
            case MySqlParser.KW_MAX_SIZE:
            case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
            case MySqlParser.KW_MAX_USER_CONNECTIONS:
            case MySqlParser.KW_MEDIUM:
            case MySqlParser.KW_MEMBER:
            case MySqlParser.KW_MERGE:
            case MySqlParser.KW_MESSAGE_TEXT:
            case MySqlParser.KW_MID:
            case MySqlParser.KW_MIGRATE:
            case MySqlParser.KW_MIN_ROWS:
            case MySqlParser.KW_MODE:
            case MySqlParser.KW_MODIFY:
            case MySqlParser.KW_MUTEX:
            case MySqlParser.KW_MYSQL:
            case MySqlParser.KW_MYSQL_ERRNO:
            case MySqlParser.KW_NAME:
            case MySqlParser.KW_NAMES:
            case MySqlParser.KW_NCHAR:
            case MySqlParser.KW_NEVER:
            case MySqlParser.KW_NEXT:
            case MySqlParser.KW_NO:
            case MySqlParser.KW_NOWAIT:
            case MySqlParser.KW_NODEGROUP:
            case MySqlParser.KW_NONE:
            case MySqlParser.KW_ODBC:
            case MySqlParser.KW_OFFLINE:
            case MySqlParser.KW_OFFSET:
            case MySqlParser.KW_OF:
            case MySqlParser.KW_OLD_PASSWORD:
            case MySqlParser.KW_ONE:
            case MySqlParser.KW_ONLINE:
            case MySqlParser.KW_ONLY:
            case MySqlParser.KW_OPEN:
            case MySqlParser.KW_OPTIMIZER_COSTS:
            case MySqlParser.KW_OPTIONS:
            case MySqlParser.KW_OWNER:
            case MySqlParser.KW_PACK_KEYS:
            case MySqlParser.KW_PAGE:
            case MySqlParser.KW_PAGE_CHECKSUM:
            case MySqlParser.KW_PARSER:
            case MySqlParser.KW_PARTIAL:
            case MySqlParser.KW_PARTITIONING:
            case MySqlParser.KW_PARTITIONS:
            case MySqlParser.KW_PASSWORD:
            case MySqlParser.KW_PASSWORD_LOCK_TIME:
            case MySqlParser.KW_PHASE:
            case MySqlParser.KW_PLUGIN:
            case MySqlParser.KW_PLUGIN_DIR:
            case MySqlParser.KW_PLUGINS:
            case MySqlParser.KW_PORT:
            case MySqlParser.KW_PRECEDES:
            case MySqlParser.KW_PREPARE:
            case MySqlParser.KW_PRESERVE:
            case MySqlParser.KW_PREV:
            case MySqlParser.KW_PROCESSLIST:
            case MySqlParser.KW_PROFILE:
            case MySqlParser.KW_PROFILES:
            case MySqlParser.KW_PROXY:
            case MySqlParser.KW_QUERY:
            case MySqlParser.KW_QUICK:
            case MySqlParser.KW_REBUILD:
            case MySqlParser.KW_RECOVER:
            case MySqlParser.KW_RECURSIVE:
            case MySqlParser.KW_REDO_BUFFER_SIZE:
            case MySqlParser.KW_REDUNDANT:
            case MySqlParser.KW_RELAY:
            case MySqlParser.KW_RELAY_LOG_FILE:
            case MySqlParser.KW_RELAY_LOG_POS:
            case MySqlParser.KW_RELAYLOG:
            case MySqlParser.KW_REMOVE:
            case MySqlParser.KW_REORGANIZE:
            case MySqlParser.KW_REPAIR:
            case MySqlParser.KW_REPLICATE_DO_DB:
            case MySqlParser.KW_REPLICATE_DO_TABLE:
            case MySqlParser.KW_REPLICATE_IGNORE_DB:
            case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATE_REWRITE_DB:
            case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
            case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATION:
            case MySqlParser.KW_RESET:
            case MySqlParser.KW_RESUME:
            case MySqlParser.KW_RETURNED_SQLSTATE:
            case MySqlParser.KW_RETURNS:
            case MySqlParser.KW_REUSE:
            case MySqlParser.KW_ROLE:
            case MySqlParser.KW_ROLLBACK:
            case MySqlParser.KW_ROLLUP:
            case MySqlParser.KW_ROTATE:
            case MySqlParser.KW_ROW:
            case MySqlParser.KW_ROWS:
            case MySqlParser.KW_ROW_FORMAT:
            case MySqlParser.KW_SAVEPOINT:
            case MySqlParser.KW_SCHEDULE:
            case MySqlParser.KW_SECURITY:
            case MySqlParser.KW_SERVER:
            case MySqlParser.KW_SESSION:
            case MySqlParser.KW_SHARE:
            case MySqlParser.KW_SHARED:
            case MySqlParser.KW_SIGNED:
            case MySqlParser.KW_SIMPLE:
            case MySqlParser.KW_SLAVE:
            case MySqlParser.KW_SLOW:
            case MySqlParser.KW_SNAPSHOT:
            case MySqlParser.KW_SOCKET:
            case MySqlParser.KW_SOME:
            case MySqlParser.KW_SONAME:
            case MySqlParser.KW_SOUNDS:
            case MySqlParser.KW_SOURCE:
            case MySqlParser.KW_SQL_AFTER_GTIDS:
            case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
            case MySqlParser.KW_SQL_BEFORE_GTIDS:
            case MySqlParser.KW_SQL_BUFFER_RESULT:
            case MySqlParser.KW_SQL_CACHE:
            case MySqlParser.KW_SQL_NO_CACHE:
            case MySqlParser.KW_SQL_THREAD:
            case MySqlParser.KW_START:
            case MySqlParser.KW_STARTS:
            case MySqlParser.KW_STATS_AUTO_RECALC:
            case MySqlParser.KW_STATS_PERSISTENT:
            case MySqlParser.KW_STATS_SAMPLE_PAGES:
            case MySqlParser.KW_STATUS:
            case MySqlParser.KW_STOP:
            case MySqlParser.KW_STORAGE:
            case MySqlParser.KW_STRING:
            case MySqlParser.KW_SUBCLASS_ORIGIN:
            case MySqlParser.KW_SUBJECT:
            case MySqlParser.KW_SUBPARTITION:
            case MySqlParser.KW_SUBPARTITIONS:
            case MySqlParser.KW_SUSPEND:
            case MySqlParser.KW_SWAPS:
            case MySqlParser.KW_SWITCHES:
            case MySqlParser.KW_TABLE_NAME:
            case MySqlParser.KW_TABLESPACE:
            case MySqlParser.KW_TABLE_TYPE:
            case MySqlParser.KW_TEMPORARY:
            case MySqlParser.KW_TEMPTABLE:
            case MySqlParser.KW_THAN:
            case MySqlParser.KW_TRADITIONAL:
            case MySqlParser.KW_TRANSACTION:
            case MySqlParser.KW_TRANSACTIONAL:
            case MySqlParser.KW_TRIGGERS:
            case MySqlParser.KW_TRUNCATE:
            case MySqlParser.KW_UNBOUNDED:
            case MySqlParser.KW_UNDEFINED:
            case MySqlParser.KW_UNDOFILE:
            case MySqlParser.KW_UNDO_BUFFER_SIZE:
            case MySqlParser.KW_UNINSTALL:
            case MySqlParser.KW_UNKNOWN:
            case MySqlParser.KW_UNTIL:
            case MySqlParser.KW_UPGRADE:
            case MySqlParser.KW_USER:
            case MySqlParser.KW_USE_FRM:
            case MySqlParser.KW_USER_RESOURCES:
            case MySqlParser.KW_VALIDATION:
            case MySqlParser.KW_VALUE:
            case MySqlParser.KW_VARIABLES:
            case MySqlParser.KW_VIEW:
            case MySqlParser.KW_VIRTUAL:
            case MySqlParser.KW_VISIBLE:
            case MySqlParser.KW_WAIT:
            case MySqlParser.KW_WARNINGS:
            case MySqlParser.KW_WITHOUT:
            case MySqlParser.KW_WORK:
            case MySqlParser.KW_WRAPPER:
            case MySqlParser.KW_X509:
            case MySqlParser.KW_XA:
            case MySqlParser.KW_XML:
            case MySqlParser.KW_QUARTER:
            case MySqlParser.KW_MONTH:
            case MySqlParser.KW_DAY:
            case MySqlParser.KW_HOUR:
            case MySqlParser.KW_MINUTE:
            case MySqlParser.KW_WEEK:
            case MySqlParser.KW_SECOND:
            case MySqlParser.KW_MICROSECOND:
            case MySqlParser.KW_ADMIN:
            case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
            case MySqlParser.KW_AUDIT_ADMIN:
            case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
            case MySqlParser.KW_BACKUP_ADMIN:
            case MySqlParser.KW_BINLOG_ADMIN:
            case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
            case MySqlParser.KW_CLONE_ADMIN:
            case MySqlParser.KW_CONNECTION_ADMIN:
            case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
            case MySqlParser.KW_EXECUTE:
            case MySqlParser.KW_FILE:
            case MySqlParser.KW_FIREWALL_ADMIN:
            case MySqlParser.KW_FIREWALL_EXEMPT:
            case MySqlParser.KW_FIREWALL_USER:
            case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
            case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
            case MySqlParser.KW_INVOKE:
            case MySqlParser.KW_LAMBDA:
            case MySqlParser.KW_NDB_STORED_USER:
            case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
            case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
            case MySqlParser.KW_PRIVILEGES:
            case MySqlParser.KW_PROCESS:
            case MySqlParser.KW_RELOAD:
            case MySqlParser.KW_REPLICATION_APPLIER:
            case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_USER:
            case MySqlParser.KW_ROLE_ADMIN:
            case MySqlParser.KW_ROUTINE:
            case MySqlParser.KW_S3:
            case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
            case MySqlParser.KW_SET_USER_ID:
            case MySqlParser.KW_SHOW_ROUTINE:
            case MySqlParser.KW_SHUTDOWN:
            case MySqlParser.KW_SUPER:
            case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
            case MySqlParser.KW_TABLES:
            case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
            case MySqlParser.KW_VERSION_TOKEN_ADMIN:
            case MySqlParser.KW_XA_RECOVER_ADMIN:
            case MySqlParser.KW_ARMSCII8:
            case MySqlParser.KW_ASCII:
            case MySqlParser.KW_BIG5:
            case MySqlParser.KW_CP1250:
            case MySqlParser.KW_CP1251:
            case MySqlParser.KW_CP1256:
            case MySqlParser.KW_CP1257:
            case MySqlParser.KW_CP850:
            case MySqlParser.KW_CP852:
            case MySqlParser.KW_CP866:
            case MySqlParser.KW_CP932:
            case MySqlParser.KW_DEC8:
            case MySqlParser.KW_EUCJPMS:
            case MySqlParser.KW_EUCKR:
            case MySqlParser.KW_GB18030:
            case MySqlParser.KW_GB2312:
            case MySqlParser.KW_GBK:
            case MySqlParser.KW_GEOSTD8:
            case MySqlParser.KW_GREEK:
            case MySqlParser.KW_HEBREW:
            case MySqlParser.KW_HP8:
            case MySqlParser.KW_KEYBCS2:
            case MySqlParser.KW_KOI8R:
            case MySqlParser.KW_KOI8U:
            case MySqlParser.KW_LATIN1:
            case MySqlParser.KW_LATIN2:
            case MySqlParser.KW_LATIN5:
            case MySqlParser.KW_LATIN7:
            case MySqlParser.KW_MACCE:
            case MySqlParser.KW_MACROMAN:
            case MySqlParser.KW_SJIS:
            case MySqlParser.KW_SWE7:
            case MySqlParser.KW_TIS620:
            case MySqlParser.KW_UCS2:
            case MySqlParser.KW_UJIS:
            case MySqlParser.KW_UTF16:
            case MySqlParser.KW_UTF16LE:
            case MySqlParser.KW_UTF32:
            case MySqlParser.KW_UTF8:
            case MySqlParser.KW_UTF8MB3:
            case MySqlParser.KW_UTF8MB4:
            case MySqlParser.KW_ARCHIVE:
            case MySqlParser.KW_BLACKHOLE:
            case MySqlParser.KW_CSV:
            case MySqlParser.KW_FEDERATED:
            case MySqlParser.KW_INNODB:
            case MySqlParser.KW_MEMORY:
            case MySqlParser.KW_MRG_MYISAM:
            case MySqlParser.KW_MYISAM:
            case MySqlParser.KW_NDB:
            case MySqlParser.KW_NDBCLUSTER:
            case MySqlParser.KW_PERFORMANCE_SCHEMA:
            case MySqlParser.KW_TOKUDB:
            case MySqlParser.KW_REPEATABLE:
            case MySqlParser.KW_COMMITTED:
            case MySqlParser.KW_UNCOMMITTED:
            case MySqlParser.KW_SERIALIZABLE:
            case MySqlParser.KW_GEOMETRYCOLLECTION:
            case MySqlParser.KW_LINESTRING:
            case MySqlParser.KW_MULTILINESTRING:
            case MySqlParser.KW_MULTIPOINT:
            case MySqlParser.KW_MULTIPOLYGON:
            case MySqlParser.KW_POINT:
            case MySqlParser.KW_POLYGON:
            case MySqlParser.KW_CATALOG_NAME:
            case MySqlParser.KW_CHARSET:
            case MySqlParser.KW_COLLATION:
            case MySqlParser.KW_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_FORMAT:
            case MySqlParser.KW_GET_FORMAT:
            case MySqlParser.KW_RANDOM:
            case MySqlParser.KW_REVERSE:
            case MySqlParser.KW_ROW_COUNT:
            case MySqlParser.KW_SCHEMA_NAME:
            case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_SRID:
            case MySqlParser.KW_SYSTEM_USER:
            case MySqlParser.KW_TP_CONNECTION_ADMIN:
            case MySqlParser.KW_WEIGHT_STRING:
            case MySqlParser.MOD:
            case MySqlParser.ID:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6984;
                this.simpleId();
                }
                break;
            case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6985;
                this.match(MySqlParser.CHARSET_REVERSE_QOUTE_STRING);
                }
                break;
            case MySqlParser.STRING_LITERAL:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6986;
                this.match(MySqlParser.STRING_LITERAL);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public simpleId(): SimpleIdContext {
        let localContext = new SimpleIdContext(this.context, this.state);
        this.enterRule(localContext, 704, MySqlParser.RULE_simpleId);
        try {
            this.state = 6998;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1009, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 6989;
                this.match(MySqlParser.ID);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 6990;
                this.charsetNameBase();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 6991;
                this.transactionLevelBase();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 6992;
                this.engineNameBase();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 6993;
                this.privilegesBase();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 6994;
                this.intervalTypeBase();
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 6995;
                this.dataTypeBase();
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 6996;
                this.keywordsCanBeId();
                }
                break;
            case 9:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 6997;
                this.scalarFunctionName();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dottedId(): DottedIdContext {
        let localContext = new DottedIdContext(this.context, this.state);
        this.enterRule(localContext, 706, MySqlParser.RULE_dottedId);
        try {
            this.state = 7004;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1010, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7000;
                this.match(MySqlParser.DOT);
                this.state = 7001;
                this.match(MySqlParser.ID);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7002;
                this.match(MySqlParser.DOT);
                this.state = 7003;
                this.uid();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public decimalLiteral(): DecimalLiteralContext {
        let localContext = new DecimalLiteralContext(this.context, this.state);
        this.enterRule(localContext, 708, MySqlParser.RULE_decimalLiteral);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7006;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 871)) & ~0x1F) === 0 && ((1 << (_la - 871)) & 20495) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public fileSizeLiteral(): FileSizeLiteralContext {
        let localContext = new FileSizeLiteralContext(this.context, this.state);
        this.enterRule(localContext, 710, MySqlParser.RULE_fileSizeLiteral);
        try {
            this.state = 7010;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.FILESIZE_LITERAL:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7008;
                this.match(MySqlParser.FILESIZE_LITERAL);
                }
                break;
            case MySqlParser.ZERO_DECIMAL:
            case MySqlParser.ONE_DECIMAL:
            case MySqlParser.TWO_DECIMAL:
            case MySqlParser.THREE_DECIMAL:
            case MySqlParser.DECIMAL_LITERAL:
            case MySqlParser.REAL_LITERAL:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7009;
                this.decimalLiteral();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public stringLiteral(): StringLiteralContext {
        let localContext = new StringLiteralContext(this.context, this.state);
        this.enterRule(localContext, 712, MySqlParser.RULE_stringLiteral);
        let _la: number;
        try {
            let alternative: number;
            this.state = 7035;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1018, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7017;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.STRING_CHARSET_NAME:
                    {
                    this.state = 7013;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 888) {
                        {
                        this.state = 7012;
                        this.match(MySqlParser.STRING_CHARSET_NAME);
                        }
                    }

                    this.state = 7015;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                    break;
                case MySqlParser.START_NATIONAL_STRING_LITERAL:
                    {
                    this.state = 7016;
                    this.match(MySqlParser.START_NATIONAL_STRING_LITERAL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 7020;
                this.errorHandler.sync(this);
                alternative = 1;
                do {
                    switch (alternative) {
                    case 1:
                        {
                        {
                        this.state = 7019;
                        this.match(MySqlParser.STRING_LITERAL);
                        }
                        }
                        break;
                    default:
                        throw new antlr.NoViableAltException(this);
                    }
                    this.state = 7022;
                    this.errorHandler.sync(this);
                    alternative = this.interpreter.adaptivePredict(this.tokenStream, 1014, this.context);
                } while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7029;
                this.errorHandler.sync(this);
                switch (this.tokenStream.LA(1)) {
                case MySqlParser.STRING_LITERAL:
                case MySqlParser.STRING_CHARSET_NAME:
                    {
                    this.state = 7025;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (_la === 888) {
                        {
                        this.state = 7024;
                        this.match(MySqlParser.STRING_CHARSET_NAME);
                        }
                    }

                    this.state = 7027;
                    this.match(MySqlParser.STRING_LITERAL);
                    }
                    break;
                case MySqlParser.START_NATIONAL_STRING_LITERAL:
                    {
                    this.state = 7028;
                    this.match(MySqlParser.START_NATIONAL_STRING_LITERAL);
                    }
                    break;
                default:
                    throw new antlr.NoViableAltException(this);
                }
                this.state = 7033;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1017, this.context) ) {
                case 1:
                    {
                    this.state = 7031;
                    this.match(MySqlParser.KW_COLLATE);
                    this.state = 7032;
                    this.collationName();
                    }
                    break;
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public booleanLiteral(): BooleanLiteralContext {
        let localContext = new BooleanLiteralContext(this.context, this.state);
        this.enterRule(localContext, 714, MySqlParser.RULE_booleanLiteral);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7037;
            _la = this.tokenStream.LA(1);
            if(!(_la === 63 || _la === 179)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public hexadecimalLiteral(): HexadecimalLiteralContext {
        let localContext = new HexadecimalLiteralContext(this.context, this.state);
        this.enterRule(localContext, 716, MySqlParser.RULE_hexadecimalLiteral);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7040;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 888) {
                {
                this.state = 7039;
                this.match(MySqlParser.STRING_CHARSET_NAME);
                }
            }

            this.state = 7042;
            this.match(MySqlParser.HEXADECIMAL_LITERAL);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public nullNotnull(): NullNotnullContext {
        let localContext = new NullNotnullContext(this.context, this.state);
        this.enterRule(localContext, 718, MySqlParser.RULE_nullNotnull);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7045;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 114) {
                {
                this.state = 7044;
                this.match(MySqlParser.KW_NOT);
                }
            }

            this.state = 7047;
            _la = this.tokenStream.LA(1);
            if(!(_la === 116 || _la === 886)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public constant(): ConstantContext {
        let localContext = new ConstantContext(this.context, this.state);
        this.enterRule(localContext, 720, MySqlParser.RULE_constant);
        let _la: number;
        try {
            this.state = 7061;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1022, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7049;
                this.stringLiteral();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7050;
                this.decimalLiteral();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7051;
                this.match(MySqlParser.MINUS);
                this.state = 7052;
                this.decimalLiteral();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7053;
                this.hexadecimalLiteral();
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7054;
                this.booleanLiteral();
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 7055;
                this.match(MySqlParser.REAL_LITERAL);
                }
                break;
            case 7:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 7056;
                this.match(MySqlParser.BIT_STRING);
                }
                break;
            case 8:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 7058;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 114) {
                    {
                    this.state = 7057;
                    this.match(MySqlParser.KW_NOT);
                    }
                }

                this.state = 7060;
                localContext._nullLiteral = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 116 || _la === 886)) {
                    localContext._nullLiteral = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dataType(): DataTypeContext {
        let localContext = new DataTypeContext(this.context, this.state);
        this.enterRule(localContext, 722, MySqlParser.RULE_dataType);
        let _la: number;
        try {
            this.state = 7189;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1051, this.context) ) {
            case 1:
                localContext = new StringDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7063;
                (localContext as StringDataTypeContext)._typeName = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 26 || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 31239) !== 0) || _la === 498)) {
                    (localContext as StringDataTypeContext)._typeName = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7065;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 240) {
                    {
                    this.state = 7064;
                    this.match(MySqlParser.KW_VARYING);
                    }
                }

                this.state = 7068;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1024, this.context) ) {
                case 1:
                    {
                    this.state = 7067;
                    this.lengthOneDimension();
                    }
                    break;
                }
                this.state = 7071;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1025, this.context) ) {
                case 1:
                    {
                    this.state = 7070;
                    this.match(MySqlParser.KW_BINARY);
                    }
                    break;
                }
                this.state = 7076;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 26 || _la === 224 || _la === 823) {
                    {
                    this.state = 7073;
                    this.charSet();
                    this.state = 7074;
                    this.charsetName();
                    }
                }

                this.state = 7081;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1027, this.context) ) {
                case 1:
                    {
                    this.state = 7078;
                    this.match(MySqlParser.KW_COLLATE);
                    this.state = 7079;
                    this.collationName();
                    }
                    break;
                case 2:
                    {
                    this.state = 7080;
                    this.match(MySqlParser.KW_BINARY);
                    }
                    break;
                }
                }
                break;
            case 2:
                localContext = new NationalVaryingStringDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7083;
                this.match(MySqlParser.KW_NATIONAL);
                this.state = 7084;
                (localContext as NationalVaryingStringDataTypeContext)._typeName = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 26 || _la === 224)) {
                    (localContext as NationalVaryingStringDataTypeContext)._typeName = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7085;
                this.match(MySqlParser.KW_VARYING);
                this.state = 7087;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1028, this.context) ) {
                case 1:
                    {
                    this.state = 7086;
                    this.lengthOneDimension();
                    }
                    break;
                }
                this.state = 7090;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 228) {
                    {
                    this.state = 7089;
                    this.match(MySqlParser.KW_BINARY);
                    }
                }

                }
                break;
            case 3:
                localContext = new NationalStringDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7092;
                this.match(MySqlParser.KW_NATIONAL);
                this.state = 7093;
                (localContext as NationalStringDataTypeContext)._typeName = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 26 || _la === 224 || _la === 225)) {
                    (localContext as NationalStringDataTypeContext)._typeName = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7095;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1030, this.context) ) {
                case 1:
                    {
                    this.state = 7094;
                    this.lengthOneDimension();
                    }
                    break;
                }
                this.state = 7098;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 228) {
                    {
                    this.state = 7097;
                    this.match(MySqlParser.KW_BINARY);
                    }
                }

                }
                break;
            case 4:
                localContext = new NationalStringDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7100;
                this.match(MySqlParser.KW_NCHAR);
                this.state = 7101;
                (localContext as NationalStringDataTypeContext)._typeName = this.match(MySqlParser.KW_VARCHAR);
                this.state = 7103;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1032, this.context) ) {
                case 1:
                    {
                    this.state = 7102;
                    this.lengthOneDimension();
                    }
                    break;
                }
                this.state = 7106;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 228) {
                    {
                    this.state = 7105;
                    this.match(MySqlParser.KW_BINARY);
                    }
                }

                }
                break;
            case 5:
                localContext = new DimensionDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7108;
                (localContext as DimensionDataTypeContext)._typeName = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4095) !== 0))) {
                    (localContext as DimensionDataTypeContext)._typeName = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7110;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1034, this.context) ) {
                case 1:
                    {
                    this.state = 7109;
                    this.lengthOneDimension();
                    }
                    break;
                }
                this.state = 7115;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 184 || _la === 197 || _la === 596) {
                    {
                    {
                    this.state = 7112;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 184 || _la === 197 || _la === 596)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                    }
                    this.state = 7117;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case 6:
                localContext = new DimensionDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 7118;
                (localContext as DimensionDataTypeContext)._typeName = this.match(MySqlParser.KW_REAL);
                this.state = 7120;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1036, this.context) ) {
                case 1:
                    {
                    this.state = 7119;
                    this.lengthTwoDimension();
                    }
                    break;
                }
                this.state = 7125;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 184 || _la === 197 || _la === 596) {
                    {
                    {
                    this.state = 7122;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 184 || _la === 197 || _la === 596)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                    }
                    this.state = 7127;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case 7:
                localContext = new DimensionDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 7128;
                (localContext as DimensionDataTypeContext)._typeName = this.match(MySqlParser.KW_DOUBLE);
                this.state = 7130;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 212) {
                    {
                    this.state = 7129;
                    this.match(MySqlParser.KW_PRECISION);
                    }
                }

                this.state = 7133;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1039, this.context) ) {
                case 1:
                    {
                    this.state = 7132;
                    this.lengthTwoDimension();
                    }
                    break;
                }
                this.state = 7138;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 184 || _la === 197 || _la === 596) {
                    {
                    {
                    this.state = 7135;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 184 || _la === 197 || _la === 596)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                    }
                    this.state = 7140;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case 8:
                localContext = new DimensionDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 7141;
                (localContext as DimensionDataTypeContext)._typeName = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(((((_la - 213)) & ~0x1F) === 0 && ((1 << (_la - 213)) & 63) !== 0) || _la === 403)) {
                    (localContext as DimensionDataTypeContext)._typeName = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7143;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1041, this.context) ) {
                case 1:
                    {
                    this.state = 7142;
                    this.lengthTwoOptionalDimension();
                    }
                    break;
                }
                this.state = 7148;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 184 || _la === 197 || _la === 596) {
                    {
                    {
                    this.state = 7145;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 184 || _la === 197 || _la === 596)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                    }
                    this.state = 7150;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case 9:
                localContext = new SimpleDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 7151;
                (localContext as SimpleDataTypeContext)._typeName = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 4237313) !== 0) || _la === 321 || _la === 322)) {
                    (localContext as SimpleDataTypeContext)._typeName = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 10:
                localContext = new DimensionDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 7152;
                (localContext as DimensionDataTypeContext)._typeName = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(((((_la - 220)) & ~0x1F) === 0 && ((1 << (_la - 220)) & 2831) !== 0) || _la === 319)) {
                    (localContext as DimensionDataTypeContext)._typeName = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7154;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1043, this.context) ) {
                case 1:
                    {
                    this.state = 7153;
                    this.lengthOneDimension();
                    }
                    break;
                }
                }
                break;
            case 11:
                localContext = new CollectionDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 7156;
                (localContext as CollectionDataTypeContext)._typeName = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 155 || _la === 239)) {
                    (localContext as CollectionDataTypeContext)._typeName = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7157;
                this.collectionOptions();
                this.state = 7159;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 228) {
                    {
                    this.state = 7158;
                    this.match(MySqlParser.KW_BINARY);
                    }
                }

                this.state = 7164;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 26 || _la === 224 || _la === 823) {
                    {
                    this.state = 7161;
                    this.charSet();
                    this.state = 7162;
                    this.charsetName();
                    }
                }

                }
                break;
            case 12:
                localContext = new SpatialDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 7166;
                (localContext as SpatialDataTypeContext)._typeName = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 442 || ((((_la - 813)) & ~0x1F) === 0 && ((1 << (_la - 813)) & 511) !== 0))) {
                    (localContext as SpatialDataTypeContext)._typeName = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7169;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 834) {
                    {
                    this.state = 7167;
                    this.match(MySqlParser.KW_SRID);
                    this.state = 7168;
                    this.decimalLiteral();
                    }
                }

                }
                break;
            case 13:
                localContext = new LongVarcharDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 7171;
                (localContext as LongVarcharDataTypeContext)._typeName = this.match(MySqlParser.KW_LONG);
                this.state = 7173;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 225) {
                    {
                    this.state = 7172;
                    this.match(MySqlParser.KW_VARCHAR);
                    }
                }

                this.state = 7176;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 228) {
                    {
                    this.state = 7175;
                    this.match(MySqlParser.KW_BINARY);
                    }
                }

                this.state = 7181;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 26 || _la === 224 || _la === 823) {
                    {
                    this.state = 7178;
                    this.charSet();
                    this.state = 7179;
                    this.charsetName();
                    }
                }

                this.state = 7185;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1050, this.context) ) {
                case 1:
                    {
                    this.state = 7183;
                    this.match(MySqlParser.KW_COLLATE);
                    this.state = 7184;
                    this.collationName();
                    }
                    break;
                }
                }
                break;
            case 14:
                localContext = new LongVarbinaryDataTypeContext(localContext);
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 7187;
                this.match(MySqlParser.KW_LONG);
                this.state = 7188;
                this.match(MySqlParser.KW_VARBINARY);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public collectionOptions(): CollectionOptionsContext {
        let localContext = new CollectionOptionsContext(this.context, this.state);
        this.enterRule(localContext, 724, MySqlParser.RULE_collectionOptions);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7191;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 7192;
            this.match(MySqlParser.STRING_LITERAL);
            this.state = 7197;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 7193;
                this.match(MySqlParser.COMMA);
                this.state = 7194;
                this.match(MySqlParser.STRING_LITERAL);
                }
                }
                this.state = 7199;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 7200;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public convertedDataType(): ConvertedDataTypeContext {
        let localContext = new ConvertedDataTypeContext(this.context, this.state);
        this.enterRule(localContext, 726, MySqlParser.RULE_convertedDataType);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7224;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_BINARY:
            case MySqlParser.KW_NCHAR:
                {
                this.state = 7202;
                localContext._typeName = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 228 || _la === 498)) {
                    localContext._typeName = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7204;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 866) {
                    {
                    this.state = 7203;
                    this.lengthOneDimension();
                    }
                }

                }
                break;
            case MySqlParser.KW_CHAR:
                {
                this.state = 7206;
                localContext._typeName = this.match(MySqlParser.KW_CHAR);
                this.state = 7208;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 866) {
                    {
                    this.state = 7207;
                    this.lengthOneDimension();
                    }
                }

                this.state = 7213;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 26 || _la === 224 || _la === 823) {
                    {
                    this.state = 7210;
                    this.charSet();
                    this.state = 7211;
                    this.charsetName();
                    }
                }

                }
                break;
            case MySqlParser.KW_INT:
            case MySqlParser.KW_INTEGER:
            case MySqlParser.KW_DATE:
            case MySqlParser.KW_TIME:
            case MySqlParser.KW_DATETIME:
            case MySqlParser.KW_JSON:
                {
                this.state = 7215;
                localContext._typeName = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(((((_la - 202)) & ~0x1F) === 0 && ((1 << (_la - 202)) & 1441857) !== 0) || _la === 442)) {
                    localContext._typeName = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case MySqlParser.KW_DECIMAL:
            case MySqlParser.KW_DEC:
                {
                this.state = 7216;
                localContext._typeName = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 216 || _la === 217)) {
                    localContext._typeName = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7218;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 866) {
                    {
                    this.state = 7217;
                    this.lengthTwoOptionalDimension();
                    }
                }

                }
                break;
            case MySqlParser.KW_UNSIGNED:
            case MySqlParser.KW_SIGNED:
                {
                this.state = 7220;
                _la = this.tokenStream.LA(1);
                if(!(_la === 184 || _la === 596)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7222;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 202 || _la === 208) {
                    {
                    this.state = 7221;
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 202 || _la === 208)) {
                    this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                }

                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            this.state = 7227;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 12) {
                {
                this.state = 7226;
                this.match(MySqlParser.KW_ARRAY);
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public lengthOneDimension(): LengthOneDimensionContext {
        let localContext = new LengthOneDimensionContext(this.context, this.state);
        this.enterRule(localContext, 728, MySqlParser.RULE_lengthOneDimension);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7229;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 7230;
            this.decimalLiteral();
            this.state = 7231;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public lengthTwoDimension(): LengthTwoDimensionContext {
        let localContext = new LengthTwoDimensionContext(this.context, this.state);
        this.enterRule(localContext, 730, MySqlParser.RULE_lengthTwoDimension);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7233;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 7234;
            this.decimalLiteral();
            this.state = 7235;
            this.match(MySqlParser.COMMA);
            this.state = 7236;
            this.decimalLiteral();
            this.state = 7237;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public lengthTwoOptionalDimension(): LengthTwoOptionalDimensionContext {
        let localContext = new LengthTwoOptionalDimensionContext(this.context, this.state);
        this.enterRule(localContext, 732, MySqlParser.RULE_lengthTwoOptionalDimension);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7239;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 7240;
            this.decimalLiteral();
            this.state = 7243;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 868) {
                {
                this.state = 7241;
                this.match(MySqlParser.COMMA);
                this.state = 7242;
                this.decimalLiteral();
                }
            }

            this.state = 7245;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public indexColumnNames(): IndexColumnNamesContext {
        let localContext = new IndexColumnNamesContext(this.context, this.state);
        this.enterRule(localContext, 734, MySqlParser.RULE_indexColumnNames);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7247;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 7248;
            this.indexColumnName();
            this.state = 7253;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 7249;
                this.match(MySqlParser.COMMA);
                this.state = 7250;
                this.indexColumnName();
                }
                }
                this.state = 7255;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 7256;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public expressions(): ExpressionsContext {
        let localContext = new ExpressionsContext(this.context, this.state);
        this.enterRule(localContext, 736, MySqlParser.RULE_expressions);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7258;
            this.expression(0);
            this.state = 7263;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 7259;
                this.match(MySqlParser.COMMA);
                this.state = 7260;
                this.expression(0);
                }
                }
                this.state = 7265;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public valuesOrValueList(): ValuesOrValueListContext {
        let localContext = new ValuesOrValueListContext(this.context, this.state);
        this.enterRule(localContext, 738, MySqlParser.RULE_valuesOrValueList);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7266;
            _la = this.tokenStream.LA(1);
            if(!(_la === 189 || _la === 682)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 7267;
            this.expressionsWithDefaults();
            this.state = 7272;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 7268;
                this.match(MySqlParser.COMMA);
                this.state = 7269;
                this.expressionsWithDefaults();
                }
                }
                this.state = 7274;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public expressionsWithDefaults(): ExpressionsWithDefaultsContext {
        let localContext = new ExpressionsWithDefaultsContext(this.context, this.state);
        this.enterRule(localContext, 740, MySqlParser.RULE_expressionsWithDefaults);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7275;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 7276;
            this.expressionOrDefault();
            this.state = 7281;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 7277;
                this.match(MySqlParser.COMMA);
                this.state = 7278;
                this.expressionOrDefault();
                }
                }
                this.state = 7283;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            this.state = 7284;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public expressionOrDefault(): ExpressionOrDefaultContext {
        let localContext = new ExpressionOrDefaultContext(this.context, this.state);
        this.enterRule(localContext, 742, MySqlParser.RULE_expressionOrDefault);
        try {
            this.state = 7288;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1065, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7286;
                this.expression(0);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7287;
                this.match(MySqlParser.KW_DEFAULT);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public constants(): ConstantsContext {
        let localContext = new ConstantsContext(this.context, this.state);
        this.enterRule(localContext, 744, MySqlParser.RULE_constants);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7290;
            this.constant();
            this.state = 7295;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 7291;
                this.match(MySqlParser.COMMA);
                this.state = 7292;
                this.constant();
                }
                }
                this.state = 7297;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public simpleStrings(): SimpleStringsContext {
        let localContext = new SimpleStringsContext(this.context, this.state);
        this.enterRule(localContext, 746, MySqlParser.RULE_simpleStrings);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7298;
            this.match(MySqlParser.STRING_LITERAL);
            this.state = 7303;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 7299;
                this.match(MySqlParser.COMMA);
                this.state = 7300;
                this.match(MySqlParser.STRING_LITERAL);
                }
                }
                this.state = 7305;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public userVariables(): UserVariablesContext {
        let localContext = new UserVariablesContext(this.context, this.state);
        this.enterRule(localContext, 748, MySqlParser.RULE_userVariables);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7306;
            this.match(MySqlParser.LOCAL_ID);
            this.state = 7311;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 7307;
                this.match(MySqlParser.COMMA);
                this.state = 7308;
                this.match(MySqlParser.LOCAL_ID);
                }
                }
                this.state = 7313;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public defaultValue(): DefaultValueContext {
        let localContext = new DefaultValueContext(this.context, this.state);
        this.enterRule(localContext, 750, MySqlParser.RULE_defaultValue);
        try {
            this.state = 7340;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1071, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7314;
                this.match(MySqlParser.KW_NULL_LITERAL);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7315;
                this.match(MySqlParser.KW_CAST);
                this.state = 7316;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7317;
                this.expression(0);
                this.state = 7318;
                this.match(MySqlParser.KW_AS);
                this.state = 7319;
                this.convertedDataType();
                this.state = 7320;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7323;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1069, this.context) ) {
                case 1:
                    {
                    this.state = 7322;
                    this.unaryOperator();
                    }
                    break;
                }
                this.state = 7325;
                this.constant();
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7326;
                this.currentTimestamp();
                this.state = 7330;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1070, this.context) ) {
                case 1:
                    {
                    this.state = 7327;
                    this.match(MySqlParser.KW_ON);
                    this.state = 7328;
                    this.match(MySqlParser.KW_UPDATE);
                    this.state = 7329;
                    this.currentTimestamp();
                    }
                    break;
                }
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7332;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7333;
                this.expression(0);
                this.state = 7334;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 6:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 7336;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7337;
                this.fullId();
                this.state = 7338;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public currentTimestamp(): CurrentTimestampContext {
        let localContext = new CurrentTimestampContext(this.context, this.state);
        this.enterRule(localContext, 752, MySqlParser.RULE_currentTimestamp);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7356;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_CURRENT_TIMESTAMP:
            case MySqlParser.KW_LOCALTIME:
            case MySqlParser.KW_LOCALTIMESTAMP:
                {
                this.state = 7342;
                _la = this.tokenStream.LA(1);
                if(!(((((_la - 287)) & ~0x1F) === 0 && ((1 << (_la - 287)) & 131) !== 0))) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7348;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1073, this.context) ) {
                case 1:
                    {
                    this.state = 7343;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 7345;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    if (((((_la - 871)) & ~0x1F) === 0 && ((1 << (_la - 871)) & 20495) !== 0)) {
                        {
                        this.state = 7344;
                        this.decimalLiteral();
                        }
                    }

                    this.state = 7347;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                }
                }
                break;
            case MySqlParser.KW_NOW:
                {
                this.state = 7350;
                this.match(MySqlParser.KW_NOW);
                this.state = 7351;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7353;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (((((_la - 871)) & ~0x1F) === 0 && ((1 << (_la - 871)) & 20495) !== 0)) {
                    {
                    this.state = 7352;
                    this.decimalLiteral();
                    }
                }

                this.state = 7355;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public ifExists(): IfExistsContext {
        let localContext = new IfExistsContext(this.context, this.state);
        this.enterRule(localContext, 754, MySqlParser.RULE_ifExists);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7358;
            this.match(MySqlParser.KW_IF);
            this.state = 7359;
            this.match(MySqlParser.KW_EXISTS);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public ifNotExists(): IfNotExistsContext {
        let localContext = new IfNotExistsContext(this.context, this.state);
        this.enterRule(localContext, 756, MySqlParser.RULE_ifNotExists);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7361;
            this.match(MySqlParser.KW_IF);
            this.state = 7362;
            this.match(MySqlParser.KW_NOT);
            this.state = 7363;
            this.match(MySqlParser.KW_EXISTS);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public orReplace(): OrReplaceContext {
        let localContext = new OrReplaceContext(this.context, this.state);
        this.enterRule(localContext, 758, MySqlParser.RULE_orReplace);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7365;
            this.match(MySqlParser.KW_OR);
            this.state = 7366;
            this.match(MySqlParser.KW_REPLACE);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public functionCall(): FunctionCallContext {
        let localContext = new FunctionCallContext(this.context, this.state);
        this.enterRule(localContext, 760, MySqlParser.RULE_functionCall);
        try {
            this.state = 7390;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1078, this.context) ) {
            case 1:
                localContext = new SpecificFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7368;
                this.specificFunction();
                }
                break;
            case 2:
                localContext = new AggregateFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7369;
                this.aggregateWindowedFunction();
                }
                break;
            case 3:
                localContext = new NonAggregateFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7370;
                this.nonAggregateWindowedFunction();
                }
                break;
            case 4:
                localContext = new ScalarFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7371;
                this.scalarFunctionName();
                this.state = 7378;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1076, this.context) ) {
                case 1:
                    {
                    this.state = 7372;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 7373;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                case 2:
                    {
                    this.state = 7374;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 7375;
                    this.functionArgs();
                    this.state = 7376;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                }
                }
                break;
            case 5:
                localContext = new UdfFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7380;
                this.functionName();
                this.state = 7387;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1077, this.context) ) {
                case 1:
                    {
                    this.state = 7381;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 7382;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                case 2:
                    {
                    this.state = 7383;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 7384;
                    this.functionArgs();
                    this.state = 7385;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                }
                }
                break;
            case 6:
                localContext = new PasswordFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 7389;
                this.passwordFunctionClause();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public specificFunction(): SpecificFunctionContext {
        let localContext = new SpecificFunctionContext(this.context, this.state);
        this.enterRule(localContext, 762, MySqlParser.RULE_specificFunction);
        let _la: number;
        try {
            this.state = 7571;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1102, this.context) ) {
            case 1:
                localContext = new SimpleFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7392;
                _la = this.tokenStream.LA(1);
                if(!(_la === 152 || ((((_la - 285)) & ~0x1F) === 0 && ((1 << (_la - 285)) & 262159) !== 0))) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7395;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1079, this.context) ) {
                case 1:
                    {
                    this.state = 7393;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 7394;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                    break;
                }
                }
                break;
            case 2:
                localContext = new CurrentUserContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7397;
                this.currentUserExpression();
                }
                break;
            case 3:
                localContext = new DataTypeFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7398;
                this.match(MySqlParser.KW_CONVERT);
                this.state = 7399;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7400;
                this.expression(0);
                this.state = 7401;
                (localContext as DataTypeFunctionCallContext)._separator = this.match(MySqlParser.COMMA);
                this.state = 7402;
                this.convertedDataType();
                this.state = 7403;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 4:
                localContext = new DataTypeFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7405;
                this.match(MySqlParser.KW_CONVERT);
                this.state = 7406;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7407;
                this.expression(0);
                this.state = 7408;
                this.match(MySqlParser.KW_USING);
                this.state = 7409;
                this.charsetName();
                this.state = 7410;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 5:
                localContext = new DataTypeFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7412;
                this.match(MySqlParser.KW_CAST);
                this.state = 7413;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7414;
                this.expression(0);
                this.state = 7415;
                this.match(MySqlParser.KW_AS);
                this.state = 7416;
                this.convertedDataType();
                this.state = 7417;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 6:
                localContext = new ValuesFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 7419;
                this.match(MySqlParser.KW_VALUES);
                this.state = 7420;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7421;
                this.columnName();
                this.state = 7422;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 7:
                localContext = new CaseExpressionFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 7424;
                this.match(MySqlParser.KW_CASE);
                this.state = 7425;
                this.expression(0);
                this.state = 7427;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                do {
                    {
                    {
                    this.state = 7426;
                    this.caseFuncAlternative();
                    }
                    }
                    this.state = 7429;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                } while (_la === 191);
                this.state = 7433;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 53) {
                    {
                    this.state = 7431;
                    this.match(MySqlParser.KW_ELSE);
                    this.state = 7432;
                    (localContext as CaseExpressionFunctionCallContext)._elseArg = this.functionArg();
                    }
                }

                this.state = 7435;
                this.match(MySqlParser.KW_END);
                }
                break;
            case 8:
                localContext = new CaseFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 7437;
                this.match(MySqlParser.KW_CASE);
                this.state = 7439;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                do {
                    {
                    {
                    this.state = 7438;
                    this.caseFuncAlternative();
                    }
                    }
                    this.state = 7441;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                } while (_la === 191);
                this.state = 7445;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 53) {
                    {
                    this.state = 7443;
                    this.match(MySqlParser.KW_ELSE);
                    this.state = 7444;
                    (localContext as CaseFunctionCallContext)._elseArg = this.functionArg();
                    }
                }

                this.state = 7447;
                this.match(MySqlParser.KW_END);
                }
                break;
            case 9:
                localContext = new CharFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 7449;
                this.match(MySqlParser.KW_CHAR);
                this.state = 7450;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7451;
                this.functionArgs();
                this.state = 7454;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 188) {
                    {
                    this.state = 7452;
                    this.match(MySqlParser.KW_USING);
                    this.state = 7453;
                    this.charsetName();
                    }
                }

                this.state = 7456;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 10:
                localContext = new PositionFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 7458;
                this.match(MySqlParser.KW_POSITION);
                this.state = 7459;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7462;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1085, this.context) ) {
                case 1:
                    {
                    this.state = 7460;
                    (localContext as PositionFunctionCallContext)._positionString = this.stringLiteral();
                    }
                    break;
                case 2:
                    {
                    this.state = 7461;
                    (localContext as PositionFunctionCallContext)._positionExpression = this.expression(0);
                    }
                    break;
                }
                this.state = 7464;
                this.match(MySqlParser.KW_IN);
                this.state = 7467;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1086, this.context) ) {
                case 1:
                    {
                    this.state = 7465;
                    (localContext as PositionFunctionCallContext)._inString = this.stringLiteral();
                    }
                    break;
                case 2:
                    {
                    this.state = 7466;
                    (localContext as PositionFunctionCallContext)._inExpression = this.expression(0);
                    }
                    break;
                }
                this.state = 7469;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 11:
                localContext = new SubstrFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 7471;
                _la = this.tokenStream.LA(1);
                if(!(_la === 297 || _la === 298)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7472;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7475;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1087, this.context) ) {
                case 1:
                    {
                    this.state = 7473;
                    (localContext as SubstrFunctionCallContext)._sourceString = this.stringLiteral();
                    }
                    break;
                case 2:
                    {
                    this.state = 7474;
                    (localContext as SubstrFunctionCallContext)._sourceExpression = this.expression(0);
                    }
                    break;
                }
                this.state = 7477;
                this.match(MySqlParser.KW_FROM);
                this.state = 7480;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1088, this.context) ) {
                case 1:
                    {
                    this.state = 7478;
                    (localContext as SubstrFunctionCallContext)._fromDecimal = this.decimalLiteral();
                    }
                    break;
                case 2:
                    {
                    this.state = 7479;
                    (localContext as SubstrFunctionCallContext)._fromExpression = this.expression(0);
                    }
                    break;
                }
                this.state = 7487;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 65) {
                    {
                    this.state = 7482;
                    this.match(MySqlParser.KW_FOR);
                    this.state = 7485;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 1089, this.context) ) {
                    case 1:
                        {
                        this.state = 7483;
                        (localContext as SubstrFunctionCallContext)._forDecimal = this.decimalLiteral();
                        }
                        break;
                    case 2:
                        {
                        this.state = 7484;
                        (localContext as SubstrFunctionCallContext)._forExpression = this.expression(0);
                        }
                        break;
                    }
                    }
                }

                this.state = 7489;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 12:
                localContext = new TrimFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 7491;
                this.match(MySqlParser.KW_TRIM);
                this.state = 7492;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7493;
                (localContext as TrimFunctionCallContext)._positioinForm = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 18 || _la === 96 || _la === 177)) {
                    (localContext as TrimFunctionCallContext)._positioinForm = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7496;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1091, this.context) ) {
                case 1:
                    {
                    this.state = 7494;
                    (localContext as TrimFunctionCallContext)._sourceString = this.stringLiteral();
                    }
                    break;
                case 2:
                    {
                    this.state = 7495;
                    (localContext as TrimFunctionCallContext)._sourceExpression = this.expression(0);
                    }
                    break;
                }
                this.state = 7498;
                this.match(MySqlParser.KW_FROM);
                this.state = 7501;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1092, this.context) ) {
                case 1:
                    {
                    this.state = 7499;
                    (localContext as TrimFunctionCallContext)._fromString = this.stringLiteral();
                    }
                    break;
                case 2:
                    {
                    this.state = 7500;
                    (localContext as TrimFunctionCallContext)._fromExpression = this.expression(0);
                    }
                    break;
                }
                this.state = 7503;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 13:
                localContext = new TrimFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 7505;
                this.match(MySqlParser.KW_TRIM);
                this.state = 7506;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7509;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1093, this.context) ) {
                case 1:
                    {
                    this.state = 7507;
                    (localContext as TrimFunctionCallContext)._sourceString = this.stringLiteral();
                    }
                    break;
                case 2:
                    {
                    this.state = 7508;
                    (localContext as TrimFunctionCallContext)._sourceExpression = this.expression(0);
                    }
                    break;
                }
                this.state = 7511;
                this.match(MySqlParser.KW_FROM);
                this.state = 7514;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1094, this.context) ) {
                case 1:
                    {
                    this.state = 7512;
                    (localContext as TrimFunctionCallContext)._fromString = this.stringLiteral();
                    }
                    break;
                case 2:
                    {
                    this.state = 7513;
                    (localContext as TrimFunctionCallContext)._fromExpression = this.expression(0);
                    }
                    break;
                }
                this.state = 7516;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 14:
                localContext = new WeightFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 7518;
                this.match(MySqlParser.KW_WEIGHT_STRING);
                this.state = 7519;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7522;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1095, this.context) ) {
                case 1:
                    {
                    this.state = 7520;
                    this.stringLiteral();
                    }
                    break;
                case 2:
                    {
                    this.state = 7521;
                    this.expression(0);
                    }
                    break;
                }
                this.state = 7530;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 13) {
                    {
                    this.state = 7524;
                    this.match(MySqlParser.KW_AS);
                    this.state = 7525;
                    (localContext as WeightFunctionCallContext)._stringFormat = this.tokenStream.LT(1);
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 224 || _la === 228)) {
                        (localContext as WeightFunctionCallContext)._stringFormat = this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 7526;
                    this.match(MySqlParser.LR_BRACKET);
                    this.state = 7527;
                    this.decimalLiteral();
                    this.state = 7528;
                    this.match(MySqlParser.RR_BRACKET);
                    }
                }

                this.state = 7533;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 448) {
                    {
                    this.state = 7532;
                    this.levelsInWeightString();
                    }
                }

                this.state = 7535;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 15:
                localContext = new ExtractFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 7537;
                this.match(MySqlParser.KW_EXTRACT);
                this.state = 7538;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7539;
                this.intervalType();
                this.state = 7540;
                this.match(MySqlParser.KW_FROM);
                this.state = 7543;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1098, this.context) ) {
                case 1:
                    {
                    this.state = 7541;
                    (localContext as ExtractFunctionCallContext)._sourceString = this.stringLiteral();
                    }
                    break;
                case 2:
                    {
                    this.state = 7542;
                    (localContext as ExtractFunctionCallContext)._sourceExpression = this.expression(0);
                    }
                    break;
                }
                this.state = 7545;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 16:
                localContext = new GetFormatFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 7547;
                this.match(MySqlParser.KW_GET_FORMAT);
                this.state = 7548;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7549;
                (localContext as GetFormatFunctionCallContext)._datetimeFormat = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 11) !== 0))) {
                    (localContext as GetFormatFunctionCallContext)._datetimeFormat = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7550;
                this.match(MySqlParser.COMMA);
                this.state = 7551;
                this.stringLiteral();
                this.state = 7552;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 17:
                localContext = new JsonValueFunctionCallContext(localContext);
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 7554;
                this.match(MySqlParser.KW_JSON_VALUE);
                this.state = 7555;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7556;
                this.expression(0);
                this.state = 7557;
                this.match(MySqlParser.COMMA);
                this.state = 7558;
                this.expression(0);
                this.state = 7561;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 579) {
                    {
                    this.state = 7559;
                    this.match(MySqlParser.KW_RETURNING);
                    this.state = 7560;
                    this.convertedDataType();
                    }
                }

                this.state = 7564;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1100, this.context) ) {
                case 1:
                    {
                    this.state = 7563;
                    this.jsonOnEmpty();
                    }
                    break;
                }
                this.state = 7567;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 42 || _la === 116 || _la === 382) {
                    {
                    this.state = 7566;
                    this.jsonOnError();
                    }
                }

                this.state = 7569;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public caseFuncAlternative(): CaseFuncAlternativeContext {
        let localContext = new CaseFuncAlternativeContext(this.context, this.state);
        this.enterRule(localContext, 764, MySqlParser.RULE_caseFuncAlternative);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7573;
            this.match(MySqlParser.KW_WHEN);
            this.state = 7574;
            localContext._condition = this.functionArg();
            this.state = 7575;
            this.match(MySqlParser.KW_THEN);
            this.state = 7576;
            localContext._consequent = this.functionArg();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public levelsInWeightString(): LevelsInWeightStringContext {
        let localContext = new LevelsInWeightStringContext(this.context, this.state);
        this.enterRule(localContext, 766, MySqlParser.RULE_levelsInWeightString);
        let _la: number;
        try {
            this.state = 7592;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1104, this.context) ) {
            case 1:
                localContext = new LevelWeightListContext(localContext);
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7578;
                this.match(MySqlParser.KW_LEVEL);
                this.state = 7579;
                this.levelInWeightListElement();
                this.state = 7584;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 7580;
                    this.match(MySqlParser.COMMA);
                    this.state = 7581;
                    this.levelInWeightListElement();
                    }
                    }
                    this.state = 7586;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                }
                break;
            case 2:
                localContext = new LevelWeightRangeContext(localContext);
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7587;
                this.match(MySqlParser.KW_LEVEL);
                this.state = 7588;
                (localContext as LevelWeightRangeContext)._firstLevel = this.decimalLiteral();
                this.state = 7589;
                this.match(MySqlParser.MINUS);
                this.state = 7590;
                (localContext as LevelWeightRangeContext)._lastLevel = this.decimalLiteral();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public levelInWeightListElement(): LevelInWeightListElementContext {
        let localContext = new LevelInWeightListElementContext(this.context, this.state);
        this.enterRule(localContext, 768, MySqlParser.RULE_levelInWeightListElement);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7594;
            this.decimalLiteral();
            this.state = 7596;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 14 || _la === 45 || _la === 830) {
                {
                this.state = 7595;
                localContext._orderType = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 14 || _la === 45 || _la === 830)) {
                    localContext._orderType = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public aggregateWindowedFunction(): AggregateWindowedFunctionContext {
        let localContext = new AggregateWindowedFunctionContext(this.context, this.state);
        this.enterRule(localContext, 770, MySqlParser.RULE_aggregateWindowedFunction);
        let _la: number;
        try {
            this.state = 7657;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_AVG:
            case MySqlParser.KW_MAX:
            case MySqlParser.KW_MIN:
            case MySqlParser.KW_SUM:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7598;
                _la = this.tokenStream.LA(1);
                if(!(((((_la - 258)) & ~0x1F) === 0 && ((1 << (_la - 258)) & 8400897) !== 0))) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7599;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7601;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1106, this.context) ) {
                case 1:
                    {
                    this.state = 7600;
                    localContext._aggregator = this.tokenStream.LT(1);
                    _la = this.tokenStream.LA(1);
                    if(!(_la === 7 || _la === 49)) {
                        localContext._aggregator = this.errorHandler.recoverInline(this);
                    }
                    else {
                        this.errorHandler.reportMatch(this);
                        this.consume();
                    }
                    }
                    break;
                }
                this.state = 7603;
                this.functionArg();
                this.state = 7604;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 7606;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1107, this.context) ) {
                case 1:
                    {
                    this.state = 7605;
                    this.overClause();
                    }
                    break;
                }
                }
                break;
            case MySqlParser.KW_COUNT:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7608;
                this.match(MySqlParser.KW_COUNT);
                this.state = 7609;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7617;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1109, this.context) ) {
                case 1:
                    {
                    this.state = 7610;
                    localContext._starArg = this.match(MySqlParser.STAR);
                    }
                    break;
                case 2:
                    {
                    this.state = 7612;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 1108, this.context) ) {
                    case 1:
                        {
                        this.state = 7611;
                        localContext._aggregator = this.match(MySqlParser.KW_ALL);
                        }
                        break;
                    }
                    this.state = 7614;
                    this.functionArg();
                    }
                    break;
                case 3:
                    {
                    this.state = 7615;
                    localContext._aggregator = this.match(MySqlParser.KW_DISTINCT);
                    this.state = 7616;
                    this.functionArgs();
                    }
                    break;
                }
                this.state = 7619;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 7621;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1110, this.context) ) {
                case 1:
                    {
                    this.state = 7620;
                    this.overClause();
                    }
                    break;
                }
                }
                break;
            case MySqlParser.KW_BIT_AND:
            case MySqlParser.KW_BIT_OR:
            case MySqlParser.KW_BIT_XOR:
            case MySqlParser.KW_STD:
            case MySqlParser.KW_STDDEV:
            case MySqlParser.KW_STDDEV_POP:
            case MySqlParser.KW_STDDEV_SAMP:
            case MySqlParser.KW_VAR_POP:
            case MySqlParser.KW_VAR_SAMP:
            case MySqlParser.KW_VARIANCE:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7623;
                _la = this.tokenStream.LA(1);
                if(!(((((_la - 259)) & ~0x1F) === 0 && ((1 << (_la - 259)) & 62652423) !== 0))) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7624;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7626;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1111, this.context) ) {
                case 1:
                    {
                    this.state = 7625;
                    localContext._aggregator = this.match(MySqlParser.KW_ALL);
                    }
                    break;
                }
                this.state = 7628;
                this.functionArg();
                this.state = 7629;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 7631;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1112, this.context) ) {
                case 1:
                    {
                    this.state = 7630;
                    this.overClause();
                    }
                    break;
                }
                }
                break;
            case MySqlParser.KW_GROUP_CONCAT:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7633;
                this.match(MySqlParser.KW_GROUP_CONCAT);
                this.state = 7634;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7636;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1113, this.context) ) {
                case 1:
                    {
                    this.state = 7635;
                    localContext._aggregator = this.match(MySqlParser.KW_DISTINCT);
                    }
                    break;
                }
                this.state = 7638;
                this.functionArgs();
                this.state = 7649;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 125) {
                    {
                    this.state = 7639;
                    this.match(MySqlParser.KW_ORDER);
                    this.state = 7640;
                    this.match(MySqlParser.KW_BY);
                    this.state = 7641;
                    this.orderByExpression();
                    this.state = 7646;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                    while (_la === 868) {
                        {
                        {
                        this.state = 7642;
                        this.match(MySqlParser.COMMA);
                        this.state = 7643;
                        this.orderByExpression();
                        }
                        }
                        this.state = 7648;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                    }
                    }
                }

                this.state = 7653;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 156) {
                    {
                    this.state = 7651;
                    this.match(MySqlParser.KW_SEPARATOR);
                    this.state = 7652;
                    localContext._separator = this.match(MySqlParser.STRING_LITERAL);
                    }
                }

                this.state = 7655;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public nonAggregateWindowedFunction(): NonAggregateWindowedFunctionContext {
        let localContext = new NonAggregateWindowedFunctionContext(this.context, this.state);
        this.enterRule(localContext, 772, MySqlParser.RULE_nonAggregateWindowedFunction);
        let _la: number;
        try {
            this.state = 7697;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_LAG:
            case MySqlParser.KW_LEAD:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7659;
                _la = this.tokenStream.LA(1);
                if(!(_la === 267 || _la === 269)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7660;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7661;
                this.expression(0);
                this.state = 7664;
                this.errorHandler.sync(this);
                switch (this.interpreter.adaptivePredict(this.tokenStream, 1118, this.context) ) {
                case 1:
                    {
                    this.state = 7662;
                    this.match(MySqlParser.COMMA);
                    this.state = 7663;
                    this.decimalLiteral();
                    }
                    break;
                }
                this.state = 7668;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 868) {
                    {
                    this.state = 7666;
                    this.match(MySqlParser.COMMA);
                    this.state = 7667;
                    this.decimalLiteral();
                    }
                }

                this.state = 7670;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 7671;
                this.overClause();
                }
                break;
            case MySqlParser.KW_FIRST_VALUE:
            case MySqlParser.KW_LAST_VALUE:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7673;
                _la = this.tokenStream.LA(1);
                if(!(_la === 265 || _la === 268)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7674;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7675;
                this.expression(0);
                this.state = 7676;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 7677;
                this.overClause();
                }
                break;
            case MySqlParser.KW_CUME_DIST:
            case MySqlParser.KW_DENSE_RANK:
            case MySqlParser.KW_PERCENT_RANK:
            case MySqlParser.KW_RANK:
            case MySqlParser.KW_ROW_NUMBER:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7679;
                _la = this.tokenStream.LA(1);
                if(!(((((_la - 263)) & ~0x1F) === 0 && ((1 << (_la - 263)) & 14339) !== 0))) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7680;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7681;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 7682;
                this.overClause();
                }
                break;
            case MySqlParser.KW_NTH_VALUE:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7683;
                this.match(MySqlParser.KW_NTH_VALUE);
                this.state = 7684;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7685;
                this.expression(0);
                this.state = 7686;
                this.match(MySqlParser.COMMA);
                this.state = 7687;
                this.decimalLiteral();
                this.state = 7688;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 7689;
                this.overClause();
                }
                break;
            case MySqlParser.KW_NTILE:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7691;
                this.match(MySqlParser.KW_NTILE);
                this.state = 7692;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7693;
                this.decimalLiteral();
                this.state = 7694;
                this.match(MySqlParser.RR_BRACKET);
                this.state = 7695;
                this.overClause();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public overClause(): OverClauseContext {
        let localContext = new OverClauseContext(this.context, this.state);
        this.enterRule(localContext, 774, MySqlParser.RULE_overClause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7699;
            this.match(MySqlParser.KW_OVER);
            this.state = 7705;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.LR_BRACKET:
                {
                this.state = 7700;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7701;
                this.windowSpec();
                this.state = 7702;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case MySqlParser.KW_ARRAY:
            case MySqlParser.KW_ATTRIBUTE:
            case MySqlParser.KW_BUCKETS:
            case MySqlParser.KW_CONDITION:
            case MySqlParser.KW_CURRENT:
            case MySqlParser.KW_CURRENT_USER:
            case MySqlParser.KW_DATABASE:
            case MySqlParser.KW_DEFAULT:
            case MySqlParser.KW_DIAGNOSTICS:
            case MySqlParser.KW_EMPTY:
            case MySqlParser.KW_ENFORCED:
            case MySqlParser.KW_EXCEPT:
            case MySqlParser.KW_GROUP:
            case MySqlParser.KW_IF:
            case MySqlParser.KW_INSERT:
            case MySqlParser.KW_LATERAL:
            case MySqlParser.KW_LEFT:
            case MySqlParser.KW_NUMBER:
            case MySqlParser.KW_OPTIONAL:
            case MySqlParser.KW_ORDER:
            case MySqlParser.KW_PRIMARY:
            case MySqlParser.KW_REPEAT:
            case MySqlParser.KW_REPLACE:
            case MySqlParser.KW_RIGHT:
            case MySqlParser.KW_SCHEMA:
            case MySqlParser.KW_SKIP_QUERY_REWRITE:
            case MySqlParser.KW_STACKED:
            case MySqlParser.KW_DATE:
            case MySqlParser.KW_TIME:
            case MySqlParser.KW_TIMESTAMP:
            case MySqlParser.KW_DATETIME:
            case MySqlParser.KW_YEAR:
            case MySqlParser.KW_BINARY:
            case MySqlParser.KW_TEXT:
            case MySqlParser.KW_ENUM:
            case MySqlParser.KW_SERIAL:
            case MySqlParser.KW_JSON_TABLE:
            case MySqlParser.KW_JSON_VALUE:
            case MySqlParser.KW_NESTED:
            case MySqlParser.KW_ORDINALITY:
            case MySqlParser.KW_PATH:
            case MySqlParser.KW_AVG:
            case MySqlParser.KW_BIT_AND:
            case MySqlParser.KW_BIT_OR:
            case MySqlParser.KW_BIT_XOR:
            case MySqlParser.KW_COUNT:
            case MySqlParser.KW_CUME_DIST:
            case MySqlParser.KW_DENSE_RANK:
            case MySqlParser.KW_FIRST_VALUE:
            case MySqlParser.KW_GROUP_CONCAT:
            case MySqlParser.KW_LAG:
            case MySqlParser.KW_LAST_VALUE:
            case MySqlParser.KW_LEAD:
            case MySqlParser.KW_MAX:
            case MySqlParser.KW_MIN:
            case MySqlParser.KW_NTILE:
            case MySqlParser.KW_NTH_VALUE:
            case MySqlParser.KW_PERCENT_RANK:
            case MySqlParser.KW_RANK:
            case MySqlParser.KW_ROW_NUMBER:
            case MySqlParser.KW_STD:
            case MySqlParser.KW_STDDEV:
            case MySqlParser.KW_STDDEV_POP:
            case MySqlParser.KW_STDDEV_SAMP:
            case MySqlParser.KW_SUM:
            case MySqlParser.KW_VAR_POP:
            case MySqlParser.KW_VAR_SAMP:
            case MySqlParser.KW_VARIANCE:
            case MySqlParser.KW_CURRENT_DATE:
            case MySqlParser.KW_CURRENT_TIME:
            case MySqlParser.KW_CURRENT_TIMESTAMP:
            case MySqlParser.KW_LOCALTIME:
            case MySqlParser.KW_CURDATE:
            case MySqlParser.KW_CURTIME:
            case MySqlParser.KW_DATE_ADD:
            case MySqlParser.KW_DATE_SUB:
            case MySqlParser.KW_LOCALTIMESTAMP:
            case MySqlParser.KW_NOW:
            case MySqlParser.KW_POSITION:
            case MySqlParser.KW_SUBSTR:
            case MySqlParser.KW_SUBSTRING:
            case MySqlParser.KW_SYSDATE:
            case MySqlParser.KW_TRIM:
            case MySqlParser.KW_UTC_DATE:
            case MySqlParser.KW_UTC_TIME:
            case MySqlParser.KW_UTC_TIMESTAMP:
            case MySqlParser.KW_ACCOUNT:
            case MySqlParser.KW_ACTION:
            case MySqlParser.KW_AFTER:
            case MySqlParser.KW_AGGREGATE:
            case MySqlParser.KW_ALGORITHM:
            case MySqlParser.KW_ANY:
            case MySqlParser.KW_AT:
            case MySqlParser.KW_AUTHORS:
            case MySqlParser.KW_AUTOCOMMIT:
            case MySqlParser.KW_AUTOEXTEND_SIZE:
            case MySqlParser.KW_AUTO_INCREMENT:
            case MySqlParser.KW_AVG_ROW_LENGTH:
            case MySqlParser.KW_BEGIN:
            case MySqlParser.KW_BINLOG:
            case MySqlParser.KW_BIT:
            case MySqlParser.KW_BLOCK:
            case MySqlParser.KW_BOOL:
            case MySqlParser.KW_BOOLEAN:
            case MySqlParser.KW_BTREE:
            case MySqlParser.KW_CACHE:
            case MySqlParser.KW_CASCADED:
            case MySqlParser.KW_CHAIN:
            case MySqlParser.KW_CHANGED:
            case MySqlParser.KW_CHANNEL:
            case MySqlParser.KW_CHECKSUM:
            case MySqlParser.KW_CIPHER:
            case MySqlParser.KW_CLASS_ORIGIN:
            case MySqlParser.KW_CLIENT:
            case MySqlParser.KW_CLOSE:
            case MySqlParser.KW_COALESCE:
            case MySqlParser.KW_CODE:
            case MySqlParser.KW_COLUMNS:
            case MySqlParser.KW_COLUMN_FORMAT:
            case MySqlParser.KW_COLUMN_NAME:
            case MySqlParser.KW_COMMENT:
            case MySqlParser.KW_COMMIT:
            case MySqlParser.KW_COMPACT:
            case MySqlParser.KW_COMPLETION:
            case MySqlParser.KW_COMPRESSED:
            case MySqlParser.KW_COMPRESSION:
            case MySqlParser.KW_CONCURRENT:
            case MySqlParser.KW_CONNECT:
            case MySqlParser.KW_CONNECTION:
            case MySqlParser.KW_CONSISTENT:
            case MySqlParser.KW_CONSTRAINT_CATALOG:
            case MySqlParser.KW_CONSTRAINT_SCHEMA:
            case MySqlParser.KW_CONSTRAINT_NAME:
            case MySqlParser.KW_CONTAINS:
            case MySqlParser.KW_CONTEXT:
            case MySqlParser.KW_CONTRIBUTORS:
            case MySqlParser.KW_COPY:
            case MySqlParser.KW_CPU:
            case MySqlParser.KW_CURSOR_NAME:
            case MySqlParser.KW_DATA:
            case MySqlParser.KW_DATAFILE:
            case MySqlParser.KW_DEALLOCATE:
            case MySqlParser.KW_DEFAULT_AUTH:
            case MySqlParser.KW_DEFINER:
            case MySqlParser.KW_DELAY_KEY_WRITE:
            case MySqlParser.KW_DES_KEY_FILE:
            case MySqlParser.KW_DIRECTORY:
            case MySqlParser.KW_DISABLE:
            case MySqlParser.KW_DISCARD:
            case MySqlParser.KW_DISK:
            case MySqlParser.KW_DO:
            case MySqlParser.KW_DUMPFILE:
            case MySqlParser.KW_DUPLICATE:
            case MySqlParser.KW_DYNAMIC:
            case MySqlParser.KW_ENABLE:
            case MySqlParser.KW_ENCRYPTION:
            case MySqlParser.KW_END:
            case MySqlParser.KW_ENDS:
            case MySqlParser.KW_ENGINE:
            case MySqlParser.KW_ENGINES:
            case MySqlParser.KW_ERROR:
            case MySqlParser.KW_ERRORS:
            case MySqlParser.KW_ESCAPE:
            case MySqlParser.KW_EVENT:
            case MySqlParser.KW_EVENTS:
            case MySqlParser.KW_EVERY:
            case MySqlParser.KW_EXCHANGE:
            case MySqlParser.KW_EXCLUSIVE:
            case MySqlParser.KW_EXPIRE:
            case MySqlParser.KW_EXPORT:
            case MySqlParser.KW_EXTENDED:
            case MySqlParser.KW_EXTENT_SIZE:
            case MySqlParser.KW_FAILED_LOGIN_ATTEMPTS:
            case MySqlParser.KW_FAST:
            case MySqlParser.KW_FAULTS:
            case MySqlParser.KW_FIELDS:
            case MySqlParser.KW_FILE_BLOCK_SIZE:
            case MySqlParser.KW_FILTER:
            case MySqlParser.KW_FIRST:
            case MySqlParser.KW_FIXED:
            case MySqlParser.KW_FLUSH:
            case MySqlParser.KW_FOLLOWS:
            case MySqlParser.KW_FOUND:
            case MySqlParser.KW_FULL:
            case MySqlParser.KW_FUNCTION:
            case MySqlParser.KW_GENERAL:
            case MySqlParser.KW_GLOBAL:
            case MySqlParser.KW_GRANTS:
            case MySqlParser.KW_GROUP_REPLICATION:
            case MySqlParser.KW_HANDLER:
            case MySqlParser.KW_HASH:
            case MySqlParser.KW_HELP:
            case MySqlParser.KW_HISTORY:
            case MySqlParser.KW_HOST:
            case MySqlParser.KW_HOSTS:
            case MySqlParser.KW_IDENTIFIED:
            case MySqlParser.KW_IGNORE_SERVER_IDS:
            case MySqlParser.KW_IMPORT:
            case MySqlParser.KW_INDEXES:
            case MySqlParser.KW_INITIAL_SIZE:
            case MySqlParser.KW_INPLACE:
            case MySqlParser.KW_INSERT_METHOD:
            case MySqlParser.KW_INSTALL:
            case MySqlParser.KW_INSTANCE:
            case MySqlParser.KW_INSTANT:
            case MySqlParser.KW_INVISIBLE:
            case MySqlParser.KW_INVOKER:
            case MySqlParser.KW_IO:
            case MySqlParser.KW_IO_THREAD:
            case MySqlParser.KW_IPC:
            case MySqlParser.KW_ISOLATION:
            case MySqlParser.KW_ISSUER:
            case MySqlParser.KW_JSON:
            case MySqlParser.KW_KEY_BLOCK_SIZE:
            case MySqlParser.KW_LANGUAGE:
            case MySqlParser.KW_LAST:
            case MySqlParser.KW_LEAVES:
            case MySqlParser.KW_LESS:
            case MySqlParser.KW_LEVEL:
            case MySqlParser.KW_LIST:
            case MySqlParser.KW_LOCAL:
            case MySqlParser.KW_LOGFILE:
            case MySqlParser.KW_LOGS:
            case MySqlParser.KW_MASTER:
            case MySqlParser.KW_MASTER_AUTO_POSITION:
            case MySqlParser.KW_MASTER_CONNECT_RETRY:
            case MySqlParser.KW_MASTER_DELAY:
            case MySqlParser.KW_MASTER_HEARTBEAT_PERIOD:
            case MySqlParser.KW_MASTER_HOST:
            case MySqlParser.KW_MASTER_LOG_FILE:
            case MySqlParser.KW_MASTER_LOG_POS:
            case MySqlParser.KW_MASTER_PASSWORD:
            case MySqlParser.KW_MASTER_PORT:
            case MySqlParser.KW_MASTER_RETRY_COUNT:
            case MySqlParser.KW_MASTER_SSL:
            case MySqlParser.KW_MASTER_SSL_CA:
            case MySqlParser.KW_MASTER_SSL_CAPATH:
            case MySqlParser.KW_MASTER_SSL_CERT:
            case MySqlParser.KW_MASTER_SSL_CIPHER:
            case MySqlParser.KW_MASTER_SSL_CRL:
            case MySqlParser.KW_MASTER_SSL_CRLPATH:
            case MySqlParser.KW_MASTER_SSL_KEY:
            case MySqlParser.KW_MASTER_TLS_VERSION:
            case MySqlParser.KW_MASTER_USER:
            case MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR:
            case MySqlParser.KW_MAX_QUERIES_PER_HOUR:
            case MySqlParser.KW_MAX_ROWS:
            case MySqlParser.KW_MAX_SIZE:
            case MySqlParser.KW_MAX_UPDATES_PER_HOUR:
            case MySqlParser.KW_MAX_USER_CONNECTIONS:
            case MySqlParser.KW_MEDIUM:
            case MySqlParser.KW_MEMBER:
            case MySqlParser.KW_MERGE:
            case MySqlParser.KW_MESSAGE_TEXT:
            case MySqlParser.KW_MID:
            case MySqlParser.KW_MIGRATE:
            case MySqlParser.KW_MIN_ROWS:
            case MySqlParser.KW_MODE:
            case MySqlParser.KW_MODIFY:
            case MySqlParser.KW_MUTEX:
            case MySqlParser.KW_MYSQL:
            case MySqlParser.KW_MYSQL_ERRNO:
            case MySqlParser.KW_NAME:
            case MySqlParser.KW_NAMES:
            case MySqlParser.KW_NCHAR:
            case MySqlParser.KW_NEVER:
            case MySqlParser.KW_NEXT:
            case MySqlParser.KW_NO:
            case MySqlParser.KW_NOWAIT:
            case MySqlParser.KW_NODEGROUP:
            case MySqlParser.KW_NONE:
            case MySqlParser.KW_ODBC:
            case MySqlParser.KW_OFFLINE:
            case MySqlParser.KW_OFFSET:
            case MySqlParser.KW_OF:
            case MySqlParser.KW_OLD_PASSWORD:
            case MySqlParser.KW_ONE:
            case MySqlParser.KW_ONLINE:
            case MySqlParser.KW_ONLY:
            case MySqlParser.KW_OPEN:
            case MySqlParser.KW_OPTIMIZER_COSTS:
            case MySqlParser.KW_OPTIONS:
            case MySqlParser.KW_OWNER:
            case MySqlParser.KW_PACK_KEYS:
            case MySqlParser.KW_PAGE:
            case MySqlParser.KW_PAGE_CHECKSUM:
            case MySqlParser.KW_PARSER:
            case MySqlParser.KW_PARTIAL:
            case MySqlParser.KW_PARTITIONING:
            case MySqlParser.KW_PARTITIONS:
            case MySqlParser.KW_PASSWORD:
            case MySqlParser.KW_PASSWORD_LOCK_TIME:
            case MySqlParser.KW_PHASE:
            case MySqlParser.KW_PLUGIN:
            case MySqlParser.KW_PLUGIN_DIR:
            case MySqlParser.KW_PLUGINS:
            case MySqlParser.KW_PORT:
            case MySqlParser.KW_PRECEDES:
            case MySqlParser.KW_PREPARE:
            case MySqlParser.KW_PRESERVE:
            case MySqlParser.KW_PREV:
            case MySqlParser.KW_PROCESSLIST:
            case MySqlParser.KW_PROFILE:
            case MySqlParser.KW_PROFILES:
            case MySqlParser.KW_PROXY:
            case MySqlParser.KW_QUERY:
            case MySqlParser.KW_QUICK:
            case MySqlParser.KW_REBUILD:
            case MySqlParser.KW_RECOVER:
            case MySqlParser.KW_RECURSIVE:
            case MySqlParser.KW_REDO_BUFFER_SIZE:
            case MySqlParser.KW_REDUNDANT:
            case MySqlParser.KW_RELAY:
            case MySqlParser.KW_RELAY_LOG_FILE:
            case MySqlParser.KW_RELAY_LOG_POS:
            case MySqlParser.KW_RELAYLOG:
            case MySqlParser.KW_REMOVE:
            case MySqlParser.KW_REORGANIZE:
            case MySqlParser.KW_REPAIR:
            case MySqlParser.KW_REPLICATE_DO_DB:
            case MySqlParser.KW_REPLICATE_DO_TABLE:
            case MySqlParser.KW_REPLICATE_IGNORE_DB:
            case MySqlParser.KW_REPLICATE_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATE_REWRITE_DB:
            case MySqlParser.KW_REPLICATE_WILD_DO_TABLE:
            case MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE:
            case MySqlParser.KW_REPLICATION:
            case MySqlParser.KW_RESET:
            case MySqlParser.KW_RESUME:
            case MySqlParser.KW_RETURNED_SQLSTATE:
            case MySqlParser.KW_RETURNS:
            case MySqlParser.KW_REUSE:
            case MySqlParser.KW_ROLE:
            case MySqlParser.KW_ROLLBACK:
            case MySqlParser.KW_ROLLUP:
            case MySqlParser.KW_ROTATE:
            case MySqlParser.KW_ROW:
            case MySqlParser.KW_ROWS:
            case MySqlParser.KW_ROW_FORMAT:
            case MySqlParser.KW_SAVEPOINT:
            case MySqlParser.KW_SCHEDULE:
            case MySqlParser.KW_SECURITY:
            case MySqlParser.KW_SERVER:
            case MySqlParser.KW_SESSION:
            case MySqlParser.KW_SHARE:
            case MySqlParser.KW_SHARED:
            case MySqlParser.KW_SIGNED:
            case MySqlParser.KW_SIMPLE:
            case MySqlParser.KW_SLAVE:
            case MySqlParser.KW_SLOW:
            case MySqlParser.KW_SNAPSHOT:
            case MySqlParser.KW_SOCKET:
            case MySqlParser.KW_SOME:
            case MySqlParser.KW_SONAME:
            case MySqlParser.KW_SOUNDS:
            case MySqlParser.KW_SOURCE:
            case MySqlParser.KW_SQL_AFTER_GTIDS:
            case MySqlParser.KW_SQL_AFTER_MTS_GAPS:
            case MySqlParser.KW_SQL_BEFORE_GTIDS:
            case MySqlParser.KW_SQL_BUFFER_RESULT:
            case MySqlParser.KW_SQL_CACHE:
            case MySqlParser.KW_SQL_NO_CACHE:
            case MySqlParser.KW_SQL_THREAD:
            case MySqlParser.KW_START:
            case MySqlParser.KW_STARTS:
            case MySqlParser.KW_STATS_AUTO_RECALC:
            case MySqlParser.KW_STATS_PERSISTENT:
            case MySqlParser.KW_STATS_SAMPLE_PAGES:
            case MySqlParser.KW_STATUS:
            case MySqlParser.KW_STOP:
            case MySqlParser.KW_STORAGE:
            case MySqlParser.KW_STRING:
            case MySqlParser.KW_SUBCLASS_ORIGIN:
            case MySqlParser.KW_SUBJECT:
            case MySqlParser.KW_SUBPARTITION:
            case MySqlParser.KW_SUBPARTITIONS:
            case MySqlParser.KW_SUSPEND:
            case MySqlParser.KW_SWAPS:
            case MySqlParser.KW_SWITCHES:
            case MySqlParser.KW_TABLE_NAME:
            case MySqlParser.KW_TABLESPACE:
            case MySqlParser.KW_TABLE_TYPE:
            case MySqlParser.KW_TEMPORARY:
            case MySqlParser.KW_TEMPTABLE:
            case MySqlParser.KW_THAN:
            case MySqlParser.KW_TRADITIONAL:
            case MySqlParser.KW_TRANSACTION:
            case MySqlParser.KW_TRANSACTIONAL:
            case MySqlParser.KW_TRIGGERS:
            case MySqlParser.KW_TRUNCATE:
            case MySqlParser.KW_UNBOUNDED:
            case MySqlParser.KW_UNDEFINED:
            case MySqlParser.KW_UNDOFILE:
            case MySqlParser.KW_UNDO_BUFFER_SIZE:
            case MySqlParser.KW_UNINSTALL:
            case MySqlParser.KW_UNKNOWN:
            case MySqlParser.KW_UNTIL:
            case MySqlParser.KW_UPGRADE:
            case MySqlParser.KW_USER:
            case MySqlParser.KW_USE_FRM:
            case MySqlParser.KW_USER_RESOURCES:
            case MySqlParser.KW_VALIDATION:
            case MySqlParser.KW_VALUE:
            case MySqlParser.KW_VARIABLES:
            case MySqlParser.KW_VIEW:
            case MySqlParser.KW_VIRTUAL:
            case MySqlParser.KW_VISIBLE:
            case MySqlParser.KW_WAIT:
            case MySqlParser.KW_WARNINGS:
            case MySqlParser.KW_WITHOUT:
            case MySqlParser.KW_WORK:
            case MySqlParser.KW_WRAPPER:
            case MySqlParser.KW_X509:
            case MySqlParser.KW_XA:
            case MySqlParser.KW_XML:
            case MySqlParser.KW_QUARTER:
            case MySqlParser.KW_MONTH:
            case MySqlParser.KW_DAY:
            case MySqlParser.KW_HOUR:
            case MySqlParser.KW_MINUTE:
            case MySqlParser.KW_WEEK:
            case MySqlParser.KW_SECOND:
            case MySqlParser.KW_MICROSECOND:
            case MySqlParser.KW_ADMIN:
            case MySqlParser.KW_AUDIT_ABORT_EXEMPT:
            case MySqlParser.KW_AUDIT_ADMIN:
            case MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN:
            case MySqlParser.KW_BACKUP_ADMIN:
            case MySqlParser.KW_BINLOG_ADMIN:
            case MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN:
            case MySqlParser.KW_CLONE_ADMIN:
            case MySqlParser.KW_CONNECTION_ADMIN:
            case MySqlParser.KW_ENCRYPTION_KEY_ADMIN:
            case MySqlParser.KW_EXECUTE:
            case MySqlParser.KW_FILE:
            case MySqlParser.KW_FIREWALL_ADMIN:
            case MySqlParser.KW_FIREWALL_EXEMPT:
            case MySqlParser.KW_FIREWALL_USER:
            case MySqlParser.KW_GROUP_REPLICATION_ADMIN:
            case MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE:
            case MySqlParser.KW_INVOKE:
            case MySqlParser.KW_LAMBDA:
            case MySqlParser.KW_NDB_STORED_USER:
            case MySqlParser.KW_PASSWORDLESS_USER_ADMIN:
            case MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN:
            case MySqlParser.KW_PRIVILEGES:
            case MySqlParser.KW_PROCESS:
            case MySqlParser.KW_RELOAD:
            case MySqlParser.KW_REPLICATION_APPLIER:
            case MySqlParser.KW_REPLICATION_SLAVE_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_ADMIN:
            case MySqlParser.KW_RESOURCE_GROUP_USER:
            case MySqlParser.KW_ROLE_ADMIN:
            case MySqlParser.KW_ROUTINE:
            case MySqlParser.KW_S3:
            case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
            case MySqlParser.KW_SET_USER_ID:
            case MySqlParser.KW_SHOW_ROUTINE:
            case MySqlParser.KW_SHUTDOWN:
            case MySqlParser.KW_SUPER:
            case MySqlParser.KW_SYSTEM_VARIABLES_ADMIN:
            case MySqlParser.KW_TABLES:
            case MySqlParser.KW_TABLE_ENCRYPTION_ADMIN:
            case MySqlParser.KW_VERSION_TOKEN_ADMIN:
            case MySqlParser.KW_XA_RECOVER_ADMIN:
            case MySqlParser.KW_ARMSCII8:
            case MySqlParser.KW_ASCII:
            case MySqlParser.KW_BIG5:
            case MySqlParser.KW_CP1250:
            case MySqlParser.KW_CP1251:
            case MySqlParser.KW_CP1256:
            case MySqlParser.KW_CP1257:
            case MySqlParser.KW_CP850:
            case MySqlParser.KW_CP852:
            case MySqlParser.KW_CP866:
            case MySqlParser.KW_CP932:
            case MySqlParser.KW_DEC8:
            case MySqlParser.KW_EUCJPMS:
            case MySqlParser.KW_EUCKR:
            case MySqlParser.KW_GB18030:
            case MySqlParser.KW_GB2312:
            case MySqlParser.KW_GBK:
            case MySqlParser.KW_GEOSTD8:
            case MySqlParser.KW_GREEK:
            case MySqlParser.KW_HEBREW:
            case MySqlParser.KW_HP8:
            case MySqlParser.KW_KEYBCS2:
            case MySqlParser.KW_KOI8R:
            case MySqlParser.KW_KOI8U:
            case MySqlParser.KW_LATIN1:
            case MySqlParser.KW_LATIN2:
            case MySqlParser.KW_LATIN5:
            case MySqlParser.KW_LATIN7:
            case MySqlParser.KW_MACCE:
            case MySqlParser.KW_MACROMAN:
            case MySqlParser.KW_SJIS:
            case MySqlParser.KW_SWE7:
            case MySqlParser.KW_TIS620:
            case MySqlParser.KW_UCS2:
            case MySqlParser.KW_UJIS:
            case MySqlParser.KW_UTF16:
            case MySqlParser.KW_UTF16LE:
            case MySqlParser.KW_UTF32:
            case MySqlParser.KW_UTF8:
            case MySqlParser.KW_UTF8MB3:
            case MySqlParser.KW_UTF8MB4:
            case MySqlParser.KW_ARCHIVE:
            case MySqlParser.KW_BLACKHOLE:
            case MySqlParser.KW_CSV:
            case MySqlParser.KW_FEDERATED:
            case MySqlParser.KW_INNODB:
            case MySqlParser.KW_MEMORY:
            case MySqlParser.KW_MRG_MYISAM:
            case MySqlParser.KW_MYISAM:
            case MySqlParser.KW_NDB:
            case MySqlParser.KW_NDBCLUSTER:
            case MySqlParser.KW_PERFORMANCE_SCHEMA:
            case MySqlParser.KW_TOKUDB:
            case MySqlParser.KW_REPEATABLE:
            case MySqlParser.KW_COMMITTED:
            case MySqlParser.KW_UNCOMMITTED:
            case MySqlParser.KW_SERIALIZABLE:
            case MySqlParser.KW_GEOMETRYCOLLECTION:
            case MySqlParser.KW_LINESTRING:
            case MySqlParser.KW_MULTILINESTRING:
            case MySqlParser.KW_MULTIPOINT:
            case MySqlParser.KW_MULTIPOLYGON:
            case MySqlParser.KW_POINT:
            case MySqlParser.KW_POLYGON:
            case MySqlParser.KW_CATALOG_NAME:
            case MySqlParser.KW_CHARSET:
            case MySqlParser.KW_COLLATION:
            case MySqlParser.KW_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_FORMAT:
            case MySqlParser.KW_GET_FORMAT:
            case MySqlParser.KW_RANDOM:
            case MySqlParser.KW_REVERSE:
            case MySqlParser.KW_ROW_COUNT:
            case MySqlParser.KW_SCHEMA_NAME:
            case MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE:
            case MySqlParser.KW_SRID:
            case MySqlParser.KW_SYSTEM_USER:
            case MySqlParser.KW_TP_CONNECTION_ADMIN:
            case MySqlParser.KW_WEIGHT_STRING:
            case MySqlParser.MOD:
            case MySqlParser.CHARSET_REVERSE_QOUTE_STRING:
            case MySqlParser.STRING_LITERAL:
            case MySqlParser.ID:
                {
                this.state = 7704;
                this.windowName();
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public windowSpec(): WindowSpecContext {
        let localContext = new WindowSpecContext(this.context, this.state);
        this.enterRule(localContext, 776, MySqlParser.RULE_windowSpec);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7708;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1122, this.context) ) {
            case 1:
                {
                this.state = 7707;
                this.windowName();
                }
                break;
            }
            this.state = 7711;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 130) {
                {
                this.state = 7710;
                this.partitionClause();
                }
            }

            this.state = 7714;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 125) {
                {
                this.state = 7713;
                this.orderByClause();
                }
            }

            this.state = 7717;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            if (_la === 134 || _la === 587) {
                {
                this.state = 7716;
                this.frameClause();
                }
            }

            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public windowName(): WindowNameContext {
        let localContext = new WindowNameContext(this.context, this.state);
        this.enterRule(localContext, 778, MySqlParser.RULE_windowName);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7719;
            this.uid();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public frameClause(): FrameClauseContext {
        let localContext = new FrameClauseContext(this.context, this.state);
        this.enterRule(localContext, 780, MySqlParser.RULE_frameClause);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7721;
            this.frameUnits();
            this.state = 7722;
            this.frameExtent();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public frameUnits(): FrameUnitsContext {
        let localContext = new FrameUnitsContext(this.context, this.state);
        this.enterRule(localContext, 782, MySqlParser.RULE_frameUnits);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7724;
            _la = this.tokenStream.LA(1);
            if(!(_la === 134 || _la === 587)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public frameExtent(): FrameExtentContext {
        let localContext = new FrameExtentContext(this.context, this.state);
        this.enterRule(localContext, 784, MySqlParser.RULE_frameExtent);
        try {
            this.state = 7728;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1126, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7726;
                this.frameRange();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7727;
                this.frameBetween();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public frameBetween(): FrameBetweenContext {
        let localContext = new FrameBetweenContext(this.context, this.state);
        this.enterRule(localContext, 786, MySqlParser.RULE_frameBetween);
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7730;
            this.match(MySqlParser.KW_BETWEEN);
            this.state = 7731;
            this.frameRange();
            this.state = 7732;
            this.match(MySqlParser.KW_AND);
            this.state = 7733;
            this.frameRange();
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public frameRange(): FrameRangeContext {
        let localContext = new FrameRangeContext(this.context, this.state);
        this.enterRule(localContext, 788, MySqlParser.RULE_frameRange);
        let _la: number;
        try {
            this.state = 7742;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1127, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7735;
                this.match(MySqlParser.KW_CURRENT);
                this.state = 7736;
                this.match(MySqlParser.KW_ROW);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7737;
                this.match(MySqlParser.KW_UNBOUNDED);
                this.state = 7738;
                _la = this.tokenStream.LA(1);
                if(!(_la === 405 || _la === 539)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7739;
                this.expression(0);
                this.state = 7740;
                _la = this.tokenStream.LA(1);
                if(!(_la === 405 || _la === 539)) {
                this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public partitionClause(): PartitionClauseContext {
        let localContext = new PartitionClauseContext(this.context, this.state);
        this.enterRule(localContext, 790, MySqlParser.RULE_partitionClause);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7744;
            this.match(MySqlParser.KW_PARTITION);
            this.state = 7745;
            this.match(MySqlParser.KW_BY);
            this.state = 7746;
            this.expression(0);
            this.state = 7751;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 7747;
                this.match(MySqlParser.COMMA);
                this.state = 7748;
                this.expression(0);
                }
                }
                this.state = 7753;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public scalarFunctionName(): ScalarFunctionNameContext {
        let localContext = new ScalarFunctionNameContext(this.context, this.state);
        this.enterRule(localContext, 792, MySqlParser.RULE_scalarFunctionName);
        try {
            this.state = 7778;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_DATABASE:
            case MySqlParser.KW_LEFT:
            case MySqlParser.KW_RIGHT:
            case MySqlParser.KW_SCHEMA:
            case MySqlParser.KW_DATE:
            case MySqlParser.KW_TIME:
            case MySqlParser.KW_TIMESTAMP:
            case MySqlParser.KW_YEAR:
            case MySqlParser.KW_JSON_TABLE:
            case MySqlParser.KW_JSON_VALUE:
            case MySqlParser.KW_COUNT:
            case MySqlParser.KW_CUME_DIST:
            case MySqlParser.KW_DENSE_RANK:
            case MySqlParser.KW_FIRST_VALUE:
            case MySqlParser.KW_LAG:
            case MySqlParser.KW_LAST_VALUE:
            case MySqlParser.KW_LEAD:
            case MySqlParser.KW_NTILE:
            case MySqlParser.KW_NTH_VALUE:
            case MySqlParser.KW_PERCENT_RANK:
            case MySqlParser.KW_RANK:
            case MySqlParser.KW_ROW_NUMBER:
            case MySqlParser.KW_POSITION:
            case MySqlParser.KW_INVISIBLE:
            case MySqlParser.KW_VISIBLE:
            case MySqlParser.KW_QUARTER:
            case MySqlParser.KW_MONTH:
            case MySqlParser.KW_DAY:
            case MySqlParser.KW_HOUR:
            case MySqlParser.KW_MINUTE:
            case MySqlParser.KW_WEEK:
            case MySqlParser.KW_SECOND:
            case MySqlParser.KW_MICROSECOND:
            case MySqlParser.KW_SESSION_VARIABLES_ADMIN:
            case MySqlParser.KW_GEOMETRYCOLLECTION:
            case MySqlParser.KW_LINESTRING:
            case MySqlParser.KW_MULTILINESTRING:
            case MySqlParser.KW_MULTIPOINT:
            case MySqlParser.KW_MULTIPOLYGON:
            case MySqlParser.KW_POINT:
            case MySqlParser.KW_POLYGON:
            case MySqlParser.KW_CHARSET:
            case MySqlParser.KW_COLLATION:
            case MySqlParser.KW_FORMAT:
            case MySqlParser.KW_GET_FORMAT:
            case MySqlParser.KW_RANDOM:
            case MySqlParser.KW_REVERSE:
            case MySqlParser.KW_ROW_COUNT:
            case MySqlParser.KW_SRID:
            case MySqlParser.KW_SYSTEM_USER:
            case MySqlParser.KW_WEIGHT_STRING:
            case MySqlParser.MOD:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7754;
                this.functionNameBase();
                }
                break;
            case MySqlParser.KW_ASCII:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7755;
                this.match(MySqlParser.KW_ASCII);
                }
                break;
            case MySqlParser.KW_CURDATE:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7756;
                this.match(MySqlParser.KW_CURDATE);
                }
                break;
            case MySqlParser.KW_CURRENT_DATE:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7757;
                this.match(MySqlParser.KW_CURRENT_DATE);
                }
                break;
            case MySqlParser.KW_CURRENT_TIME:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7758;
                this.match(MySqlParser.KW_CURRENT_TIME);
                }
                break;
            case MySqlParser.KW_CURRENT_TIMESTAMP:
                this.enterOuterAlt(localContext, 6);
                {
                this.state = 7759;
                this.match(MySqlParser.KW_CURRENT_TIMESTAMP);
                }
                break;
            case MySqlParser.KW_CURTIME:
                this.enterOuterAlt(localContext, 7);
                {
                this.state = 7760;
                this.match(MySqlParser.KW_CURTIME);
                }
                break;
            case MySqlParser.KW_DATE_ADD:
                this.enterOuterAlt(localContext, 8);
                {
                this.state = 7761;
                this.match(MySqlParser.KW_DATE_ADD);
                }
                break;
            case MySqlParser.KW_DATE_SUB:
                this.enterOuterAlt(localContext, 9);
                {
                this.state = 7762;
                this.match(MySqlParser.KW_DATE_SUB);
                }
                break;
            case MySqlParser.KW_IF:
                this.enterOuterAlt(localContext, 10);
                {
                this.state = 7763;
                this.match(MySqlParser.KW_IF);
                }
                break;
            case MySqlParser.KW_INSERT:
                this.enterOuterAlt(localContext, 11);
                {
                this.state = 7764;
                this.match(MySqlParser.KW_INSERT);
                }
                break;
            case MySqlParser.KW_LOCALTIME:
                this.enterOuterAlt(localContext, 12);
                {
                this.state = 7765;
                this.match(MySqlParser.KW_LOCALTIME);
                }
                break;
            case MySqlParser.KW_LOCALTIMESTAMP:
                this.enterOuterAlt(localContext, 13);
                {
                this.state = 7766;
                this.match(MySqlParser.KW_LOCALTIMESTAMP);
                }
                break;
            case MySqlParser.KW_MID:
                this.enterOuterAlt(localContext, 14);
                {
                this.state = 7767;
                this.match(MySqlParser.KW_MID);
                }
                break;
            case MySqlParser.KW_NOW:
                this.enterOuterAlt(localContext, 15);
                {
                this.state = 7768;
                this.match(MySqlParser.KW_NOW);
                }
                break;
            case MySqlParser.KW_REPEAT:
                this.enterOuterAlt(localContext, 16);
                {
                this.state = 7769;
                this.match(MySqlParser.KW_REPEAT);
                }
                break;
            case MySqlParser.KW_REPLACE:
                this.enterOuterAlt(localContext, 17);
                {
                this.state = 7770;
                this.match(MySqlParser.KW_REPLACE);
                }
                break;
            case MySqlParser.KW_SUBSTR:
                this.enterOuterAlt(localContext, 18);
                {
                this.state = 7771;
                this.match(MySqlParser.KW_SUBSTR);
                }
                break;
            case MySqlParser.KW_SUBSTRING:
                this.enterOuterAlt(localContext, 19);
                {
                this.state = 7772;
                this.match(MySqlParser.KW_SUBSTRING);
                }
                break;
            case MySqlParser.KW_SYSDATE:
                this.enterOuterAlt(localContext, 20);
                {
                this.state = 7773;
                this.match(MySqlParser.KW_SYSDATE);
                }
                break;
            case MySqlParser.KW_TRIM:
                this.enterOuterAlt(localContext, 21);
                {
                this.state = 7774;
                this.match(MySqlParser.KW_TRIM);
                }
                break;
            case MySqlParser.KW_UTC_DATE:
                this.enterOuterAlt(localContext, 22);
                {
                this.state = 7775;
                this.match(MySqlParser.KW_UTC_DATE);
                }
                break;
            case MySqlParser.KW_UTC_TIME:
                this.enterOuterAlt(localContext, 23);
                {
                this.state = 7776;
                this.match(MySqlParser.KW_UTC_TIME);
                }
                break;
            case MySqlParser.KW_UTC_TIMESTAMP:
                this.enterOuterAlt(localContext, 24);
                {
                this.state = 7777;
                this.match(MySqlParser.KW_UTC_TIMESTAMP);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public passwordFunctionClause(): PasswordFunctionClauseContext {
        let localContext = new PasswordFunctionClauseContext(this.context, this.state);
        this.enterRule(localContext, 794, MySqlParser.RULE_passwordFunctionClause);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7780;
            _la = this.tokenStream.LA(1);
            if(!(_la === 512 || _la === 529)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            this.state = 7781;
            this.match(MySqlParser.LR_BRACKET);
            this.state = 7782;
            this.functionArg();
            this.state = 7783;
            this.match(MySqlParser.RR_BRACKET);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public functionArgs(): FunctionArgsContext {
        let localContext = new FunctionArgsContext(this.context, this.state);
        this.enterRule(localContext, 796, MySqlParser.RULE_functionArgs);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7785;
            this.functionArg();
            this.state = 7790;
            this.errorHandler.sync(this);
            _la = this.tokenStream.LA(1);
            while (_la === 868) {
                {
                {
                this.state = 7786;
                this.match(MySqlParser.COMMA);
                this.state = 7787;
                this.functionArg();
                }
                }
                this.state = 7792;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public functionArg(): FunctionArgContext {
        let localContext = new FunctionArgContext(this.context, this.state);
        this.enterRule(localContext, 798, MySqlParser.RULE_functionArg);
        try {
            this.state = 7796;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1131, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7793;
                this.constant();
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7794;
                this.functionCall();
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7795;
                this.expression(0);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }

    public expression(): ExpressionContext;
    public expression(_p: number): ExpressionContext;
    public expression(_p?: number): ExpressionContext {
        if (_p === undefined) {
            _p = 0;
        }

        let parentContext = this.context;
        let parentState = this.state;
        let localContext = new ExpressionContext(this.context, parentState);
        let previousContext = localContext;
        let _startState = 800;
        this.enterRecursionRule(localContext, 800, MySqlParser.RULE_expression, _p);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7809;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1133, this.context) ) {
            case 1:
                {
                localContext = new NotExpressionContext(localContext);
                this.context = localContext;
                previousContext = localContext;

                this.state = 7799;
                (localContext as NotExpressionContext)._notOperator = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 114 || _la === 860)) {
                    (localContext as NotExpressionContext)._notOperator = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 7800;
                this.expression(4);
                }
                break;
            case 2:
                {
                localContext = new IsExpressionContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7801;
                this.predicate(0);
                this.state = 7802;
                this.match(MySqlParser.KW_IS);
                this.state = 7804;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                if (_la === 114) {
                    {
                    this.state = 7803;
                    this.match(MySqlParser.KW_NOT);
                    }
                }

                this.state = 7806;
                (localContext as IsExpressionContext)._testValue = this.tokenStream.LT(1);
                _la = this.tokenStream.LA(1);
                if(!(_la === 63 || _la === 179 || _la === 674)) {
                    (localContext as IsExpressionContext)._testValue = this.errorHandler.recoverInline(this);
                }
                else {
                    this.errorHandler.reportMatch(this);
                    this.consume();
                }
                }
                break;
            case 3:
                {
                localContext = new PredicateExpressionContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7808;
                this.predicate(0);
                }
                break;
            }
            this.context!.stop = this.tokenStream.LT(-1);
            this.state = 7817;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1134, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    if (this._parseListeners != null) {
                        this.triggerExitRuleEvent();
                    }
                    previousContext = localContext;
                    {
                    {
                    localContext = new LogicalExpressionContext(new ExpressionContext(parentContext, parentState));
                    this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_expression);
                    this.state = 7811;
                    if (!(this.precpred(this.context, 3))) {
                        throw this.createFailedPredicateException("this.precpred(this.context, 3)");
                    }
                    this.state = 7812;
                    this.logicalOperator();
                    this.state = 7813;
                    this.expression(4);
                    }
                    }
                }
                this.state = 7819;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1134, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.unrollRecursionContexts(parentContext);
        }
        return localContext;
    }

    public predicate(): PredicateContext;
    public predicate(_p: number): PredicateContext;
    public predicate(_p?: number): PredicateContext {
        if (_p === undefined) {
            _p = 0;
        }

        let parentContext = this.context;
        let parentState = this.state;
        let localContext = new PredicateContext(this.context, parentState);
        let previousContext = localContext;
        let _startState = 802;
        this.enterRecursionRule(localContext, 802, MySqlParser.RULE_predicate, _p);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            {
            localContext = new ExpressionAtomPredicateContext(localContext);
            this.context = localContext;
            previousContext = localContext;

            this.state = 7821;
            this.expressionAtom(0);
            }
            this.context!.stop = this.tokenStream.LT(-1);
            this.state = 7886;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1143, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    if (this._parseListeners != null) {
                        this.triggerExitRuleEvent();
                    }
                    previousContext = localContext;
                    {
                    this.state = 7884;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 1142, this.context) ) {
                    case 1:
                        {
                        localContext = new BetweenPredicateContext(new PredicateContext(parentContext, parentState));
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_predicate);
                        this.state = 7823;
                        if (!(this.precpred(this.context, 6))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 6)");
                        }
                        this.state = 7825;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 114) {
                            {
                            this.state = 7824;
                            this.match(MySqlParser.KW_NOT);
                            }
                        }

                        this.state = 7827;
                        this.match(MySqlParser.KW_BETWEEN);
                        this.state = 7828;
                        this.predicate(0);
                        this.state = 7829;
                        this.match(MySqlParser.KW_AND);
                        this.state = 7830;
                        this.predicate(7);
                        }
                        break;
                    case 2:
                        {
                        localContext = new SoundsLikePredicateContext(new PredicateContext(parentContext, parentState));
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_predicate);
                        this.state = 7832;
                        if (!(this.precpred(this.context, 5))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 5)");
                        }
                        this.state = 7833;
                        this.match(MySqlParser.KW_SOUNDS);
                        this.state = 7834;
                        this.match(MySqlParser.KW_LIKE);
                        this.state = 7835;
                        this.predicate(6);
                        }
                        break;
                    case 3:
                        {
                        localContext = new RegexpPredicateContext(new PredicateContext(parentContext, parentState));
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_predicate);
                        this.state = 7836;
                        if (!(this.precpred(this.context, 3))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 3)");
                        }
                        this.state = 7838;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 114) {
                            {
                            this.state = 7837;
                            this.match(MySqlParser.KW_NOT);
                            }
                        }

                        this.state = 7840;
                        (localContext as RegexpPredicateContext)._regex = this.tokenStream.LT(1);
                        _la = this.tokenStream.LA(1);
                        if(!(_la === 139 || _la === 151)) {
                            (localContext as RegexpPredicateContext)._regex = this.errorHandler.recoverInline(this);
                        }
                        else {
                            this.errorHandler.reportMatch(this);
                            this.consume();
                        }
                        this.state = 7841;
                        this.predicate(4);
                        }
                        break;
                    case 4:
                        {
                        localContext = new InPredicateContext(new PredicateContext(parentContext, parentState));
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_predicate);
                        this.state = 7842;
                        if (!(this.precpred(this.context, 9))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 9)");
                        }
                        this.state = 7844;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 114) {
                            {
                            this.state = 7843;
                            this.match(MySqlParser.KW_NOT);
                            }
                        }

                        this.state = 7846;
                        this.match(MySqlParser.KW_IN);
                        this.state = 7847;
                        this.match(MySqlParser.LR_BRACKET);
                        this.state = 7850;
                        this.errorHandler.sync(this);
                        switch (this.interpreter.adaptivePredict(this.tokenStream, 1138, this.context) ) {
                        case 1:
                            {
                            this.state = 7848;
                            this.selectStatement();
                            }
                            break;
                        case 2:
                            {
                            this.state = 7849;
                            this.expressions();
                            }
                            break;
                        }
                        this.state = 7852;
                        this.match(MySqlParser.RR_BRACKET);
                        }
                        break;
                    case 5:
                        {
                        localContext = new IsNullPredicateContext(new PredicateContext(parentContext, parentState));
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_predicate);
                        this.state = 7854;
                        if (!(this.precpred(this.context, 8))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 8)");
                        }
                        this.state = 7855;
                        this.match(MySqlParser.KW_IS);
                        this.state = 7856;
                        this.nullNotnull();
                        }
                        break;
                    case 6:
                        {
                        localContext = new BinaryComparisonPredicateContext(new PredicateContext(parentContext, parentState));
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_predicate);
                        this.state = 7857;
                        if (!(this.precpred(this.context, 7))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 7)");
                        }
                        this.state = 7858;
                        this.comparisonOperator();
                        this.state = 7865;
                        this.errorHandler.sync(this);
                        switch (this.interpreter.adaptivePredict(this.tokenStream, 1139, this.context) ) {
                        case 1:
                            {
                            this.state = 7859;
                            (localContext as BinaryComparisonPredicateContext)._quantifier = this.tokenStream.LT(1);
                            _la = this.tokenStream.LA(1);
                            if(!(_la === 7 || _la === 309 || _la === 602)) {
                                (localContext as BinaryComparisonPredicateContext)._quantifier = this.errorHandler.recoverInline(this);
                            }
                            else {
                                this.errorHandler.reportMatch(this);
                                this.consume();
                            }
                            this.state = 7860;
                            this.match(MySqlParser.LR_BRACKET);
                            this.state = 7861;
                            (localContext as BinaryComparisonPredicateContext)._subQuery = this.selectStatement();
                            this.state = 7862;
                            this.match(MySqlParser.RR_BRACKET);
                            }
                            break;
                        case 2:
                            {
                            this.state = 7864;
                            (localContext as BinaryComparisonPredicateContext)._right = this.predicate(0);
                            }
                            break;
                        }
                        }
                        break;
                    case 7:
                        {
                        localContext = new LikePredicateContext(new PredicateContext(parentContext, parentState));
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_predicate);
                        this.state = 7867;
                        if (!(this.precpred(this.context, 4))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 4)");
                        }
                        this.state = 7869;
                        this.errorHandler.sync(this);
                        _la = this.tokenStream.LA(1);
                        if (_la === 114) {
                            {
                            this.state = 7868;
                            this.match(MySqlParser.KW_NOT);
                            }
                        }

                        this.state = 7871;
                        this.match(MySqlParser.KW_LIKE);
                        this.state = 7872;
                        this.predicate(0);
                        this.state = 7875;
                        this.errorHandler.sync(this);
                        switch (this.interpreter.adaptivePredict(this.tokenStream, 1141, this.context) ) {
                        case 1:
                            {
                            this.state = 7873;
                            this.match(MySqlParser.KW_ESCAPE);
                            this.state = 7874;
                            this.match(MySqlParser.STRING_LITERAL);
                            }
                            break;
                        }
                        }
                        break;
                    case 8:
                        {
                        localContext = new JsonMemberOfPredicateContext(new PredicateContext(parentContext, parentState));
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_predicate);
                        this.state = 7877;
                        if (!(this.precpred(this.context, 2))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 2)");
                        }
                        this.state = 7878;
                        this.match(MySqlParser.KW_MEMBER);
                        this.state = 7879;
                        this.match(MySqlParser.KW_OF);
                        this.state = 7880;
                        this.match(MySqlParser.LR_BRACKET);
                        this.state = 7881;
                        this.predicate(0);
                        this.state = 7882;
                        this.match(MySqlParser.RR_BRACKET);
                        }
                        break;
                    }
                    }
                }
                this.state = 7888;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1143, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.unrollRecursionContexts(parentContext);
        }
        return localContext;
    }

    public expressionAtom(): ExpressionAtomContext;
    public expressionAtom(_p: number): ExpressionAtomContext;
    public expressionAtom(_p?: number): ExpressionAtomContext {
        if (_p === undefined) {
            _p = 0;
        }

        let parentContext = this.context;
        let parentState = this.state;
        let localContext = new ExpressionAtomContext(this.context, parentState);
        let previousContext = localContext;
        let _startState = 804;
        this.enterRecursionRule(localContext, 804, MySqlParser.RULE_expressionAtom, _p);
        let _la: number;
        try {
            let alternative: number;
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7937;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1146, this.context) ) {
            case 1:
                {
                localContext = new ConstantExpressionAtomContext(localContext);
                this.context = localContext;
                previousContext = localContext;

                this.state = 7890;
                this.constant();
                }
                break;
            case 2:
                {
                localContext = new FunctionCallExpressionAtomContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7891;
                this.functionCall();
                }
                break;
            case 3:
                {
                localContext = new MysqlVariableExpressionAtomContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7892;
                this.mysqlVariable();
                }
                break;
            case 4:
                {
                localContext = new UnaryExpressionAtomContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7893;
                this.unaryOperator();
                this.state = 7894;
                this.expressionAtom(12);
                }
                break;
            case 5:
                {
                localContext = new BinaryExpressionAtomContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7896;
                this.match(MySqlParser.KW_BINARY);
                this.state = 7897;
                this.expressionAtom(11);
                }
                break;
            case 6:
                {
                localContext = new VariableAssignExpressionAtomContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7898;
                this.match(MySqlParser.LOCAL_ID);
                this.state = 7899;
                this.match(MySqlParser.VAR_ASSIGN);
                this.state = 7900;
                this.expressionAtom(10);
                }
                break;
            case 7:
                {
                localContext = new NestedExpressionAtomContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7901;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7902;
                this.expression(0);
                this.state = 7907;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                while (_la === 868) {
                    {
                    {
                    this.state = 7903;
                    this.match(MySqlParser.COMMA);
                    this.state = 7904;
                    this.expression(0);
                    }
                    }
                    this.state = 7909;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                }
                this.state = 7910;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 8:
                {
                localContext = new NestedRowExpressionAtomContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7912;
                this.match(MySqlParser.KW_ROW);
                this.state = 7913;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7914;
                this.expression(0);
                this.state = 7917;
                this.errorHandler.sync(this);
                _la = this.tokenStream.LA(1);
                do {
                    {
                    {
                    this.state = 7915;
                    this.match(MySqlParser.COMMA);
                    this.state = 7916;
                    this.expression(0);
                    }
                    }
                    this.state = 7919;
                    this.errorHandler.sync(this);
                    _la = this.tokenStream.LA(1);
                } while (_la === 868);
                this.state = 7921;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 9:
                {
                localContext = new ExistsExpressionAtomContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7923;
                this.match(MySqlParser.KW_EXISTS);
                this.state = 7924;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7925;
                this.selectStatement();
                this.state = 7926;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 10:
                {
                localContext = new SubqueryExpressionAtomContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7928;
                this.match(MySqlParser.LR_BRACKET);
                this.state = 7929;
                this.selectStatement();
                this.state = 7930;
                this.match(MySqlParser.RR_BRACKET);
                }
                break;
            case 11:
                {
                localContext = new IntervalExpressionAtomContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7932;
                this.match(MySqlParser.KW_INTERVAL);
                this.state = 7933;
                this.expression(0);
                this.state = 7934;
                this.intervalType();
                }
                break;
            case 12:
                {
                localContext = new ColumnNameExpressionAtomContext(localContext);
                this.context = localContext;
                previousContext = localContext;
                this.state = 7936;
                this.columnName();
                }
                break;
            }
            this.context!.stop = this.tokenStream.LT(-1);
            this.state = 7956;
            this.errorHandler.sync(this);
            alternative = this.interpreter.adaptivePredict(this.tokenStream, 1148, this.context);
            while (alternative !== 2 && alternative !== antlr.ATN.INVALID_ALT_NUMBER) {
                if (alternative === 1) {
                    if (this._parseListeners != null) {
                        this.triggerExitRuleEvent();
                    }
                    previousContext = localContext;
                    {
                    this.state = 7954;
                    this.errorHandler.sync(this);
                    switch (this.interpreter.adaptivePredict(this.tokenStream, 1147, this.context) ) {
                    case 1:
                        {
                        localContext = new JsonExpressionAtomContext(new ExpressionAtomContext(parentContext, parentState));
                        (localContext as JsonExpressionAtomContext)._left = previousContext;
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_expressionAtom);
                        this.state = 7939;
                        if (!(this.precpred(this.context, 4))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 4)");
                        }
                        this.state = 7940;
                        this.jsonOperator();
                        this.state = 7941;
                        (localContext as JsonExpressionAtomContext)._right = this.expressionAtom(5);
                        }
                        break;
                    case 2:
                        {
                        localContext = new BitExpressionAtomContext(new ExpressionAtomContext(parentContext, parentState));
                        (localContext as BitExpressionAtomContext)._left = previousContext;
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_expressionAtom);
                        this.state = 7943;
                        if (!(this.precpred(this.context, 3))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 3)");
                        }
                        this.state = 7944;
                        this.bitOperator();
                        this.state = 7945;
                        (localContext as BitExpressionAtomContext)._right = this.expressionAtom(4);
                        }
                        break;
                    case 3:
                        {
                        localContext = new MathExpressionAtomContext(new ExpressionAtomContext(parentContext, parentState));
                        (localContext as MathExpressionAtomContext)._left = previousContext;
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_expressionAtom);
                        this.state = 7947;
                        if (!(this.precpred(this.context, 2))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 2)");
                        }
                        this.state = 7948;
                        this.mathOperator();
                        this.state = 7949;
                        (localContext as MathExpressionAtomContext)._right = this.expressionAtom(3);
                        }
                        break;
                    case 4:
                        {
                        localContext = new CollateExpressionAtomContext(new ExpressionAtomContext(parentContext, parentState));
                        this.pushNewRecursionContext(localContext, _startState, MySqlParser.RULE_expressionAtom);
                        this.state = 7951;
                        if (!(this.precpred(this.context, 14))) {
                            throw this.createFailedPredicateException("this.precpred(this.context, 14)");
                        }
                        this.state = 7952;
                        this.match(MySqlParser.KW_COLLATE);
                        this.state = 7953;
                        this.collationName();
                        }
                        break;
                    }
                    }
                }
                this.state = 7958;
                this.errorHandler.sync(this);
                alternative = this.interpreter.adaptivePredict(this.tokenStream, 1148, this.context);
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.unrollRecursionContexts(parentContext);
        }
        return localContext;
    }
    public unaryOperator(): UnaryOperatorContext {
        let localContext = new UnaryOperatorContext(this.context, this.state);
        this.enterRule(localContext, 806, MySqlParser.RULE_unaryOperator);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7959;
            _la = this.tokenStream.LA(1);
            if(!(_la === 114 || ((((_la - 853)) & ~0x1F) === 0 && ((1 << (_la - 853)) & 387) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public comparisonOperator(): ComparisonOperatorContext {
        let localContext = new ComparisonOperatorContext(this.context, this.state);
        this.enterRule(localContext, 808, MySqlParser.RULE_comparisonOperator);
        try {
            this.state = 7969;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1149, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7961;
                this.match(MySqlParser.LESS_SYMBOL);
                this.state = 7962;
                this.match(MySqlParser.GREATER_SYMBOL);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7963;
                this.match(MySqlParser.EXCLAMATION_SYMBOL);
                this.state = 7964;
                this.match(MySqlParser.EQUAL_SYMBOL);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7965;
                this.match(MySqlParser.LESS_SYMBOL);
                this.state = 7966;
                this.match(MySqlParser.EQUAL_SYMBOL);
                this.state = 7967;
                this.match(MySqlParser.GREATER_SYMBOL);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7968;
                this.comparisonBase();
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public comparisonBase(): ComparisonBaseContext {
        let localContext = new ComparisonBaseContext(this.context, this.state);
        this.enterRule(localContext, 810, MySqlParser.RULE_comparisonBase);
        try {
            this.state = 7978;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1150, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7971;
                this.match(MySqlParser.LESS_SYMBOL);
                this.state = 7972;
                this.match(MySqlParser.EQUAL_SYMBOL);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7973;
                this.match(MySqlParser.GREATER_SYMBOL);
                this.state = 7974;
                this.match(MySqlParser.EQUAL_SYMBOL);
                }
                break;
            case 3:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7975;
                this.match(MySqlParser.EQUAL_SYMBOL);
                }
                break;
            case 4:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7976;
                this.match(MySqlParser.GREATER_SYMBOL);
                }
                break;
            case 5:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7977;
                this.match(MySqlParser.LESS_SYMBOL);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public logicalOperator(): LogicalOperatorContext {
        let localContext = new LogicalOperatorContext(this.context, this.state);
        this.enterRule(localContext, 812, MySqlParser.RULE_logicalOperator);
        try {
            this.state = 7987;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.KW_AND:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7980;
                this.match(MySqlParser.KW_AND);
                }
                break;
            case MySqlParser.BIT_AND_OP:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7981;
                this.match(MySqlParser.BIT_AND_OP);
                this.state = 7982;
                this.match(MySqlParser.BIT_AND_OP);
                }
                break;
            case MySqlParser.KW_XOR:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7983;
                this.match(MySqlParser.KW_XOR);
                }
                break;
            case MySqlParser.KW_OR:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7984;
                this.match(MySqlParser.KW_OR);
                }
                break;
            case MySqlParser.BIT_OR_OP:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7985;
                this.match(MySqlParser.BIT_OR_OP);
                this.state = 7986;
                this.match(MySqlParser.BIT_OR_OP);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public bitOperator(): BitOperatorContext {
        let localContext = new BitOperatorContext(this.context, this.state);
        this.enterRule(localContext, 814, MySqlParser.RULE_bitOperator);
        try {
            this.state = 7996;
            this.errorHandler.sync(this);
            switch (this.tokenStream.LA(1)) {
            case MySqlParser.LESS_SYMBOL:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 7989;
                this.match(MySqlParser.LESS_SYMBOL);
                this.state = 7990;
                this.match(MySqlParser.LESS_SYMBOL);
                }
                break;
            case MySqlParser.GREATER_SYMBOL:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 7991;
                this.match(MySqlParser.GREATER_SYMBOL);
                this.state = 7992;
                this.match(MySqlParser.GREATER_SYMBOL);
                }
                break;
            case MySqlParser.BIT_AND_OP:
                this.enterOuterAlt(localContext, 3);
                {
                this.state = 7993;
                this.match(MySqlParser.BIT_AND_OP);
                }
                break;
            case MySqlParser.BIT_XOR_OP:
                this.enterOuterAlt(localContext, 4);
                {
                this.state = 7994;
                this.match(MySqlParser.BIT_XOR_OP);
                }
                break;
            case MySqlParser.BIT_OR_OP:
                this.enterOuterAlt(localContext, 5);
                {
                this.state = 7995;
                this.match(MySqlParser.BIT_OR_OP);
                }
                break;
            default:
                throw new antlr.NoViableAltException(this);
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public mathOperator(): MathOperatorContext {
        let localContext = new MathOperatorContext(this.context, this.state);
        this.enterRule(localContext, 816, MySqlParser.RULE_mathOperator);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 7998;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 850)) & ~0x1F) === 0 && ((1 << (_la - 850)) & 127) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public jsonOperator(): JsonOperatorContext {
        let localContext = new JsonOperatorContext(this.context, this.state);
        this.enterRule(localContext, 818, MySqlParser.RULE_jsonOperator);
        try {
            this.state = 8005;
            this.errorHandler.sync(this);
            switch (this.interpreter.adaptivePredict(this.tokenStream, 1153, this.context) ) {
            case 1:
                this.enterOuterAlt(localContext, 1);
                {
                this.state = 8000;
                this.match(MySqlParser.MINUS);
                this.state = 8001;
                this.match(MySqlParser.GREATER_SYMBOL);
                }
                break;
            case 2:
                this.enterOuterAlt(localContext, 2);
                {
                this.state = 8002;
                this.match(MySqlParser.MINUS);
                this.state = 8003;
                this.match(MySqlParser.GREATER_SYMBOL);
                this.state = 8004;
                this.match(MySqlParser.GREATER_SYMBOL);
                }
                break;
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public charsetNameBase(): CharsetNameBaseContext {
        let localContext = new CharsetNameBaseContext(this.context, this.state);
        this.enterRule(localContext, 820, MySqlParser.RULE_charsetNameBase);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8007;
            _la = this.tokenStream.LA(1);
            if(!(_la === 228 || ((((_la - 756)) & ~0x1F) === 0 && ((1 << (_la - 756)) & 4294967295) !== 0) || ((((_la - 788)) & ~0x1F) === 0 && ((1 << (_la - 788)) & 511) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public transactionLevelBase(): TransactionLevelBaseContext {
        let localContext = new TransactionLevelBaseContext(this.context, this.state);
        this.enterRule(localContext, 822, MySqlParser.RULE_transactionLevelBase);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8009;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 809)) & ~0x1F) === 0 && ((1 << (_la - 809)) & 15) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public privilegesBase(): PrivilegesBaseContext {
        let localContext = new PrivilegesBaseContext(this.context, this.state);
        this.enterRule(localContext, 824, MySqlParser.RULE_privilegesBase);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8011;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 717)) & ~0x1F) === 0 && ((1 << (_la - 717)) & 68026371) !== 0) || ((((_la - 749)) & ~0x1F) === 0 && ((1 << (_la - 749)) & 11) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public intervalTypeBase(): IntervalTypeBaseContext {
        let localContext = new IntervalTypeBaseContext(this.context, this.state);
        this.enterRule(localContext, 826, MySqlParser.RULE_intervalTypeBase);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8013;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 696)) & ~0x1F) === 0 && ((1 << (_la - 696)) & 255) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public dataTypeBase(): DataTypeBaseContext {
        let localContext = new DataTypeBaseContext(this.context, this.state);
        this.enterRule(localContext, 828, MySqlParser.RULE_dataTypeBase);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8015;
            _la = this.tokenStream.LA(1);
            if(!(((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 1179679) !== 0))) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public keywordsCanBeId(): KeywordsCanBeIdContext {
        let localContext = new KeywordsCanBeIdContext(this.context, this.state);
        this.enterRule(localContext, 830, MySqlParser.RULE_keywordsCanBeId);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8017;
            _la = this.tokenStream.LA(1);
            if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 1074302976) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 11014211) !== 0) || _la === 74 || _la === 95 || ((((_la - 117)) & ~0x1F) === 0 && ((1 << (_la - 117)) & 16673) !== 0) || _la === 160 || _la === 170 || ((((_la - 241)) & ~0x1F) === 0 && ((1 << (_la - 241)) & 1648345089) !== 0) || ((((_la - 277)) & ~0x1F) === 0 && ((1 << (_la - 277)) & 4160749823) !== 0) || ((((_la - 309)) & ~0x1F) === 0 && ((1 << (_la - 309)) & 4292870141) !== 0) || ((((_la - 341)) & ~0x1F) === 0 && ((1 << (_la - 341)) & 4294967287) !== 0) || ((((_la - 373)) & ~0x1F) === 0 && ((1 << (_la - 373)) & 4024434671) !== 0) || ((((_la - 406)) & ~0x1F) === 0 && ((1 << (_la - 406)) & 3747609503) !== 0) || ((((_la - 438)) & ~0x1F) === 0 && ((1 << (_la - 438)) & 4227727359) !== 0) || ((((_la - 470)) & ~0x1F) === 0 && ((1 << (_la - 470)) & 3758096239) !== 0) || ((((_la - 502)) & ~0x1F) === 0 && ((1 << (_la - 502)) & 2678062559) !== 0) || ((((_la - 534)) & ~0x1F) === 0 && ((1 << (_la - 534)) & 2682256863) !== 0) || ((((_la - 566)) & ~0x1F) === 0 && ((1 << (_la - 566)) & 4294957695) !== 0) || ((((_la - 598)) & ~0x1F) === 0 && ((1 << (_la - 598)) & 255) !== 0) || ((((_la - 633)) & ~0x1F) === 0 && ((1 << (_la - 633)) & 4294934527) !== 0) || ((((_la - 665)) & ~0x1F) === 0 && ((1 << (_la - 665)) & 2128608253) !== 0) || ((((_la - 704)) & ~0x1F) === 0 && ((1 << (_la - 704)) & 1053007341) !== 0) || ((((_la - 737)) & ~0x1F) === 0 && ((1 << (_la - 737)) & 478907) !== 0) || ((((_la - 802)) & ~0x1F) === 0 && ((1 << (_la - 802)) & 3230662657) !== 0) || _la === 838)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }
    public functionNameBase(): FunctionNameBaseContext {
        let localContext = new FunctionNameBaseContext(this.context, this.state);
        this.enterRule(localContext, 832, MySqlParser.RULE_functionNameBase);
        let _la: number;
        try {
            this.enterOuterAlt(localContext, 1);
            {
            this.state = 8019;
            _la = this.tokenStream.LA(1);
            if(!(_la === 39 || _la === 98 || _la === 150 || _la === 152 || ((((_la - 219)) & ~0x1F) === 0 && ((1 << (_la - 219)) & 23) !== 0) || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 16375299) !== 0) || _la === 296 || _la === 435 || ((((_la - 686)) & ~0x1F) === 0 && ((1 << (_la - 686)) & 261121) !== 0) || _la === 746 || ((((_la - 813)) & ~0x1F) === 0 && ((1 << (_la - 813)) & 145190393) !== 0) || _la === 856)) {
            this.errorHandler.recoverInline(this);
            }
            else {
                this.errorHandler.reportMatch(this);
                this.consume();
            }
            }
        }
        catch (re) {
            if (re instanceof antlr.RecognitionException) {
                localContext.exception = re;
                this.errorHandler.reportError(this, re);
                this.errorHandler.recover(this, re);
            } else {
                throw re;
            }
        }
        finally {
            this.exitRule();
        }
        return localContext;
    }

    public override sempred(localContext: antlr.RuleContext | null, ruleIndex: number, predIndex: number): boolean {
        switch (ruleIndex) {
        case 104:
            return this.queryExpressionBody_sempred(localContext as QueryExpressionBodyContext, predIndex);
        case 105:
            return this.queryItem_sempred(localContext as QueryItemContext, predIndex);
        case 329:
            return this.columnName_sempred(localContext as ColumnNameContext, predIndex);
        case 400:
            return this.expression_sempred(localContext as ExpressionContext, predIndex);
        case 401:
            return this.predicate_sempred(localContext as PredicateContext, predIndex);
        case 402:
            return this.expressionAtom_sempred(localContext as ExpressionAtomContext, predIndex);
        }
        return true;
    }
    private queryExpressionBody_sempred(localContext: QueryExpressionBodyContext | null, predIndex: number): boolean {
        switch (predIndex) {
        case 0:
            return this.precpred(this.context, 2);
        case 1:
            return this.precpred(this.context, 1);
        }
        return true;
    }
    private queryItem_sempred(localContext: QueryItemContext | null, predIndex: number): boolean {
        switch (predIndex) {
        case 2:
            return this.precpred(this.context, 1);
        }
        return true;
    }
    private columnName_sempred(localContext: ColumnNameContext | null, predIndex: number): boolean {
        switch (predIndex) {
        case 3:
            return this.shouldMatchEmpty();
        }
        return true;
    }
    private expression_sempred(localContext: ExpressionContext | null, predIndex: number): boolean {
        switch (predIndex) {
        case 4:
            return this.precpred(this.context, 3);
        }
        return true;
    }
    private predicate_sempred(localContext: PredicateContext | null, predIndex: number): boolean {
        switch (predIndex) {
        case 5:
            return this.precpred(this.context, 6);
        case 6:
            return this.precpred(this.context, 5);
        case 7:
            return this.precpred(this.context, 3);
        case 8:
            return this.precpred(this.context, 9);
        case 9:
            return this.precpred(this.context, 8);
        case 10:
            return this.precpred(this.context, 7);
        case 11:
            return this.precpred(this.context, 4);
        case 12:
            return this.precpred(this.context, 2);
        }
        return true;
    }
    private expressionAtom_sempred(localContext: ExpressionAtomContext | null, predIndex: number): boolean {
        switch (predIndex) {
        case 13:
            return this.precpred(this.context, 4);
        case 14:
            return this.precpred(this.context, 3);
        case 15:
            return this.precpred(this.context, 2);
        case 16:
            return this.precpred(this.context, 14);
        }
        return true;
    }

    public static readonly _serializedATN: number[] = [
        4,1,895,8022,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,
        7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,
        13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,
        20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,
        26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,
        33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,
        39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,
        46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7,
        52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2,
        59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,7,63,2,64,7,64,2,65,7,
        65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,7,70,2,71,7,71,2,
        72,7,72,2,73,7,73,2,74,7,74,2,75,7,75,2,76,7,76,2,77,7,77,2,78,7,
        78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,84,2,
        85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,91,7,
        91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,97,2,
        98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,2,103,7,103,
        2,104,7,104,2,105,7,105,2,106,7,106,2,107,7,107,2,108,7,108,2,109,
        7,109,2,110,7,110,2,111,7,111,2,112,7,112,2,113,7,113,2,114,7,114,
        2,115,7,115,2,116,7,116,2,117,7,117,2,118,7,118,2,119,7,119,2,120,
        7,120,2,121,7,121,2,122,7,122,2,123,7,123,2,124,7,124,2,125,7,125,
        2,126,7,126,2,127,7,127,2,128,7,128,2,129,7,129,2,130,7,130,2,131,
        7,131,2,132,7,132,2,133,7,133,2,134,7,134,2,135,7,135,2,136,7,136,
        2,137,7,137,2,138,7,138,2,139,7,139,2,140,7,140,2,141,7,141,2,142,
        7,142,2,143,7,143,2,144,7,144,2,145,7,145,2,146,7,146,2,147,7,147,
        2,148,7,148,2,149,7,149,2,150,7,150,2,151,7,151,2,152,7,152,2,153,
        7,153,2,154,7,154,2,155,7,155,2,156,7,156,2,157,7,157,2,158,7,158,
        2,159,7,159,2,160,7,160,2,161,7,161,2,162,7,162,2,163,7,163,2,164,
        7,164,2,165,7,165,2,166,7,166,2,167,7,167,2,168,7,168,2,169,7,169,
        2,170,7,170,2,171,7,171,2,172,7,172,2,173,7,173,2,174,7,174,2,175,
        7,175,2,176,7,176,2,177,7,177,2,178,7,178,2,179,7,179,2,180,7,180,
        2,181,7,181,2,182,7,182,2,183,7,183,2,184,7,184,2,185,7,185,2,186,
        7,186,2,187,7,187,2,188,7,188,2,189,7,189,2,190,7,190,2,191,7,191,
        2,192,7,192,2,193,7,193,2,194,7,194,2,195,7,195,2,196,7,196,2,197,
        7,197,2,198,7,198,2,199,7,199,2,200,7,200,2,201,7,201,2,202,7,202,
        2,203,7,203,2,204,7,204,2,205,7,205,2,206,7,206,2,207,7,207,2,208,
        7,208,2,209,7,209,2,210,7,210,2,211,7,211,2,212,7,212,2,213,7,213,
        2,214,7,214,2,215,7,215,2,216,7,216,2,217,7,217,2,218,7,218,2,219,
        7,219,2,220,7,220,2,221,7,221,2,222,7,222,2,223,7,223,2,224,7,224,
        2,225,7,225,2,226,7,226,2,227,7,227,2,228,7,228,2,229,7,229,2,230,
        7,230,2,231,7,231,2,232,7,232,2,233,7,233,2,234,7,234,2,235,7,235,
        2,236,7,236,2,237,7,237,2,238,7,238,2,239,7,239,2,240,7,240,2,241,
        7,241,2,242,7,242,2,243,7,243,2,244,7,244,2,245,7,245,2,246,7,246,
        2,247,7,247,2,248,7,248,2,249,7,249,2,250,7,250,2,251,7,251,2,252,
        7,252,2,253,7,253,2,254,7,254,2,255,7,255,2,256,7,256,2,257,7,257,
        2,258,7,258,2,259,7,259,2,260,7,260,2,261,7,261,2,262,7,262,2,263,
        7,263,2,264,7,264,2,265,7,265,2,266,7,266,2,267,7,267,2,268,7,268,
        2,269,7,269,2,270,7,270,2,271,7,271,2,272,7,272,2,273,7,273,2,274,
        7,274,2,275,7,275,2,276,7,276,2,277,7,277,2,278,7,278,2,279,7,279,
        2,280,7,280,2,281,7,281,2,282,7,282,2,283,7,283,2,284,7,284,2,285,
        7,285,2,286,7,286,2,287,7,287,2,288,7,288,2,289,7,289,2,290,7,290,
        2,291,7,291,2,292,7,292,2,293,7,293,2,294,7,294,2,295,7,295,2,296,
        7,296,2,297,7,297,2,298,7,298,2,299,7,299,2,300,7,300,2,301,7,301,
        2,302,7,302,2,303,7,303,2,304,7,304,2,305,7,305,2,306,7,306,2,307,
        7,307,2,308,7,308,2,309,7,309,2,310,7,310,2,311,7,311,2,312,7,312,
        2,313,7,313,2,314,7,314,2,315,7,315,2,316,7,316,2,317,7,317,2,318,
        7,318,2,319,7,319,2,320,7,320,2,321,7,321,2,322,7,322,2,323,7,323,
        2,324,7,324,2,325,7,325,2,326,7,326,2,327,7,327,2,328,7,328,2,329,
        7,329,2,330,7,330,2,331,7,331,2,332,7,332,2,333,7,333,2,334,7,334,
        2,335,7,335,2,336,7,336,2,337,7,337,2,338,7,338,2,339,7,339,2,340,
        7,340,2,341,7,341,2,342,7,342,2,343,7,343,2,344,7,344,2,345,7,345,
        2,346,7,346,2,347,7,347,2,348,7,348,2,349,7,349,2,350,7,350,2,351,
        7,351,2,352,7,352,2,353,7,353,2,354,7,354,2,355,7,355,2,356,7,356,
        2,357,7,357,2,358,7,358,2,359,7,359,2,360,7,360,2,361,7,361,2,362,
        7,362,2,363,7,363,2,364,7,364,2,365,7,365,2,366,7,366,2,367,7,367,
        2,368,7,368,2,369,7,369,2,370,7,370,2,371,7,371,2,372,7,372,2,373,
        7,373,2,374,7,374,2,375,7,375,2,376,7,376,2,377,7,377,2,378,7,378,
        2,379,7,379,2,380,7,380,2,381,7,381,2,382,7,382,2,383,7,383,2,384,
        7,384,2,385,7,385,2,386,7,386,2,387,7,387,2,388,7,388,2,389,7,389,
        2,390,7,390,2,391,7,391,2,392,7,392,2,393,7,393,2,394,7,394,2,395,
        7,395,2,396,7,396,2,397,7,397,2,398,7,398,2,399,7,399,2,400,7,400,
        2,401,7,401,2,402,7,402,2,403,7,403,2,404,7,404,2,405,7,405,2,406,
        7,406,2,407,7,407,2,408,7,408,2,409,7,409,2,410,7,410,2,411,7,411,
        2,412,7,412,2,413,7,413,2,414,7,414,2,415,7,415,2,416,7,416,1,0,
        5,0,836,8,0,10,0,12,0,839,9,0,1,0,1,0,1,1,1,1,3,1,845,8,1,1,1,3,
        1,848,8,1,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,857,8,2,1,3,1,3,1,4,1,
        4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,
        4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,4,1,
        4,1,4,1,4,1,4,1,4,1,4,3,4,900,8,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,
        5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,919,8,5,1,6,1,6,1,6,1,
        6,1,6,1,6,1,6,1,6,1,6,3,6,930,8,6,1,7,1,7,1,7,1,7,1,7,1,7,1,7,1,
        7,1,7,1,7,1,7,1,7,1,7,1,7,3,7,946,8,7,1,8,1,8,1,8,3,8,951,8,8,1,
        9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,1,9,3,9,963,8,9,1,10,1,10,1,10,
        1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,
        1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,
        1,10,1,10,1,10,1,10,3,10,998,8,10,1,11,1,11,1,11,1,11,1,11,1,11,
        1,11,1,11,3,11,1008,8,11,1,12,1,12,1,12,3,12,1013,8,12,1,12,1,12,
        5,12,1017,8,12,10,12,12,12,1020,9,12,1,13,1,13,3,13,1024,8,13,1,
        13,1,13,3,13,1028,8,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,3,13,1037,
        8,13,1,13,3,13,1040,8,13,1,13,3,13,1043,8,13,1,13,1,13,3,13,1047,
        8,13,1,13,1,13,1,13,1,14,1,14,3,14,1054,8,14,1,14,3,14,1057,8,14,
        1,14,1,14,1,14,3,14,1062,8,14,1,14,1,14,1,14,1,14,5,14,1068,8,14,
        10,14,12,14,1071,9,14,1,14,1,14,3,14,1075,8,14,1,14,1,14,1,14,3,
        14,1080,8,14,1,14,5,14,1083,8,14,10,14,12,14,1086,9,14,1,15,1,15,
        1,15,1,15,1,15,1,15,1,15,1,15,1,15,3,15,1097,8,15,1,15,3,15,1100,
        8,15,1,15,1,15,3,15,1104,8,15,1,15,3,15,1107,8,15,1,15,1,15,3,15,
        1111,8,15,1,15,3,15,1114,8,15,1,15,1,15,3,15,1118,8,15,1,15,3,15,
        1121,8,15,1,15,3,15,1124,8,15,1,15,1,15,3,15,1128,8,15,1,15,3,15,
        1131,8,15,1,15,1,15,3,15,1135,8,15,1,15,1,15,1,16,1,16,3,16,1141,
        8,16,1,16,1,16,3,16,1145,8,16,1,16,1,16,1,16,3,16,1150,8,16,1,16,
        1,16,5,16,1154,8,16,10,16,12,16,1157,9,16,1,16,1,16,5,16,1161,8,
        16,10,16,12,16,1164,9,16,1,16,1,16,1,17,1,17,1,17,3,17,1171,8,17,
        1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,
        1,18,5,18,1187,8,18,10,18,12,18,1190,9,18,1,18,1,18,1,19,1,19,3,
        19,1196,8,19,1,19,1,19,3,19,1200,8,19,1,19,1,19,3,19,1204,8,19,1,
        19,1,19,3,19,1208,8,19,1,19,5,19,1211,8,19,10,19,12,19,1214,9,19,
        3,19,1216,8,19,1,19,3,19,1219,8,19,1,19,3,19,1222,8,19,1,19,3,19,
        1225,8,19,1,19,1,19,1,19,1,19,3,19,1231,8,19,1,19,1,19,3,19,1235,
        8,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,3,19,1245,8,19,1,19,
        1,19,3,19,1249,8,19,1,19,1,19,3,19,1253,8,19,1,19,1,19,1,19,1,19,
        3,19,1259,8,19,1,19,5,19,1262,8,19,10,19,12,19,1265,9,19,3,19,1267,
        8,19,1,19,3,19,1270,8,19,3,19,1272,8,19,1,20,1,20,3,20,1276,8,20,
        1,20,1,20,1,20,1,20,1,20,3,20,1283,8,20,1,20,1,20,3,20,1287,8,20,
        1,20,3,20,1290,8,20,1,20,1,20,1,20,3,20,1295,8,20,1,20,1,20,3,20,
        1299,8,20,1,20,3,20,1302,8,20,1,20,1,20,3,20,1306,8,20,1,20,3,20,
        1309,8,20,1,21,1,21,3,21,1313,8,21,1,21,1,21,1,21,1,21,1,21,1,21,
        1,21,1,21,1,21,1,21,1,21,3,21,1326,8,21,1,21,3,21,1329,8,21,1,21,
        1,21,3,21,1333,8,21,1,21,3,21,1336,8,21,1,21,1,21,3,21,1340,8,21,
        1,21,3,21,1343,8,21,1,21,1,21,3,21,1347,8,21,1,21,3,21,1350,8,21,
        1,21,1,21,3,21,1354,8,21,1,21,3,21,1357,8,21,1,21,3,21,1360,8,21,
        1,21,1,21,3,21,1364,8,21,1,21,3,21,1367,8,21,1,21,1,21,3,21,1371,
        8,21,1,21,1,21,1,22,1,22,3,22,1377,8,22,1,22,1,22,3,22,1381,8,22,
        1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,3,22,1393,8,22,
        1,22,1,22,1,23,1,23,3,23,1399,8,23,1,23,1,23,1,24,1,24,1,24,1,24,
        1,24,5,24,1408,8,24,10,24,12,24,1411,9,24,1,24,1,24,3,24,1415,8,
        24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,1423,8,24,1,25,1,25,3,25,1427,
        8,25,1,25,1,25,1,25,3,25,1432,8,25,1,25,3,25,1435,8,25,1,25,1,25,
        1,25,3,25,1440,8,25,1,25,1,25,1,25,1,25,1,25,1,25,5,25,1448,8,25,
        10,25,12,25,1451,9,25,1,25,1,25,3,25,1455,8,25,1,25,1,25,1,25,3,
        25,1460,8,25,1,25,1,25,1,25,1,25,3,25,1466,8,25,1,25,1,25,1,25,3,
        25,1471,8,25,1,25,1,25,3,25,1475,8,25,3,25,1477,8,25,1,26,3,26,1480,
        8,26,1,26,1,26,3,26,1484,8,26,1,26,1,26,3,26,1488,8,26,1,26,3,26,
        1491,8,26,1,26,1,26,3,26,1495,8,26,1,26,1,26,3,26,1499,8,26,1,26,
        1,26,3,26,1503,8,26,1,26,1,26,1,26,1,26,3,26,1509,8,26,1,26,3,26,
        1512,8,26,1,27,1,27,1,27,1,27,1,27,3,27,1519,8,27,1,28,1,28,1,28,
        3,28,1524,8,28,1,29,1,29,1,29,1,29,3,29,1530,8,29,1,30,1,30,1,30,
        5,30,1535,8,30,10,30,12,30,1538,9,30,1,30,1,30,1,30,3,30,1543,8,
        30,1,30,1,30,1,30,1,30,5,30,1549,8,30,10,30,12,30,1552,9,30,3,30,
        1554,8,30,1,30,1,30,1,30,5,30,1559,8,30,10,30,12,30,1562,9,30,3,
        30,1564,8,30,3,30,1566,8,30,1,31,1,31,1,31,1,31,3,31,1572,8,31,1,
        32,1,32,1,32,1,32,3,32,1578,8,32,1,32,1,32,1,33,1,33,1,33,1,33,1,
        33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,3,33,1595,8,33,1,34,1,
        34,1,34,1,34,1,34,3,34,1602,8,34,1,35,1,35,1,35,1,36,1,36,3,36,1609,
        8,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,3,36,1621,
        8,36,1,36,1,36,1,36,3,36,1626,8,36,1,36,3,36,1629,8,36,1,37,3,37,
        1632,8,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,3,38,1642,8,38,
        1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,3,38,1655,
        8,38,1,38,1,38,1,38,3,38,1660,8,38,1,39,1,39,1,39,1,39,1,39,1,39,
        1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,3,39,1676,8,39,1,40,1,40,
        1,40,1,40,5,40,1682,8,40,10,40,12,40,1685,9,40,1,40,1,40,1,41,1,
        41,1,41,1,41,1,41,3,41,1694,8,41,1,41,3,41,1697,8,41,1,41,1,41,5,
        41,1701,8,41,10,41,12,41,1704,9,41,1,41,1,41,3,41,1708,8,41,1,41,
        3,41,1711,8,41,1,41,1,41,5,41,1715,8,41,10,41,12,41,1718,9,41,1,
        41,3,41,1721,8,41,1,41,1,41,1,41,3,41,1726,8,41,1,41,1,41,5,41,1730,
        8,41,10,41,12,41,1733,9,41,1,41,3,41,1736,8,41,1,41,1,41,3,41,1740,
        8,41,1,41,3,41,1743,8,41,1,41,3,41,1746,8,41,1,41,1,41,5,41,1750,
        8,41,10,41,12,41,1753,9,41,1,41,3,41,1756,8,41,1,41,1,41,1,41,3,
        41,1761,8,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,1,41,3,41,1772,
        8,41,1,42,3,42,1775,8,42,1,42,1,42,1,42,1,42,1,42,3,42,1782,8,42,
        1,42,3,42,1785,8,42,1,43,1,43,3,43,1789,8,43,1,44,1,44,5,44,1793,
        8,44,10,44,12,44,1796,9,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,
        45,1,45,3,45,1807,8,45,1,45,3,45,1810,8,45,1,45,1,45,1,45,3,45,1815,
        8,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,3,45,
        1828,8,45,1,45,1,45,1,45,1,45,1,45,3,45,1835,8,45,1,45,1,45,1,45,
        1,45,3,45,1841,8,45,1,46,1,46,1,46,3,46,1846,8,46,1,46,1,46,3,46,
        1850,8,46,1,46,3,46,1853,8,46,1,47,1,47,1,47,1,47,1,47,1,47,3,47,
        1861,8,47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,1869,8,47,3,47,1871,
        8,47,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,3,48,1881,8,48,1,49,
        1,49,3,49,1885,8,49,1,49,3,49,1888,8,49,1,49,1,49,3,49,1892,8,49,
        1,49,1,49,1,49,3,49,1897,8,49,1,49,1,49,1,49,3,49,1902,8,49,1,49,
        1,49,1,49,3,49,1907,8,49,1,49,1,49,3,49,1911,8,49,1,49,1,49,3,49,
        1915,8,49,1,49,1,49,3,49,1919,8,49,1,49,1,49,3,49,1923,8,49,1,49,
        1,49,3,49,1927,8,49,1,49,1,49,3,49,1931,8,49,1,49,1,49,1,49,3,49,
        1936,8,49,1,49,1,49,1,49,3,49,1941,8,49,1,49,1,49,1,49,3,49,1946,
        8,49,1,49,1,49,1,49,1,49,3,49,1952,8,49,1,49,1,49,1,49,3,49,1957,
        8,49,1,49,1,49,1,49,3,49,1962,8,49,1,49,1,49,1,49,3,49,1967,8,49,
        1,49,1,49,1,49,3,49,1972,8,49,1,49,1,49,1,49,3,49,1977,8,49,1,49,
        1,49,1,49,1,49,3,49,1983,8,49,1,49,1,49,1,49,3,49,1988,8,49,1,49,
        1,49,1,49,3,49,1993,8,49,1,49,1,49,1,49,3,49,1998,8,49,1,49,1,49,
        1,49,3,49,2003,8,49,1,49,1,49,1,49,3,49,2008,8,49,1,49,1,49,1,49,
        3,49,2013,8,49,1,49,1,49,1,49,3,49,2018,8,49,1,49,1,49,1,49,1,49,
        1,49,3,49,2025,8,49,1,49,1,49,1,49,3,49,2030,8,49,1,49,1,49,1,49,
        3,49,2035,8,49,1,49,1,49,1,49,3,49,2040,8,49,1,49,1,49,3,49,2044,
        8,49,1,49,1,49,1,49,3,49,2049,8,49,1,49,1,49,1,49,1,49,1,49,1,49,
        3,49,2057,8,49,1,49,1,49,1,49,3,49,2062,8,49,1,49,1,49,1,49,1,49,
        3,49,2068,8,49,1,50,1,50,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,
        3,52,2080,8,52,1,52,1,52,1,52,1,52,1,52,3,52,2087,8,52,3,52,2089,
        8,52,1,52,1,52,1,52,1,52,5,52,2095,8,52,10,52,12,52,2098,9,52,1,
        52,1,52,3,52,2102,8,52,1,53,3,53,2105,8,53,1,53,1,53,1,53,1,53,1,
        53,1,53,3,53,2113,8,53,1,53,1,53,1,53,1,53,3,53,2119,8,53,1,53,1,
        53,3,53,2123,8,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,
        53,1,53,3,53,2136,8,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,
        53,1,53,3,53,2148,8,53,3,53,2150,8,53,1,54,3,54,2153,8,54,1,54,1,
        54,1,54,1,54,1,54,1,54,3,54,2161,8,54,1,54,1,54,1,54,1,54,3,54,2167,
        8,54,1,54,1,54,1,54,1,54,3,54,2173,8,54,1,55,1,55,1,55,1,55,1,55,
        1,55,1,55,1,55,1,55,5,55,2184,8,55,10,55,12,55,2187,9,55,1,55,1,
        55,5,55,2191,8,55,10,55,12,55,2194,9,55,1,55,1,55,1,55,1,55,5,55,
        2200,8,55,10,55,12,55,2203,9,55,1,55,1,55,3,55,2207,8,55,1,55,1,
        55,1,55,1,55,1,55,1,55,1,55,5,55,2216,8,55,10,55,12,55,2219,9,55,
        1,55,1,55,1,55,1,55,5,55,2225,8,55,10,55,12,55,2228,9,55,1,55,1,
        55,3,55,2232,8,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,5,55,2242,
        8,55,10,55,12,55,2245,9,55,1,55,1,55,5,55,2249,8,55,10,55,12,55,
        2252,9,55,1,55,1,55,1,55,1,55,5,55,2258,8,55,10,55,12,55,2261,9,
        55,1,55,1,55,3,55,2265,8,55,1,55,1,55,1,55,1,55,1,55,1,55,1,55,1,
        55,5,55,2275,8,55,10,55,12,55,2278,9,55,1,55,1,55,5,55,2282,8,55,
        10,55,12,55,2285,9,55,1,55,1,55,1,55,1,55,5,55,2291,8,55,10,55,12,
        55,2294,9,55,1,55,1,55,3,55,2298,8,55,1,55,1,55,1,55,5,55,2303,8,
        55,10,55,12,55,2306,9,55,1,55,1,55,1,55,1,55,5,55,2312,8,55,10,55,
        12,55,2315,9,55,1,55,1,55,3,55,2319,8,55,3,55,2321,8,55,1,56,1,56,
        1,56,3,56,2326,8,56,1,57,1,57,1,57,1,57,4,57,2332,8,57,11,57,12,
        57,2333,1,57,1,57,1,58,1,58,1,58,5,58,2341,8,58,10,58,12,58,2344,
        9,58,1,59,3,59,2347,8,59,1,59,3,59,2350,8,59,1,59,1,59,3,59,2354,
        8,59,1,59,1,59,1,59,3,59,2359,8,59,1,59,1,59,1,59,1,59,3,59,2365,
        8,59,1,59,1,59,1,59,1,59,3,59,2371,8,59,1,59,1,59,1,59,3,59,2376,
        8,59,1,59,1,59,1,59,3,59,2381,8,59,1,59,1,59,1,59,3,59,2386,8,59,
        1,59,1,59,1,59,3,59,2391,8,59,1,59,3,59,2394,8,59,1,60,1,60,1,60,
        3,60,2399,8,60,1,60,4,60,2402,8,60,11,60,12,60,2403,1,60,1,60,1,
        60,1,60,1,60,1,60,1,60,1,60,3,60,2414,8,60,1,61,1,61,3,61,2418,8,
        61,1,61,1,61,1,61,1,61,1,61,3,61,2425,8,61,1,61,1,61,1,61,3,61,2430,
        8,61,1,61,3,61,2433,8,61,1,61,1,61,1,61,3,61,2438,8,61,1,61,3,61,
        2441,8,61,1,61,1,61,3,61,2445,8,61,1,61,1,61,3,61,2449,8,61,1,62,
        1,62,1,62,1,62,5,62,2455,8,62,10,62,12,62,2458,9,62,1,63,1,63,1,
        63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,
        64,3,64,2476,8,64,1,64,3,64,2479,8,64,1,64,3,64,2482,8,64,1,64,1,
        64,3,64,2486,8,64,1,64,1,64,1,65,1,65,1,65,1,65,5,65,2494,8,65,10,
        65,12,65,2497,9,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,5,66,
        2507,8,66,10,66,12,66,2510,9,66,1,66,1,66,1,67,1,67,1,67,1,67,1,
        67,1,67,5,67,2520,8,67,10,67,12,67,2523,9,67,3,67,2525,8,67,1,67,
        1,67,5,67,2529,8,67,10,67,12,67,2532,9,67,3,67,2534,8,67,1,68,1,
        68,3,68,2538,8,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,3,68,2547,8,
        68,1,68,3,68,2550,8,68,1,68,3,68,2553,8,68,1,68,1,68,1,68,3,68,2558,
        8,68,1,68,1,68,3,68,2562,8,68,1,68,3,68,2565,8,68,1,68,1,68,3,68,
        2569,8,68,1,68,1,68,3,68,2573,8,68,1,68,3,68,2576,8,68,1,68,1,68,
        3,68,2580,8,68,1,68,3,68,2583,8,68,1,68,1,68,3,68,2587,8,68,1,68,
        3,68,2590,8,68,1,69,1,69,1,69,1,69,3,69,2596,8,69,1,69,3,69,2599,
        8,69,1,69,1,69,1,69,3,69,2604,8,69,1,69,1,69,1,69,1,69,1,69,1,69,
        3,69,2612,8,69,1,69,1,69,1,69,1,69,3,69,2618,8,69,1,69,1,69,3,69,
        2622,8,69,1,70,1,70,3,70,2626,8,70,1,70,5,70,2629,8,70,10,70,12,
        70,2632,9,70,1,70,1,70,3,70,2636,8,70,1,70,1,70,1,70,1,70,1,70,3,
        70,2643,8,70,1,70,1,70,3,70,2647,8,70,1,70,1,70,1,70,1,70,1,70,1,
        70,1,70,5,70,2656,8,70,10,70,12,70,2659,9,70,1,70,1,70,1,70,1,70,
        1,70,3,70,2666,8,70,1,70,3,70,2669,8,70,1,70,1,70,5,70,2673,8,70,
        10,70,12,70,2676,9,70,1,70,1,70,1,70,3,70,2681,8,70,1,70,3,70,2684,
        8,70,1,70,1,70,5,70,2688,8,70,10,70,12,70,2691,9,70,1,70,1,70,1,
        70,3,70,2696,8,70,3,70,2698,8,70,1,70,1,70,1,70,3,70,2703,8,70,1,
        70,1,70,5,70,2707,8,70,10,70,12,70,2710,9,70,1,70,1,70,1,70,3,70,
        2715,8,70,3,70,2717,8,70,1,70,1,70,3,70,2721,8,70,1,70,3,70,2724,
        8,70,1,70,3,70,2727,8,70,1,70,1,70,5,70,2731,8,70,10,70,12,70,2734,
        9,70,1,70,1,70,1,70,3,70,2739,8,70,3,70,2741,8,70,1,70,1,70,1,70,
        3,70,2746,8,70,1,70,1,70,1,70,1,70,1,70,3,70,2753,8,70,1,70,1,70,
        1,70,1,70,1,70,1,70,1,70,3,70,2762,8,70,1,70,3,70,2765,8,70,1,70,
        1,70,3,70,2769,8,70,1,70,1,70,1,70,3,70,2774,8,70,1,70,1,70,1,70,
        1,70,1,70,1,70,1,70,1,70,3,70,2784,8,70,1,70,1,70,1,70,1,70,1,70,
        1,70,1,70,3,70,2793,8,70,1,70,1,70,1,70,1,70,1,70,1,70,3,70,2801,
        8,70,1,70,3,70,2804,8,70,1,70,1,70,1,70,1,70,1,70,1,70,3,70,2812,
        8,70,1,70,3,70,2815,8,70,1,70,1,70,1,70,1,70,1,70,3,70,2822,8,70,
        1,70,1,70,1,70,3,70,2827,8,70,1,70,1,70,1,70,1,70,1,70,1,70,3,70,
        2835,8,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,
        1,70,1,70,1,70,3,70,2851,8,70,1,70,1,70,1,70,3,70,2856,8,70,1,70,
        1,70,1,70,1,70,1,70,3,70,2863,8,70,1,70,1,70,1,70,1,70,1,70,1,70,
        1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,3,70,2882,
        8,70,1,70,1,70,1,70,1,70,3,70,2888,8,70,1,71,1,71,1,71,1,71,1,71,
        1,71,5,71,2896,8,71,10,71,12,71,2899,9,71,1,71,1,71,1,71,1,71,1,
        71,1,71,1,71,1,71,1,71,3,71,2910,8,71,1,71,1,71,1,71,1,71,1,71,3,
        71,2917,8,71,1,71,1,71,1,71,1,71,1,71,3,71,2924,8,71,1,71,1,71,1,
        71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,5,71,2937,8,71,10,71,
        12,71,2940,9,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,71,
        3,71,2952,8,71,1,71,1,71,1,71,1,71,3,71,2958,8,71,1,71,1,71,1,71,
        1,71,3,71,2964,8,71,1,71,1,71,1,71,1,71,3,71,2970,8,71,1,71,1,71,
        1,71,1,71,3,71,2976,8,71,1,71,1,71,1,71,1,71,3,71,2982,8,71,1,71,
        1,71,1,71,1,71,3,71,2988,8,71,1,72,1,72,1,72,3,72,2993,8,72,1,72,
        1,72,1,73,1,73,1,73,3,73,3000,8,73,1,73,1,73,1,74,1,74,1,74,3,74,
        3007,8,74,1,74,1,74,1,74,1,74,1,74,3,74,3014,8,74,1,74,1,74,1,74,
        3,74,3019,8,74,1,74,5,74,3022,8,74,10,74,12,74,3025,9,74,1,75,1,
        75,1,75,1,75,1,75,1,75,3,75,3033,8,75,1,75,1,75,1,76,1,76,1,76,3,
        76,3040,8,76,1,76,1,76,1,77,1,77,1,77,3,77,3047,8,77,1,77,1,77,1,
        78,1,78,1,78,3,78,3054,8,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,3,
        79,3063,8,79,1,79,1,79,1,80,1,80,3,80,3069,8,80,1,80,1,80,3,80,3073,
        8,80,1,80,1,80,3,80,3077,8,80,1,81,1,81,3,81,3081,8,81,1,81,1,81,
        1,81,1,81,3,81,3087,8,81,1,81,3,81,3090,8,81,1,82,1,82,1,82,3,82,
        3095,8,82,1,82,1,82,1,83,1,83,1,83,3,83,3102,8,83,1,83,1,83,1,83,
        5,83,3107,8,83,10,83,12,83,3110,9,83,1,83,3,83,3113,8,83,1,84,1,
        84,1,84,3,84,3118,8,84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,85,3,
        85,3128,8,85,1,85,1,85,1,85,1,85,5,85,3134,8,85,10,85,12,85,3137,
        9,85,1,85,1,85,1,85,3,85,3142,8,85,1,86,1,86,1,86,1,86,1,86,5,86,
        3149,8,86,10,86,12,86,3152,9,86,1,87,1,87,1,87,1,87,1,88,1,88,3,
        88,3160,8,88,1,88,1,88,1,89,1,89,1,89,1,89,1,89,3,89,3169,8,89,1,
        89,3,89,3172,8,89,1,90,1,90,3,90,3176,8,90,1,91,1,91,1,91,1,92,1,
        92,1,92,1,92,3,92,3185,8,92,1,93,1,93,3,93,3189,8,93,1,93,3,93,3192,
        8,93,1,93,3,93,3195,8,93,1,93,1,93,1,93,1,93,3,93,3201,8,93,1,93,
        3,93,3204,8,93,1,93,3,93,3207,8,93,1,93,1,93,3,93,3211,8,93,1,93,
        3,93,3214,8,93,1,93,3,93,3217,8,93,1,93,3,93,3220,8,93,1,93,1,93,
        1,93,1,93,1,93,1,93,1,93,5,93,3229,8,93,10,93,12,93,3232,9,93,3,
        93,3234,8,93,1,94,1,94,1,94,3,94,3239,8,94,1,95,1,95,1,95,1,95,3,
        95,3245,8,95,1,96,1,96,1,96,3,96,3250,8,96,1,96,4,96,3253,8,96,11,
        96,12,96,3254,1,97,3,97,3258,8,97,1,97,1,97,3,97,3262,8,97,1,98,
        1,98,1,98,3,98,3267,8,98,1,98,3,98,3270,8,98,1,98,1,98,1,98,3,98,
        3275,8,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,3,98,3285,8,98,
        1,98,1,98,1,98,3,98,3290,8,98,1,98,1,98,4,98,3294,8,98,11,98,12,
        98,3295,3,98,3298,8,98,1,98,1,98,4,98,3302,8,98,11,98,12,98,3303,
        3,98,3306,8,98,1,98,1,98,1,98,1,98,3,98,3312,8,98,1,98,1,98,1,98,
        1,98,5,98,3318,8,98,10,98,12,98,3321,9,98,1,98,1,98,3,98,3325,8,
        98,1,98,1,98,1,98,1,98,5,98,3331,8,98,10,98,12,98,3334,9,98,3,98,
        3336,8,98,1,99,1,99,1,99,3,99,3341,8,99,1,99,3,99,3344,8,99,1,99,
        1,99,1,99,3,99,3349,8,99,1,99,1,99,1,99,1,99,1,99,1,99,3,99,3357,
        8,99,1,99,1,99,1,99,1,99,3,99,3363,8,99,1,99,1,99,3,99,3367,8,99,
        3,99,3369,8,99,1,99,1,99,1,99,1,99,3,99,3375,8,99,1,99,1,99,1,99,
        1,99,5,99,3381,8,99,10,99,12,99,3384,9,99,1,99,1,99,3,99,3388,8,
        99,1,99,1,99,1,99,1,99,5,99,3394,8,99,10,99,12,99,3397,9,99,3,99,
        3399,8,99,1,100,1,100,1,100,3,100,3404,8,100,1,100,3,100,3407,8,
        100,1,100,1,100,3,100,3411,8,100,1,100,3,100,3414,8,100,1,100,3,
        100,3417,8,100,1,101,1,101,3,101,3421,8,101,1,101,3,101,3424,8,101,
        1,101,1,101,1,101,1,101,1,101,1,101,3,101,3432,8,101,1,101,1,101,
        1,101,1,101,3,101,3438,8,101,1,101,1,101,3,101,3442,8,101,1,102,
        1,102,5,102,3446,8,102,10,102,12,102,3449,9,102,1,102,1,102,3,102,
        3453,8,102,1,102,1,102,3,102,3457,8,102,3,102,3459,8,102,1,102,1,
        102,5,102,3463,8,102,10,102,12,102,3466,9,102,1,102,3,102,3469,8,
        102,1,102,3,102,3472,8,102,1,102,3,102,3475,8,102,1,102,3,102,3478,
        8,102,1,102,1,102,5,102,3482,8,102,10,102,12,102,3485,9,102,1,102,
        1,102,3,102,3489,8,102,1,102,3,102,3492,8,102,1,102,3,102,3495,8,
        102,1,102,3,102,3498,8,102,1,102,3,102,3501,8,102,3,102,3503,8,102,
        1,103,3,103,3506,8,103,1,103,1,103,3,103,3510,8,103,1,103,3,103,
        3513,8,103,1,103,3,103,3516,8,103,1,104,1,104,1,104,1,104,1,104,
        1,104,3,104,3524,8,104,1,104,1,104,1,104,1,104,3,104,3530,8,104,
        1,104,5,104,3533,8,104,10,104,12,104,3536,9,104,1,105,1,105,1,105,
        1,105,1,105,1,105,3,105,3544,8,105,1,105,5,105,3547,8,105,10,105,
        12,105,3550,9,105,1,106,1,106,1,106,1,106,3,106,3556,8,106,1,106,
        3,106,3559,8,106,1,106,3,106,3562,8,106,1,106,1,106,3,106,3566,8,
        106,1,107,1,107,3,107,3570,8,107,1,108,1,108,1,108,1,108,3,108,3576,
        8,108,1,108,1,108,3,108,3580,8,108,1,109,1,109,1,109,5,109,3585,
        8,109,10,109,12,109,3588,9,109,1,109,3,109,3591,8,109,1,109,3,109,
        3594,8,109,1,109,3,109,3597,8,109,1,110,1,110,1,110,3,110,3602,8,
        110,1,111,1,111,1,111,1,111,1,111,3,111,3609,8,111,1,112,1,112,1,
        112,1,112,1,112,1,112,5,112,3617,8,112,10,112,12,112,3620,9,112,
        1,113,1,113,1,113,1,113,5,113,3626,8,113,10,113,12,113,3629,9,113,
        1,114,1,114,1,114,1,114,1,115,1,115,3,115,3637,8,115,1,116,1,116,
        1,116,1,116,1,116,1,116,5,116,3645,8,116,10,116,12,116,3648,9,116,
        3,116,3650,8,116,1,116,1,116,3,116,3654,8,116,1,116,1,116,1,116,
        1,116,3,116,3660,8,116,1,117,1,117,3,117,3664,8,117,1,117,3,117,
        3667,8,117,1,117,3,117,3670,8,117,1,117,1,117,1,117,3,117,3675,8,
        117,1,117,3,117,3678,8,117,1,117,1,117,1,117,1,117,1,117,3,117,3685,
        8,117,1,117,1,117,3,117,3689,8,117,1,117,3,117,3692,8,117,1,117,
        1,117,3,117,3696,8,117,1,118,1,118,3,118,3700,8,118,1,118,3,118,
        3703,8,118,1,118,3,118,3706,8,118,1,118,1,118,1,118,3,118,3711,8,
        118,1,118,1,118,1,118,1,118,3,118,3717,8,118,5,118,3719,8,118,10,
        118,12,118,3722,9,118,1,118,1,118,1,118,1,118,1,118,1,118,1,118,
        3,118,3731,8,118,1,118,1,118,1,118,1,118,3,118,3737,8,118,5,118,
        3739,8,118,10,118,12,118,3742,9,118,1,118,1,118,1,118,3,118,3747,
        8,118,1,118,1,118,3,118,3751,8,118,1,119,1,119,1,119,1,119,3,119,
        3757,8,119,1,119,3,119,3760,8,119,1,120,1,120,1,120,1,120,1,120,
        1,120,1,120,1,120,1,120,1,120,3,120,3772,8,120,1,120,1,120,3,120,
        3776,8,120,1,120,1,120,3,120,3780,8,120,1,121,1,121,1,121,1,121,
        1,121,1,121,3,121,3788,8,121,1,121,1,121,3,121,3792,8,121,1,122,
        1,122,1,122,1,122,1,123,1,123,1,123,1,123,1,123,1,123,5,123,3804,
        8,123,10,123,12,123,3807,9,123,1,124,1,124,3,124,3811,8,124,1,124,
        3,124,3814,8,124,1,124,1,124,3,124,3818,8,124,1,124,3,124,3821,8,
        124,1,124,1,124,1,124,1,124,5,124,3827,8,124,10,124,12,124,3830,
        9,124,1,124,1,124,3,124,3834,8,124,1,124,3,124,3837,8,124,1,124,
        3,124,3840,8,124,1,125,1,125,3,125,3844,8,125,1,125,3,125,3847,8,
        125,1,125,1,125,1,125,1,125,1,125,5,125,3854,8,125,10,125,12,125,
        3857,9,125,1,125,1,125,3,125,3861,8,125,1,126,1,126,1,126,1,126,
        1,126,5,126,3868,8,126,10,126,12,126,3871,9,126,1,127,1,127,3,127,
        3875,8,127,1,128,1,128,1,128,5,128,3880,8,128,10,128,12,128,3883,
        9,128,1,129,1,129,5,129,3887,8,129,10,129,12,129,3890,9,129,1,129,
        1,129,1,129,5,129,3895,8,129,10,129,12,129,3898,9,129,1,129,1,129,
        1,129,3,129,3903,8,129,1,130,1,130,1,130,1,130,1,130,1,130,3,130,
        3911,8,130,1,130,3,130,3914,8,130,1,130,3,130,3917,8,130,1,130,1,
        130,1,130,5,130,3922,8,130,10,130,12,130,3925,9,130,3,130,3927,8,
        130,1,130,3,130,3930,8,130,1,130,1,130,1,130,1,130,1,130,3,130,3937,
        8,130,1,130,3,130,3940,8,130,1,130,1,130,3,130,3944,8,130,1,130,
        1,130,1,130,1,130,3,130,3950,8,130,1,131,1,131,1,131,1,131,1,132,
        1,132,1,132,1,132,3,132,3960,8,132,1,132,1,132,3,132,3964,8,132,
        1,132,1,132,1,133,1,133,1,133,1,133,1,133,3,133,3973,8,133,1,134,
        3,134,3976,8,134,1,134,1,134,3,134,3980,8,134,1,134,1,134,5,134,
        3984,8,134,10,134,12,134,3987,9,134,1,134,1,134,1,134,5,134,3992,
        8,134,10,134,12,134,3995,9,134,1,134,1,134,3,134,3999,8,134,1,134,
        1,134,3,134,4003,8,134,1,134,1,134,5,134,4007,8,134,10,134,12,134,
        4010,9,134,1,134,1,134,1,134,3,134,4015,8,134,1,134,3,134,4018,8,
        134,3,134,4020,8,134,1,134,1,134,3,134,4024,8,134,1,135,1,135,1,
        135,1,135,1,135,1,135,1,135,3,135,4033,8,135,1,136,1,136,1,136,1,
        136,1,136,1,136,1,136,1,136,3,136,4043,8,136,1,137,1,137,5,137,4047,
        8,137,10,137,12,137,4050,9,137,1,137,1,137,3,137,4054,8,137,1,137,
        1,137,3,137,4058,8,137,1,137,3,137,4061,8,137,1,137,3,137,4064,8,
        137,1,137,3,137,4067,8,137,1,137,3,137,4070,8,137,1,137,3,137,4073,
        8,137,1,138,1,138,3,138,4077,8,138,1,138,1,138,3,138,4081,8,138,
        1,139,1,139,1,139,1,139,1,139,1,139,3,139,4089,8,139,1,139,1,139,
        3,139,4093,8,139,1,139,3,139,4096,8,139,3,139,4098,8,139,1,140,1,
        140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,3,140,
        4111,8,140,1,140,3,140,4114,8,140,1,141,1,141,1,141,5,141,4119,8,
        141,10,141,12,141,4122,9,141,1,142,1,142,1,142,1,142,1,142,1,142,
        1,142,3,142,4131,8,142,1,142,3,142,4134,8,142,1,142,1,142,1,142,
        3,142,4139,8,142,3,142,4141,8,142,1,142,1,142,3,142,4145,8,142,1,
        142,1,142,1,142,1,142,1,142,1,142,3,142,4153,8,142,1,143,1,143,1,
        143,1,143,3,143,4159,8,143,1,143,1,143,1,143,1,144,1,144,1,144,1,
        144,3,144,4168,8,144,1,144,1,144,1,144,1,145,1,145,1,145,1,145,1,
        145,1,145,1,145,1,145,3,145,4181,8,145,1,146,1,146,3,146,4185,8,
        146,1,146,1,146,5,146,4189,8,146,10,146,12,146,4192,9,146,1,147,
        1,147,3,147,4196,8,147,1,147,1,147,3,147,4200,8,147,1,147,3,147,
        4203,8,147,1,147,1,147,3,147,4207,8,147,1,147,3,147,4210,8,147,1,
        147,1,147,1,147,1,147,1,147,1,147,3,147,4218,8,147,1,147,3,147,4221,
        8,147,3,147,4223,8,147,1,148,1,148,1,148,1,148,5,148,4229,8,148,
        10,148,12,148,4232,9,148,1,148,1,148,1,148,1,148,1,148,1,148,1,148,
        1,148,1,148,3,148,4243,8,148,1,148,1,148,4,148,4247,8,148,11,148,
        12,148,4248,3,148,4251,8,148,1,148,1,148,4,148,4255,8,148,11,148,
        12,148,4256,3,148,4259,8,148,3,148,4261,8,148,1,149,1,149,1,149,
        1,149,3,149,4267,8,149,1,149,1,149,1,149,1,149,1,149,1,149,3,149,
        4275,8,149,1,150,1,150,1,150,1,150,1,150,1,150,3,150,4283,8,150,
        1,151,1,151,3,151,4287,8,151,1,151,1,151,3,151,4291,8,151,1,152,
        1,152,1,152,1,152,1,152,5,152,4298,8,152,10,152,12,152,4301,9,152,
        1,152,1,152,3,152,4305,8,152,1,153,1,153,1,153,1,154,1,154,1,154,
        1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,1,154,5,154,
        4323,8,154,10,154,12,154,4326,9,154,1,155,1,155,3,155,4330,8,155,
        1,156,1,156,1,156,1,156,3,156,4336,8,156,1,156,1,156,1,156,1,156,
        1,156,3,156,4343,8,156,1,157,1,157,1,157,3,157,4348,8,157,1,158,
        1,158,1,158,1,158,1,158,5,158,4355,8,158,10,158,12,158,4358,9,158,
        3,158,4360,8,158,1,159,1,159,3,159,4364,8,159,1,160,1,160,3,160,
        4368,8,160,1,160,1,160,3,160,4372,8,160,1,160,3,160,4375,8,160,1,
        160,3,160,4378,8,160,1,160,3,160,4381,8,160,1,161,1,161,3,161,4385,
        8,161,1,161,1,161,3,161,4389,8,161,1,161,3,161,4392,8,161,1,161,
        3,161,4395,8,161,1,161,3,161,4398,8,161,1,162,1,162,1,162,1,163,
        1,163,3,163,4405,8,163,1,163,1,163,3,163,4409,8,163,1,163,1,163,
        1,164,1,164,1,164,1,164,1,165,1,165,1,165,1,165,1,165,5,165,4422,
        8,165,10,165,12,165,4425,9,165,1,166,1,166,1,166,1,167,1,167,1,167,
        1,167,1,167,1,168,1,168,3,168,4437,8,168,1,168,1,168,1,168,1,168,
        5,168,4443,8,168,10,168,12,168,4446,9,168,1,169,1,169,1,169,1,169,
        1,169,1,169,1,169,3,169,4455,8,169,1,170,1,170,3,170,4459,8,170,
        1,170,3,170,4462,8,170,1,170,1,170,1,171,1,171,3,171,4468,8,171,
        1,171,3,171,4471,8,171,1,171,3,171,4474,8,171,1,172,1,172,1,172,
        1,172,1,172,1,172,1,172,3,172,4483,8,172,1,173,1,173,1,173,1,173,
        1,173,1,173,1,173,3,173,4492,8,173,1,174,1,174,1,174,1,174,1,174,
        1,174,5,174,4500,8,174,10,174,12,174,4503,9,174,1,174,3,174,4506,
        8,174,1,175,1,175,1,175,1,175,1,175,1,175,5,175,4514,8,175,10,175,
        12,175,4517,9,175,1,175,3,175,4520,8,175,1,176,1,176,1,176,1,176,
        1,176,1,176,1,176,5,176,4529,8,176,10,176,12,176,4532,9,176,1,176,
        3,176,4535,8,176,1,177,1,177,1,177,1,177,1,177,1,177,1,177,3,177,
        4544,8,177,1,178,1,178,1,178,1,178,1,178,5,178,4551,8,178,10,178,
        12,178,4554,9,178,3,178,4556,8,178,1,178,1,178,3,178,4560,8,178,
        1,178,5,178,4563,8,178,10,178,12,178,4566,9,178,1,178,3,178,4569,
        8,178,1,179,1,179,1,179,1,179,1,179,5,179,4576,8,179,10,179,12,179,
        4579,9,179,3,179,4581,8,179,1,179,3,179,4584,8,179,1,180,1,180,1,
        180,1,180,1,180,3,180,4591,8,180,1,180,1,180,1,180,1,180,3,180,4597,
        8,180,1,180,1,180,1,180,1,180,3,180,4603,8,180,1,181,1,181,1,181,
        1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182,
        1,182,1,182,1,182,1,182,1,182,1,182,1,182,1,182,5,182,4627,8,182,
        10,182,12,182,4630,9,182,3,182,4632,8,182,1,182,3,182,4635,8,182,
        1,183,1,183,1,184,1,184,1,185,1,185,1,186,1,186,1,186,1,186,1,186,
        1,186,1,186,1,186,1,186,1,186,1,186,3,186,4654,8,186,3,186,4656,
        8,186,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,
        1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1,187,5,187,4677,
        8,187,10,187,12,187,4680,9,187,3,187,4682,8,187,1,187,3,187,4685,
        8,187,1,188,1,188,1,189,1,189,1,190,1,190,1,191,1,191,1,191,1,191,
        1,191,1,191,1,191,1,191,1,191,1,191,1,191,3,191,4704,8,191,3,191,
        4706,8,191,1,192,1,192,1,192,1,192,1,193,1,193,1,193,1,193,1,193,
        1,193,5,193,4718,8,193,10,193,12,193,4721,9,193,1,193,1,193,1,193,
        1,193,1,193,1,193,1,193,1,193,5,193,4731,8,193,10,193,12,193,4734,
        9,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,
        1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,
        1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,
        5,193,4768,8,193,10,193,12,193,4771,9,193,1,193,1,193,3,193,4775,
        8,193,1,194,1,194,1,194,1,194,1,194,1,194,1,195,1,195,1,196,1,196,
        1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,
        1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,
        1,196,3,196,4810,8,196,1,197,1,197,1,197,1,197,1,197,1,197,1,197,
        1,197,1,197,1,197,1,197,1,197,3,197,4824,8,197,1,198,1,198,1,198,
        5,198,4829,8,198,10,198,12,198,4832,9,198,1,198,3,198,4835,8,198,
        1,199,1,199,1,199,1,199,3,199,4841,8,199,1,200,1,200,1,200,1,200,
        1,200,1,200,3,200,4849,8,200,3,200,4851,8,200,1,201,1,201,1,201,
        1,201,1,202,1,202,1,202,1,202,1,202,3,202,4862,8,202,1,203,1,203,
        1,203,1,203,1,204,1,204,1,204,1,204,3,204,4872,8,204,1,205,1,205,
        1,205,1,205,1,205,3,205,4879,8,205,1,206,1,206,1,206,1,206,3,206,
        4885,8,206,1,207,1,207,1,207,1,207,1,208,1,208,3,208,4893,8,208,
        1,209,1,209,1,209,3,209,4898,8,209,1,209,1,209,1,209,1,209,5,209,
        4904,8,209,10,209,12,209,4907,9,209,1,209,1,209,1,209,5,209,4912,
        8,209,10,209,12,209,4915,9,209,1,209,1,209,1,209,5,209,4920,8,209,
        10,209,12,209,4923,9,209,1,209,1,209,1,209,5,209,4928,8,209,10,209,
        12,209,4931,9,209,1,209,5,209,4934,8,209,10,209,12,209,4937,9,209,
        1,209,1,209,3,209,4941,8,209,1,210,1,210,1,210,3,210,4946,8,210,
        1,210,4,210,4949,8,210,11,210,12,210,4950,1,210,1,210,4,210,4955,
        8,210,11,210,12,210,4956,3,210,4959,8,210,1,210,1,210,1,210,1,211,
        1,211,1,211,1,211,4,211,4968,8,211,11,211,12,211,4969,1,211,5,211,
        4973,8,211,10,211,12,211,4976,9,211,1,211,1,211,4,211,4980,8,211,
        11,211,12,211,4981,3,211,4984,8,211,1,211,1,211,1,211,1,212,1,212,
        1,212,1,213,1,213,1,213,1,214,1,214,1,214,3,214,4998,8,214,1,214,
        1,214,4,214,5002,8,214,11,214,12,214,5003,1,214,1,214,1,214,3,214,
        5009,8,214,1,215,1,215,1,215,3,215,5014,8,215,1,215,1,215,4,215,
        5018,8,215,11,215,12,215,5019,1,215,1,215,1,215,1,215,1,215,3,215,
        5027,8,215,1,216,1,216,1,216,1,217,1,217,1,217,3,217,5035,8,217,
        1,217,1,217,1,217,1,217,4,217,5041,8,217,11,217,12,217,5042,1,217,
        1,217,1,217,3,217,5048,8,217,1,218,1,218,1,218,1,218,3,218,5054,
        8,218,1,218,3,218,5057,8,218,1,218,1,218,1,218,1,218,1,218,1,218,
        3,218,5065,8,218,1,219,1,219,1,219,1,219,1,219,3,219,5072,8,219,
        1,220,1,220,1,220,1,220,1,220,1,220,1,220,3,220,5081,8,220,1,220,
        3,220,5084,8,220,1,221,1,221,1,221,1,221,1,221,1,221,1,222,1,222,
        1,222,1,222,1,222,1,222,1,222,5,222,5099,8,222,10,222,12,222,5102,
        9,222,1,222,1,222,1,223,1,223,1,223,3,223,5109,8,223,1,223,1,223,
        1,223,1,223,1,223,1,223,3,223,5117,8,223,1,224,1,224,3,224,5121,
        8,224,1,224,1,224,1,225,1,225,1,225,3,225,5128,8,225,1,225,1,225,
        4,225,5132,8,225,11,225,12,225,5133,1,226,1,226,1,226,1,226,4,226,
        5140,8,226,11,226,12,226,5141,1,227,1,227,1,227,3,227,5147,8,227,
        1,227,1,227,1,227,5,227,5152,8,227,10,227,12,227,5155,9,227,1,227,
        1,227,1,227,5,227,5160,8,227,10,227,12,227,5163,9,227,1,227,1,227,
        1,227,1,227,3,227,5169,8,227,1,227,5,227,5172,8,227,10,227,12,227,
        5175,9,227,3,227,5177,8,227,3,227,5179,8,227,1,227,1,227,4,227,5183,
        8,227,11,227,12,227,5184,3,227,5187,8,227,1,227,1,227,5,227,5191,
        8,227,10,227,12,227,5194,9,227,1,227,1,227,3,227,5198,8,227,1,227,
        1,227,1,227,1,227,1,227,3,227,5205,8,227,1,228,1,228,1,228,3,228,
        5210,8,228,1,228,1,228,3,228,5214,8,228,1,228,1,228,1,228,3,228,
        5219,8,228,5,228,5221,8,228,10,228,12,228,5224,9,228,1,228,1,228,
        1,228,3,228,5229,8,228,1,228,1,228,1,228,1,228,3,228,5235,8,228,
        1,228,5,228,5238,8,228,10,228,12,228,5241,9,228,3,228,5243,8,228,
        3,228,5245,8,228,1,228,1,228,4,228,5249,8,228,11,228,12,228,5250,
        3,228,5253,8,228,1,228,1,228,5,228,5257,8,228,10,228,12,228,5260,
        9,228,1,228,1,228,3,228,5264,8,228,1,229,1,229,1,229,3,229,5269,
        8,229,1,229,1,229,1,229,5,229,5274,8,229,10,229,12,229,5277,9,229,
        1,230,1,230,1,230,1,230,5,230,5283,8,230,10,230,12,230,5286,9,230,
        1,230,1,230,3,230,5290,8,230,1,230,1,230,1,230,1,230,1,230,5,230,
        5297,8,230,10,230,12,230,5300,9,230,1,230,3,230,5303,8,230,1,230,
        1,230,1,230,1,230,3,230,5309,8,230,1,230,5,230,5312,8,230,10,230,
        12,230,5315,9,230,3,230,5317,8,230,3,230,5319,8,230,1,230,1,230,
        1,230,1,230,5,230,5325,8,230,10,230,12,230,5328,9,230,3,230,5330,
        8,230,1,230,1,230,1,230,1,230,1,230,3,230,5337,8,230,3,230,5339,
        8,230,1,230,1,230,1,230,3,230,5344,8,230,1,230,1,230,1,230,5,230,
        5349,8,230,10,230,12,230,5352,9,230,1,230,1,230,1,230,1,230,5,230,
        5358,8,230,10,230,12,230,5361,9,230,1,230,1,230,1,230,3,230,5366,
        8,230,3,230,5368,8,230,1,231,1,231,1,231,1,231,1,231,3,231,5375,
        8,231,1,231,3,231,5378,8,231,1,232,1,232,1,232,1,232,1,232,1,232,
        1,232,1,232,5,232,5388,8,232,10,232,12,232,5391,9,232,1,232,1,232,
        1,232,3,232,5396,8,232,1,233,1,233,1,233,1,233,1,233,1,233,3,233,
        5404,8,233,1,233,3,233,5407,8,233,1,233,1,233,3,233,5411,8,233,1,
        233,3,233,5414,8,233,1,233,1,233,3,233,5418,8,233,3,233,5420,8,233,
        1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1,234,3,234,5431,
        8,234,1,234,3,234,5434,8,234,1,234,1,234,3,234,5438,8,234,1,234,
        3,234,5441,8,234,1,234,3,234,5444,8,234,1,235,1,235,1,235,1,235,
        1,235,3,235,5451,8,235,1,236,1,236,1,236,1,236,1,236,1,236,1,236,
        1,236,5,236,5461,8,236,10,236,12,236,5464,9,236,3,236,5466,8,236,
        1,237,1,237,1,237,1,237,1,237,3,237,5473,8,237,1,237,1,237,5,237,
        5477,8,237,10,237,12,237,5480,9,237,1,238,1,238,1,238,1,238,1,238,
        5,238,5487,8,238,10,238,12,238,5490,9,238,1,239,1,239,3,239,5494,
        8,239,1,239,1,239,1,239,5,239,5499,8,239,10,239,12,239,5502,9,239,
        1,239,1,239,3,239,5506,8,239,1,239,1,239,1,239,1,239,3,239,5512,
        8,239,1,239,1,239,3,239,5516,8,239,1,239,1,239,3,239,5520,8,239,
        1,239,1,239,1,239,1,239,1,239,1,239,3,239,5528,8,239,1,239,1,239,
        3,239,5532,8,239,1,239,1,239,3,239,5536,8,239,1,239,1,239,1,239,
        1,239,3,239,5542,8,239,3,239,5544,8,239,1,240,1,240,1,240,1,240,
        1,241,1,241,1,242,1,242,1,242,1,242,3,242,5556,8,242,1,242,1,242,
        1,242,3,242,5561,8,242,1,242,1,242,1,242,1,242,3,242,5567,8,242,
        1,242,1,242,1,242,1,242,3,242,5573,8,242,1,242,1,242,3,242,5577,
        8,242,1,242,1,242,1,242,3,242,5582,8,242,3,242,5584,8,242,1,243,
        1,243,1,243,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,
        1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,1,244,3,244,
        5608,8,244,4,244,5610,8,244,11,244,12,244,5611,1,244,3,244,5615,
        8,244,1,245,1,245,1,245,1,245,1,245,1,245,1,245,3,245,5624,8,245,
        1,245,1,245,3,245,5628,8,245,1,245,1,245,1,245,1,245,1,245,1,245,
        1,245,3,245,5637,8,245,1,245,1,245,3,245,5641,8,245,1,245,1,245,
        3,245,5645,8,245,1,245,1,245,1,245,1,245,3,245,5651,8,245,3,245,
        5653,8,245,1,246,1,246,1,246,1,246,1,246,1,246,1,246,3,246,5662,
        8,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,3,246,5672,
        8,246,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,
        1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,
        1,247,1,247,1,247,1,247,3,247,5699,8,247,1,248,1,248,3,248,5703,
        8,248,1,248,1,248,1,248,3,248,5708,8,248,1,249,1,249,1,249,1,249,
        1,249,3,249,5715,8,249,1,249,3,249,5718,8,249,1,249,1,249,1,249,
        1,249,3,249,5724,8,249,1,250,1,250,1,250,1,250,1,250,1,250,1,250,
        1,250,3,250,5734,8,250,1,251,1,251,1,251,1,251,1,251,1,251,1,251,
        1,251,3,251,5744,8,251,1,252,1,252,1,252,1,252,1,252,1,252,1,252,
        1,252,3,252,5754,8,252,1,252,1,252,1,252,1,252,3,252,5760,8,252,
        1,252,1,252,1,252,1,252,1,252,1,252,1,252,3,252,5769,8,252,1,252,
        1,252,1,252,1,252,3,252,5775,8,252,1,252,1,252,1,252,1,252,1,252,
        3,252,5782,8,252,3,252,5784,8,252,1,253,1,253,1,253,1,254,1,254,
        1,254,3,254,5792,8,254,1,254,1,254,1,254,1,254,3,254,5798,8,254,
        1,254,1,254,3,254,5802,8,254,1,255,1,255,1,255,1,255,1,255,1,255,
        1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,3,255,5819,
        8,255,1,256,1,256,1,256,1,257,1,257,1,257,1,257,1,257,3,257,5829,
        8,257,1,258,1,258,3,258,5833,8,258,1,258,1,258,3,258,5837,8,258,
        1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,3,258,5847,8,258,
        1,258,1,258,1,258,3,258,5852,8,258,1,258,1,258,1,258,1,258,1,258,
        1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,
        1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,
        1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,
        1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,
        1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,
        1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,1,258,3,258,
        5924,8,258,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,
        1,259,1,259,1,259,1,259,1,259,1,259,1,259,3,259,5942,8,259,1,260,
        1,260,1,260,1,260,1,261,1,261,3,261,5950,8,261,1,261,1,261,1,261,
        1,261,3,261,5956,8,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,
        1,261,1,261,1,261,3,261,5968,8,261,1,261,1,261,3,261,5972,8,261,
        1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,3,261,5983,
        8,261,1,261,1,261,3,261,5987,8,261,1,261,1,261,1,261,1,261,1,261,
        1,261,1,261,3,261,5996,8,261,1,262,1,262,1,262,1,262,5,262,6002,
        8,262,10,262,12,262,6005,9,262,1,263,1,263,1,263,1,263,3,263,6011,
        8,263,1,264,1,264,3,264,6015,8,264,1,264,1,264,1,264,1,265,1,265,
        3,265,6022,8,265,1,265,1,265,1,265,3,265,6027,8,265,1,265,3,265,
        6030,8,265,1,265,3,265,6033,8,265,1,266,1,266,1,267,1,267,1,267,
        1,267,1,267,1,267,1,267,3,267,6044,8,267,1,268,1,268,3,268,6048,
        8,268,1,268,1,268,3,268,6052,8,268,1,268,1,268,1,268,1,268,1,268,
        1,268,1,269,1,269,1,269,1,269,1,269,5,269,6065,8,269,10,269,12,269,
        6068,9,269,1,269,1,269,1,269,1,269,5,269,6074,8,269,10,269,12,269,
        6077,9,269,3,269,6079,8,269,1,270,1,270,1,270,1,270,1,270,1,271,
        1,271,1,271,1,271,1,271,5,271,6091,8,271,10,271,12,271,6094,9,271,
        1,272,1,272,1,272,1,272,1,272,1,272,1,273,1,273,1,273,1,273,1,274,
        1,274,1,274,1,274,1,274,3,274,6111,8,274,1,274,1,274,1,274,1,274,
        1,274,1,274,1,274,1,274,1,274,1,274,1,274,3,274,6124,8,274,1,274,
        3,274,6127,8,274,1,274,1,274,3,274,6131,8,274,1,274,3,274,6134,8,
        274,3,274,6136,8,274,1,275,1,275,1,275,1,275,1,275,3,275,6143,8,
        275,1,275,1,275,1,275,1,275,1,275,3,275,6150,8,275,5,275,6152,8,
        275,10,275,12,275,6155,9,275,1,275,1,275,1,275,1,275,3,275,6161,
        8,275,1,275,1,275,1,275,1,275,1,275,3,275,6168,8,275,1,275,3,275,
        6171,8,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,
        1,275,1,275,1,275,5,275,6185,8,275,10,275,12,275,6188,9,275,3,275,
        6190,8,275,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,3,276,
        6200,8,276,1,276,1,276,3,276,6204,8,276,1,276,1,276,1,276,1,276,
        3,276,6210,8,276,1,276,3,276,6213,8,276,1,276,3,276,6216,8,276,1,
        276,1,276,1,276,3,276,6221,8,276,1,276,1,276,3,276,6225,8,276,1,
        276,3,276,6228,8,276,1,276,1,276,1,276,1,276,1,276,3,276,6235,8,
        276,1,276,3,276,6238,8,276,1,276,1,276,1,276,1,276,3,276,6244,8,
        276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,
        1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,
        1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,
        1,276,1,276,3,276,6280,8,276,1,276,3,276,6283,8,276,1,276,1,276,
        1,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,3,276,6295,8,276,
        1,276,3,276,6298,8,276,1,276,1,276,1,276,1,276,1,276,1,276,1,276,
        1,276,1,276,1,276,1,276,1,276,1,276,1,276,3,276,6314,8,276,3,276,
        6316,8,276,1,276,1,276,3,276,6320,8,276,1,276,1,276,1,276,1,276,
        1,276,3,276,6327,8,276,1,276,1,276,3,276,6331,8,276,1,276,1,276,
        1,276,1,276,1,276,3,276,6338,8,276,1,276,3,276,6341,8,276,1,276,
        1,276,1,276,1,276,1,276,5,276,6348,8,276,10,276,12,276,6351,9,276,
        3,276,6353,8,276,1,276,1,276,1,276,3,276,6358,8,276,1,276,1,276,
        1,276,1,276,3,276,6364,8,276,3,276,6366,8,276,1,276,1,276,1,276,
        1,276,3,276,6372,8,276,1,276,1,276,3,276,6376,8,276,1,277,1,277,
        1,277,1,277,3,277,6382,8,277,1,277,3,277,6385,8,277,1,277,3,277,
        6388,8,277,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,1,278,
        1,278,1,278,3,278,6401,8,278,1,278,3,278,6404,8,278,1,279,1,279,
        1,279,1,279,3,279,6410,8,279,1,280,3,280,6413,8,280,1,280,1,280,
        1,280,1,280,1,280,1,280,3,280,6421,8,280,1,280,1,280,1,280,1,280,
        1,280,1,280,3,280,6429,8,280,1,281,1,281,1,281,1,281,3,281,6435,
        8,281,1,281,3,281,6438,8,281,1,281,1,281,3,281,6442,8,281,1,282,
        1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,1,282,
        3,282,6456,8,282,1,283,1,283,1,283,1,284,1,284,1,284,1,284,1,284,
        5,284,6466,8,284,10,284,12,284,6469,9,284,1,284,1,284,1,284,1,284,
        1,284,3,284,6476,8,284,1,284,1,284,3,284,6480,8,284,1,284,1,284,
        1,284,1,285,1,285,3,285,6487,8,285,1,285,1,285,1,285,5,285,6492,
        8,285,10,285,12,285,6495,9,285,1,286,1,286,3,286,6499,8,286,1,286,
        1,286,1,287,1,287,1,287,1,287,1,287,1,287,1,287,5,287,6510,8,287,
        10,287,12,287,6513,9,287,1,288,1,288,1,288,1,288,5,288,6519,8,288,
        10,288,12,288,6522,9,288,1,289,1,289,1,289,1,289,1,289,3,289,6529,
        8,289,1,290,1,290,1,290,3,290,6534,8,290,1,290,3,290,6537,8,290,
        1,291,1,291,1,291,3,291,6542,8,291,1,291,3,291,6545,8,291,1,292,
        1,292,1,293,1,293,1,294,1,294,1,294,1,294,1,294,1,294,3,294,6557,
        8,294,1,295,1,295,1,295,3,295,6562,8,295,1,295,1,295,1,295,1,295,
        1,295,1,295,1,295,1,295,1,295,1,295,1,295,3,295,6575,8,295,3,295,
        6577,8,295,1,295,1,295,1,295,3,295,6582,8,295,1,295,1,295,3,295,
        6586,8,295,1,295,3,295,6589,8,295,3,295,6591,8,295,1,296,1,296,1,
        296,1,296,1,296,3,296,6598,8,296,1,297,1,297,1,297,1,297,1,297,3,
        297,6605,8,297,1,297,3,297,6608,8,297,1,297,3,297,6611,8,297,1,297,
        1,297,1,297,1,297,3,297,6617,8,297,1,297,1,297,3,297,6621,8,297,
        1,298,1,298,1,298,1,298,3,298,6627,8,298,1,299,1,299,1,299,1,299,
        1,299,1,299,3,299,6635,8,299,1,299,1,299,1,300,1,300,1,300,1,300,
        1,300,3,300,6644,8,300,1,300,1,300,1,301,1,301,1,301,1,302,1,302,
        1,302,1,303,1,303,1,303,3,303,6657,8,303,1,303,1,303,1,303,3,303,
        6662,8,303,1,303,1,303,1,303,1,303,5,303,6668,8,303,10,303,12,303,
        6671,9,303,3,303,6673,8,303,1,304,1,304,1,304,3,304,6678,8,304,1,
        304,1,304,1,304,3,304,6683,8,304,1,304,1,304,1,304,1,304,5,304,6689,
        8,304,10,304,12,304,6692,9,304,3,304,6694,8,304,1,305,1,305,1,305,
        1,305,1,305,1,305,3,305,6702,8,305,1,306,1,306,3,306,6706,8,306,
        1,306,1,306,1,306,5,306,6711,8,306,10,306,12,306,6714,9,306,1,307,
        1,307,1,307,3,307,6719,8,307,1,307,3,307,6722,8,307,1,308,1,308,
        3,308,6726,8,308,1,308,1,308,1,308,1,308,1,308,1,308,1,308,1,308,
        1,308,5,308,6737,8,308,10,308,12,308,6740,9,308,1,308,1,308,1,308,
        3,308,6745,8,308,1,308,1,308,1,308,1,308,1,308,1,308,1,308,1,308,
        5,308,6755,8,308,10,308,12,308,6758,9,308,3,308,6760,8,308,1,309,
        1,309,1,310,1,310,1,310,1,310,1,310,3,310,6769,8,310,1,310,1,310,
        1,310,3,310,6774,8,310,1,311,1,311,1,312,1,312,1,313,1,313,1,314,
        1,314,1,315,1,315,1,316,1,316,1,317,1,317,1,318,1,318,1,318,5,318,
        6793,8,318,10,318,12,318,6796,9,318,1,319,1,319,1,320,1,320,1,321,
        1,321,1,322,1,322,1,323,1,323,1,323,5,323,6809,8,323,10,323,12,323,
        6812,9,323,1,324,1,324,1,325,1,325,1,325,5,325,6819,8,325,10,325,
        12,325,6822,9,325,1,326,1,326,3,326,6826,8,326,1,327,1,327,1,327,
        3,327,6831,8,327,3,327,6833,8,327,1,327,3,327,6836,8,327,1,327,1,
        327,3,327,6840,8,327,3,327,6842,8,327,1,328,1,328,1,328,5,328,6847,
        8,328,10,328,12,328,6850,9,328,1,329,1,329,1,329,3,329,6855,8,329,
        3,329,6857,8,329,1,329,3,329,6860,8,329,1,329,1,329,3,329,6864,8,
        329,1,329,3,329,6867,8,329,1,330,1,330,1,331,1,331,1,332,1,332,1,
        333,1,333,1,333,5,333,6878,8,333,10,333,12,333,6881,9,333,1,334,
        1,334,1,335,1,335,1,335,1,335,1,335,3,335,6890,8,335,1,335,3,335,
        6893,8,335,1,335,3,335,6896,8,335,1,336,1,336,1,336,1,336,1,337,
        1,337,1,337,1,338,1,338,1,338,1,338,3,338,6909,8,338,1,339,1,339,
        1,340,1,340,3,340,6915,8,340,1,340,3,340,6918,8,340,1,341,1,341,
        1,342,1,342,1,342,1,342,3,342,6926,8,342,1,343,1,343,1,344,1,344,
        1,344,3,344,6933,8,344,1,345,1,345,1,346,1,346,1,346,1,346,1,346,
        1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,1,346,4,346,6951,
        8,346,11,346,12,346,6952,1,347,1,347,1,347,1,347,1,347,3,347,6960,
        8,347,3,347,6962,8,347,1,348,1,348,1,348,4,348,6967,8,348,11,348,
        12,348,6968,3,348,6971,8,348,1,349,1,349,3,349,6975,8,349,1,350,
        1,350,1,350,5,350,6980,8,350,10,350,12,350,6983,9,350,1,351,1,351,
        1,351,3,351,6988,8,351,1,352,1,352,1,352,1,352,1,352,1,352,1,352,
        1,352,1,352,3,352,6999,8,352,1,353,1,353,1,353,1,353,3,353,7005,
        8,353,1,354,1,354,1,355,1,355,3,355,7011,8,355,1,356,3,356,7014,
        8,356,1,356,1,356,3,356,7018,8,356,1,356,4,356,7021,8,356,11,356,
        12,356,7022,1,356,3,356,7026,8,356,1,356,1,356,3,356,7030,8,356,
        1,356,1,356,3,356,7034,8,356,3,356,7036,8,356,1,357,1,357,1,358,
        3,358,7041,8,358,1,358,1,358,1,359,3,359,7046,8,359,1,359,1,359,
        1,360,1,360,1,360,1,360,1,360,1,360,1,360,1,360,1,360,3,360,7059,
        8,360,1,360,3,360,7062,8,360,1,361,1,361,3,361,7066,8,361,1,361,
        3,361,7069,8,361,1,361,3,361,7072,8,361,1,361,1,361,1,361,3,361,
        7077,8,361,1,361,1,361,1,361,3,361,7082,8,361,1,361,1,361,1,361,
        1,361,3,361,7088,8,361,1,361,3,361,7091,8,361,1,361,1,361,1,361,
        3,361,7096,8,361,1,361,3,361,7099,8,361,1,361,1,361,1,361,3,361,
        7104,8,361,1,361,3,361,7107,8,361,1,361,1,361,3,361,7111,8,361,1,
        361,5,361,7114,8,361,10,361,12,361,7117,9,361,1,361,1,361,3,361,
        7121,8,361,1,361,5,361,7124,8,361,10,361,12,361,7127,9,361,1,361,
        1,361,3,361,7131,8,361,1,361,3,361,7134,8,361,1,361,5,361,7137,8,
        361,10,361,12,361,7140,9,361,1,361,1,361,3,361,7144,8,361,1,361,
        5,361,7147,8,361,10,361,12,361,7150,9,361,1,361,1,361,1,361,3,361,
        7155,8,361,1,361,1,361,1,361,3,361,7160,8,361,1,361,1,361,1,361,
        3,361,7165,8,361,1,361,1,361,1,361,3,361,7170,8,361,1,361,1,361,
        3,361,7174,8,361,1,361,3,361,7177,8,361,1,361,1,361,1,361,3,361,
        7182,8,361,1,361,1,361,3,361,7186,8,361,1,361,1,361,3,361,7190,8,
        361,1,362,1,362,1,362,1,362,5,362,7196,8,362,10,362,12,362,7199,
        9,362,1,362,1,362,1,363,1,363,3,363,7205,8,363,1,363,1,363,3,363,
        7209,8,363,1,363,1,363,1,363,3,363,7214,8,363,1,363,1,363,1,363,
        3,363,7219,8,363,1,363,1,363,3,363,7223,8,363,3,363,7225,8,363,1,
        363,3,363,7228,8,363,1,364,1,364,1,364,1,364,1,365,1,365,1,365,1,
        365,1,365,1,365,1,366,1,366,1,366,1,366,3,366,7244,8,366,1,366,1,
        366,1,367,1,367,1,367,1,367,5,367,7252,8,367,10,367,12,367,7255,
        9,367,1,367,1,367,1,368,1,368,1,368,5,368,7262,8,368,10,368,12,368,
        7265,9,368,1,369,1,369,1,369,1,369,5,369,7271,8,369,10,369,12,369,
        7274,9,369,1,370,1,370,1,370,1,370,5,370,7280,8,370,10,370,12,370,
        7283,9,370,1,370,1,370,1,371,1,371,3,371,7289,8,371,1,372,1,372,
        1,372,5,372,7294,8,372,10,372,12,372,7297,9,372,1,373,1,373,1,373,
        5,373,7302,8,373,10,373,12,373,7305,9,373,1,374,1,374,1,374,5,374,
        7310,8,374,10,374,12,374,7313,9,374,1,375,1,375,1,375,1,375,1,375,
        1,375,1,375,1,375,1,375,3,375,7324,8,375,1,375,1,375,1,375,1,375,
        1,375,3,375,7331,8,375,1,375,1,375,1,375,1,375,1,375,1,375,1,375,
        1,375,3,375,7341,8,375,1,376,1,376,1,376,3,376,7346,8,376,1,376,
        3,376,7349,8,376,1,376,1,376,1,376,3,376,7354,8,376,1,376,3,376,
        7357,8,376,1,377,1,377,1,377,1,378,1,378,1,378,1,378,1,379,1,379,
        1,379,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,
        3,380,7379,8,380,1,380,1,380,1,380,1,380,1,380,1,380,1,380,3,380,
        7388,8,380,1,380,3,380,7391,8,380,1,381,1,381,1,381,3,381,7396,8,
        381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,
        1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,
        1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,4,381,7428,
        8,381,11,381,12,381,7429,1,381,1,381,3,381,7434,8,381,1,381,1,381,
        1,381,1,381,4,381,7440,8,381,11,381,12,381,7441,1,381,1,381,3,381,
        7446,8,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,3,381,7455,
        8,381,1,381,1,381,1,381,1,381,1,381,1,381,3,381,7463,8,381,1,381,
        1,381,1,381,3,381,7468,8,381,1,381,1,381,1,381,1,381,1,381,1,381,
        3,381,7476,8,381,1,381,1,381,1,381,3,381,7481,8,381,1,381,1,381,
        1,381,3,381,7486,8,381,3,381,7488,8,381,1,381,1,381,1,381,1,381,
        1,381,1,381,1,381,3,381,7497,8,381,1,381,1,381,1,381,3,381,7502,
        8,381,1,381,1,381,1,381,1,381,1,381,1,381,3,381,7510,8,381,1,381,
        1,381,1,381,3,381,7515,8,381,1,381,1,381,1,381,1,381,1,381,1,381,
        3,381,7523,8,381,1,381,1,381,1,381,1,381,1,381,1,381,3,381,7531,
        8,381,1,381,3,381,7534,8,381,1,381,1,381,1,381,1,381,1,381,1,381,
        1,381,1,381,3,381,7544,8,381,1,381,1,381,1,381,1,381,1,381,1,381,
        1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,1,381,3,381,
        7562,8,381,1,381,3,381,7565,8,381,1,381,3,381,7568,8,381,1,381,1,
        381,3,381,7572,8,381,1,382,1,382,1,382,1,382,1,382,1,383,1,383,1,
        383,1,383,5,383,7583,8,383,10,383,12,383,7586,9,383,1,383,1,383,
        1,383,1,383,1,383,3,383,7593,8,383,1,384,1,384,3,384,7597,8,384,
        1,385,1,385,1,385,3,385,7602,8,385,1,385,1,385,1,385,3,385,7607,
        8,385,1,385,1,385,1,385,1,385,3,385,7613,8,385,1,385,1,385,1,385,
        3,385,7618,8,385,1,385,1,385,3,385,7622,8,385,1,385,1,385,1,385,
        3,385,7627,8,385,1,385,1,385,1,385,3,385,7632,8,385,1,385,1,385,
        1,385,3,385,7637,8,385,1,385,1,385,1,385,1,385,1,385,1,385,5,385,
        7645,8,385,10,385,12,385,7648,9,385,3,385,7650,8,385,1,385,1,385,
        3,385,7654,8,385,1,385,1,385,3,385,7658,8,385,1,386,1,386,1,386,
        1,386,1,386,3,386,7665,8,386,1,386,1,386,3,386,7669,8,386,1,386,
        1,386,1,386,1,386,1,386,1,386,1,386,1,386,1,386,1,386,1,386,1,386,
        1,386,1,386,1,386,1,386,1,386,1,386,1,386,1,386,1,386,1,386,1,386,
        1,386,1,386,1,386,1,386,3,386,7698,8,386,1,387,1,387,1,387,1,387,
        1,387,1,387,3,387,7706,8,387,1,388,3,388,7709,8,388,1,388,3,388,
        7712,8,388,1,388,3,388,7715,8,388,1,388,3,388,7718,8,388,1,389,1,
        389,1,390,1,390,1,390,1,391,1,391,1,392,1,392,3,392,7729,8,392,1,
        393,1,393,1,393,1,393,1,393,1,394,1,394,1,394,1,394,1,394,1,394,
        1,394,3,394,7743,8,394,1,395,1,395,1,395,1,395,1,395,5,395,7750,
        8,395,10,395,12,395,7753,9,395,1,396,1,396,1,396,1,396,1,396,1,396,
        1,396,1,396,1,396,1,396,1,396,1,396,1,396,1,396,1,396,1,396,1,396,
        1,396,1,396,1,396,1,396,1,396,1,396,1,396,3,396,7779,8,396,1,397,
        1,397,1,397,1,397,1,397,1,398,1,398,1,398,5,398,7789,8,398,10,398,
        12,398,7792,9,398,1,399,1,399,1,399,3,399,7797,8,399,1,400,1,400,
        1,400,1,400,1,400,1,400,3,400,7805,8,400,1,400,1,400,1,400,3,400,
        7810,8,400,1,400,1,400,1,400,1,400,5,400,7816,8,400,10,400,12,400,
        7819,9,400,1,401,1,401,1,401,1,401,1,401,3,401,7826,8,401,1,401,
        1,401,1,401,1,401,1,401,1,401,1,401,1,401,1,401,1,401,1,401,3,401,
        7839,8,401,1,401,1,401,1,401,1,401,3,401,7845,8,401,1,401,1,401,
        1,401,1,401,3,401,7851,8,401,1,401,1,401,1,401,1,401,1,401,1,401,
        1,401,1,401,1,401,1,401,1,401,1,401,1,401,3,401,7866,8,401,1,401,
        1,401,3,401,7870,8,401,1,401,1,401,1,401,1,401,3,401,7876,8,401,
        1,401,1,401,1,401,1,401,1,401,1,401,1,401,5,401,7885,8,401,10,401,
        12,401,7888,9,401,1,402,1,402,1,402,1,402,1,402,1,402,1,402,1,402,
        1,402,1,402,1,402,1,402,1,402,1,402,1,402,1,402,5,402,7906,8,402,
        10,402,12,402,7909,9,402,1,402,1,402,1,402,1,402,1,402,1,402,1,402,
        4,402,7918,8,402,11,402,12,402,7919,1,402,1,402,1,402,1,402,1,402,
        1,402,1,402,1,402,1,402,1,402,1,402,1,402,1,402,1,402,1,402,1,402,
        3,402,7938,8,402,1,402,1,402,1,402,1,402,1,402,1,402,1,402,1,402,
        1,402,1,402,1,402,1,402,1,402,1,402,1,402,5,402,7955,8,402,10,402,
        12,402,7958,9,402,1,403,1,403,1,404,1,404,1,404,1,404,1,404,1,404,
        1,404,1,404,3,404,7970,8,404,1,405,1,405,1,405,1,405,1,405,1,405,
        1,405,3,405,7979,8,405,1,406,1,406,1,406,1,406,1,406,1,406,1,406,
        3,406,7988,8,406,1,407,1,407,1,407,1,407,1,407,1,407,1,407,3,407,
        7997,8,407,1,408,1,408,1,409,1,409,1,409,1,409,1,409,3,409,8006,
        8,409,1,410,1,410,1,411,1,411,1,412,1,412,1,413,1,413,1,414,1,414,
        1,415,1,415,1,416,1,416,1,416,0,5,208,210,800,802,804,417,0,2,4,
        6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,
        50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,
        94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,
        128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,
        160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,
        192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,
        224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,
        256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,
        288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,
        320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,
        352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,
        384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,
        416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,
        448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,
        480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,
        512,514,516,518,520,522,524,526,528,530,532,534,536,538,540,542,
        544,546,548,550,552,554,556,558,560,562,564,566,568,570,572,574,
        576,578,580,582,584,586,588,590,592,594,596,598,600,602,604,606,
        608,610,612,614,616,618,620,622,624,626,628,630,632,634,636,638,
        640,642,644,646,648,650,652,654,656,658,660,662,664,666,668,670,
        672,674,676,678,680,682,684,686,688,690,692,694,696,698,700,702,
        704,706,708,710,712,714,716,718,720,722,724,726,728,730,732,734,
        736,738,740,742,744,746,748,750,752,754,756,758,760,762,764,766,
        768,770,772,774,776,778,780,782,784,786,788,790,792,794,796,798,
        800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,
        832,0,160,2,0,39,39,152,152,2,0,508,508,514,514,3,0,69,69,161,161,
        182,182,3,0,42,42,357,357,430,430,4,0,42,42,389,389,505,505,595,
        595,2,0,494,494,882,882,2,0,79,79,143,143,2,0,16,16,306,306,3,0,
        44,44,86,86,185,185,2,0,406,406,538,538,3,0,486,486,661,661,670,
        670,2,0,364,364,436,436,2,0,325,325,450,450,2,0,42,42,871,872,2,
        0,37,37,678,678,2,0,323,323,418,418,2,0,435,435,686,686,3,0,80,80,
        85,85,126,126,2,0,82,82,92,92,2,0,69,69,161,161,3,0,42,42,374,374,
        403,403,3,0,42,42,370,370,802,802,2,0,648,648,685,685,3,0,408,408,
        526,526,597,597,2,0,329,329,522,522,1,0,871,872,2,0,882,882,889,
        889,2,0,82,82,360,360,2,0,523,523,882,882,2,0,524,524,882,882,3,
        0,402,402,445,445,502,502,7,0,42,42,342,342,345,345,374,374,403,
        403,554,554,889,889,2,0,494,494,506,506,1,0,872,873,2,0,6,6,51,51,
        2,0,5,5,81,81,2,0,27,27,31,31,4,0,42,42,357,357,430,430,434,434,
        2,0,368,368,375,375,2,0,369,369,425,425,2,0,13,13,176,176,2,0,194,
        194,690,690,2,0,22,22,146,146,3,0,43,43,76,76,107,107,2,0,7,7,49,
        49,2,0,107,107,347,347,2,0,337,337,398,398,2,0,102,102,587,587,2,
        0,43,43,107,107,3,0,59,59,181,181,828,828,2,0,185,185,594,594,2,
        0,159,159,503,503,4,0,402,402,445,445,501,501,542,542,2,0,402,402,
        501,501,2,0,14,14,45,45,3,0,66,66,79,79,187,187,2,0,35,35,84,84,
        2,0,98,98,150,150,2,0,7,7,49,50,1,0,637,638,2,0,173,173,752,752,
        2,0,413,413,593,593,2,0,228,228,453,453,2,0,563,563,598,598,8,0,
        108,108,455,455,459,460,462,462,464,464,467,476,499,499,557,557,
        6,0,456,458,461,461,463,463,465,465,477,477,558,558,7,0,109,109,
        411,411,416,416,454,454,466,466,573,573,617,617,2,0,116,116,882,
        882,2,0,118,119,507,507,7,0,499,499,557,557,606,609,611,611,619,
        619,622,628,630,632,6,0,558,558,610,610,612,612,614,616,618,618,
        620,620,7,0,412,412,416,416,573,573,613,613,617,617,621,621,629,
        629,3,0,70,70,118,119,507,507,2,0,438,438,639,639,2,0,633,633,635,
        635,2,0,317,317,640,640,2,0,91,91,577,577,2,0,51,51,362,362,3,0,
        32,32,61,61,180,180,2,0,15,15,340,340,2,0,678,678,835,835,3,0,132,
        132,173,173,409,409,3,0,6,6,51,51,492,492,3,0,13,13,20,20,188,188,
        2,0,42,42,122,122,2,0,104,104,183,183,1,0,873,874,2,0,333,333,598,
        598,2,0,40,40,684,684,2,0,392,392,549,549,2,0,115,115,450,450,4,
        0,208,208,210,210,216,216,649,649,3,0,413,413,531,531,893,894,2,
        0,841,841,857,857,2,0,318,318,559,559,2,0,68,68,80,80,3,0,132,132,
        178,178,385,385,2,0,493,493,645,645,2,0,383,383,688,688,3,0,82,82,
        93,93,426,426,4,0,413,413,450,450,531,532,593,593,2,0,645,645,683,
        683,2,0,349,349,548,548,6,0,228,228,380,380,382,382,410,410,556,
        556,599,599,2,0,45,46,62,62,3,0,442,442,663,663,666,666,10,0,332,
        332,339,339,351,353,359,359,487,487,495,495,650,650,657,657,822,
        822,832,832,2,0,36,36,170,170,2,0,117,117,831,831,11,0,332,332,339,
        339,351,353,359,359,487,487,495,495,578,578,650,650,657,657,822,
        822,832,832,2,0,870,870,891,892,1,0,892,893,2,0,348,348,797,808,
        3,0,871,874,883,883,885,885,2,0,63,63,179,179,2,0,116,116,886,886,
        5,0,26,26,224,226,233,233,235,238,498,498,2,0,26,26,224,224,2,0,
        26,26,224,225,1,0,198,209,3,0,184,184,197,197,596,596,2,0,213,218,
        403,403,6,0,219,219,230,230,232,232,234,234,241,241,321,322,4,0,
        220,223,228,229,231,231,319,319,2,0,155,155,239,239,2,0,442,442,
        813,821,2,0,228,228,498,498,5,0,202,202,208,208,219,220,222,222,
        442,442,1,0,216,217,2,0,184,184,596,596,2,0,202,202,208,208,2,0,
        189,189,682,682,2,0,287,288,294,294,3,0,152,152,285,288,303,303,
        1,0,297,298,3,0,18,18,96,96,177,177,2,0,224,224,228,228,2,0,219,
        220,222,222,3,0,14,14,45,45,830,830,3,0,258,258,270,271,281,281,
        3,0,259,261,277,280,282,284,2,0,267,267,269,269,2,0,265,265,268,
        268,2,0,263,264,274,276,2,0,134,134,587,587,2,0,405,405,539,539,
        2,0,512,512,529,529,2,0,114,114,860,860,3,0,63,63,179,179,674,674,
        2,0,139,139,151,151,3,0,7,7,309,309,602,602,3,0,114,114,853,854,
        860,861,1,0,850,856,2,0,228,228,756,796,1,0,809,812,5,0,717,718,
        734,736,743,743,749,750,752,752,1,0,696,703,3,0,219,223,236,236,
        239,239,76,0,12,12,15,15,19,19,30,30,36,37,42,42,48,48,55,55,57,
        57,59,59,74,74,95,95,117,117,122,122,125,125,131,131,160,160,170,
        170,241,241,255,262,266,266,270,271,277,284,304,309,311,329,331,
        343,345,376,378,393,395,400,402,404,406,410,413,415,417,426,428,
        428,430,434,436,454,456,463,465,473,475,476,478,498,500,506,508,
        510,512,522,525,530,533,538,540,542,544,554,556,562,565,572,575,
        575,577,578,580,605,633,647,649,665,667,674,676,685,687,688,690,
        695,704,704,706,707,709,712,714,716,719,721,726,727,729,733,737,
        738,740,742,744,744,746,748,751,751,753,755,802,802,822,822,825,
        825,832,833,838,838,24,0,39,39,98,98,150,150,152,152,219,221,223,
        223,253,254,262,265,267,269,272,276,296,296,435,435,686,686,696,
        703,746,746,813,813,816,821,823,824,826,827,829,831,834,834,836,
        836,840,840,856,856,9382,0,837,1,0,0,0,2,847,1,0,0,0,4,856,1,0,0,
        0,6,858,1,0,0,0,8,899,1,0,0,0,10,918,1,0,0,0,12,929,1,0,0,0,14,945,
        1,0,0,0,16,950,1,0,0,0,18,962,1,0,0,0,20,997,1,0,0,0,22,1007,1,0,
        0,0,24,1009,1,0,0,0,26,1021,1,0,0,0,28,1051,1,0,0,0,30,1087,1,0,
        0,0,32,1138,1,0,0,0,34,1167,1,0,0,0,36,1174,1,0,0,0,38,1271,1,0,
        0,0,40,1273,1,0,0,0,42,1310,1,0,0,0,44,1374,1,0,0,0,46,1396,1,0,
        0,0,48,1402,1,0,0,0,50,1424,1,0,0,0,52,1511,1,0,0,0,54,1518,1,0,
        0,0,56,1520,1,0,0,0,58,1525,1,0,0,0,60,1565,1,0,0,0,62,1571,1,0,
        0,0,64,1573,1,0,0,0,66,1594,1,0,0,0,68,1601,1,0,0,0,70,1603,1,0,
        0,0,72,1628,1,0,0,0,74,1631,1,0,0,0,76,1659,1,0,0,0,78,1675,1,0,
        0,0,80,1677,1,0,0,0,82,1771,1,0,0,0,84,1774,1,0,0,0,86,1786,1,0,
        0,0,88,1790,1,0,0,0,90,1840,1,0,0,0,92,1842,1,0,0,0,94,1870,1,0,
        0,0,96,1880,1,0,0,0,98,2067,1,0,0,0,100,2069,1,0,0,0,102,2071,1,
        0,0,0,104,2074,1,0,0,0,106,2149,1,0,0,0,108,2172,1,0,0,0,110,2320,
        1,0,0,0,112,2325,1,0,0,0,114,2327,1,0,0,0,116,2337,1,0,0,0,118,2393,
        1,0,0,0,120,2413,1,0,0,0,122,2415,1,0,0,0,124,2450,1,0,0,0,126,2459,
        1,0,0,0,128,2466,1,0,0,0,130,2489,1,0,0,0,132,2498,1,0,0,0,134,2513,
        1,0,0,0,136,2535,1,0,0,0,138,2591,1,0,0,0,140,2887,1,0,0,0,142,2987,
        1,0,0,0,144,2989,1,0,0,0,146,2996,1,0,0,0,148,3003,1,0,0,0,150,3026,
        1,0,0,0,152,3036,1,0,0,0,154,3043,1,0,0,0,156,3050,1,0,0,0,158,3057,
        1,0,0,0,160,3066,1,0,0,0,162,3078,1,0,0,0,164,3091,1,0,0,0,166,3098,
        1,0,0,0,168,3114,1,0,0,0,170,3141,1,0,0,0,172,3143,1,0,0,0,174,3153,
        1,0,0,0,176,3157,1,0,0,0,178,3163,1,0,0,0,180,3175,1,0,0,0,182,3177,
        1,0,0,0,184,3184,1,0,0,0,186,3186,1,0,0,0,188,3235,1,0,0,0,190,3244,
        1,0,0,0,192,3246,1,0,0,0,194,3257,1,0,0,0,196,3263,1,0,0,0,198,3337,
        1,0,0,0,200,3400,1,0,0,0,202,3418,1,0,0,0,204,3502,1,0,0,0,206,3505,
        1,0,0,0,208,3517,1,0,0,0,210,3537,1,0,0,0,212,3565,1,0,0,0,214,3569,
        1,0,0,0,216,3571,1,0,0,0,218,3581,1,0,0,0,220,3601,1,0,0,0,222,3608,
        1,0,0,0,224,3610,1,0,0,0,226,3621,1,0,0,0,228,3630,1,0,0,0,230,3636,
        1,0,0,0,232,3659,1,0,0,0,234,3661,1,0,0,0,236,3697,1,0,0,0,238,3752,
        1,0,0,0,240,3761,1,0,0,0,242,3781,1,0,0,0,244,3793,1,0,0,0,246,3797,
        1,0,0,0,248,3808,1,0,0,0,250,3841,1,0,0,0,252,3862,1,0,0,0,254,3872,
        1,0,0,0,256,3876,1,0,0,0,258,3902,1,0,0,0,260,3949,1,0,0,0,262,3951,
        1,0,0,0,264,3955,1,0,0,0,266,3972,1,0,0,0,268,4023,1,0,0,0,270,4032,
        1,0,0,0,272,4042,1,0,0,0,274,4044,1,0,0,0,276,4074,1,0,0,0,278,4082,
        1,0,0,0,280,4099,1,0,0,0,282,4115,1,0,0,0,284,4152,1,0,0,0,286,4158,
        1,0,0,0,288,4167,1,0,0,0,290,4180,1,0,0,0,292,4184,1,0,0,0,294,4222,
        1,0,0,0,296,4260,1,0,0,0,298,4274,1,0,0,0,300,4282,1,0,0,0,302,4286,
        1,0,0,0,304,4292,1,0,0,0,306,4306,1,0,0,0,308,4309,1,0,0,0,310,4327,
        1,0,0,0,312,4331,1,0,0,0,314,4347,1,0,0,0,316,4349,1,0,0,0,318,4361,
        1,0,0,0,320,4365,1,0,0,0,322,4382,1,0,0,0,324,4399,1,0,0,0,326,4402,
        1,0,0,0,328,4412,1,0,0,0,330,4416,1,0,0,0,332,4426,1,0,0,0,334,4429,
        1,0,0,0,336,4434,1,0,0,0,338,4454,1,0,0,0,340,4456,1,0,0,0,342,4473,
        1,0,0,0,344,4482,1,0,0,0,346,4491,1,0,0,0,348,4493,1,0,0,0,350,4507,
        1,0,0,0,352,4521,1,0,0,0,354,4536,1,0,0,0,356,4545,1,0,0,0,358,4570,
        1,0,0,0,360,4585,1,0,0,0,362,4604,1,0,0,0,364,4634,1,0,0,0,366,4636,
        1,0,0,0,368,4638,1,0,0,0,370,4640,1,0,0,0,372,4655,1,0,0,0,374,4684,
        1,0,0,0,376,4686,1,0,0,0,378,4688,1,0,0,0,380,4690,1,0,0,0,382,4705,
        1,0,0,0,384,4707,1,0,0,0,386,4774,1,0,0,0,388,4776,1,0,0,0,390,4782,
        1,0,0,0,392,4809,1,0,0,0,394,4823,1,0,0,0,396,4834,1,0,0,0,398,4836,
        1,0,0,0,400,4842,1,0,0,0,402,4852,1,0,0,0,404,4856,1,0,0,0,406,4863,
        1,0,0,0,408,4867,1,0,0,0,410,4873,1,0,0,0,412,4880,1,0,0,0,414,4886,
        1,0,0,0,416,4892,1,0,0,0,418,4897,1,0,0,0,420,4942,1,0,0,0,422,4963,
        1,0,0,0,424,4988,1,0,0,0,426,4991,1,0,0,0,428,4997,1,0,0,0,430,5013,
        1,0,0,0,432,5028,1,0,0,0,434,5034,1,0,0,0,436,5064,1,0,0,0,438,5066,
        1,0,0,0,440,5073,1,0,0,0,442,5085,1,0,0,0,444,5091,1,0,0,0,446,5116,
        1,0,0,0,448,5120,1,0,0,0,450,5124,1,0,0,0,452,5135,1,0,0,0,454,5143,
        1,0,0,0,456,5206,1,0,0,0,458,5265,1,0,0,0,460,5367,1,0,0,0,462,5377,
        1,0,0,0,464,5379,1,0,0,0,466,5397,1,0,0,0,468,5421,1,0,0,0,470,5445,
        1,0,0,0,472,5452,1,0,0,0,474,5472,1,0,0,0,476,5481,1,0,0,0,478,5543,
        1,0,0,0,480,5545,1,0,0,0,482,5549,1,0,0,0,484,5583,1,0,0,0,486,5585,
        1,0,0,0,488,5588,1,0,0,0,490,5652,1,0,0,0,492,5671,1,0,0,0,494,5698,
        1,0,0,0,496,5702,1,0,0,0,498,5723,1,0,0,0,500,5733,1,0,0,0,502,5743,
        1,0,0,0,504,5783,1,0,0,0,506,5785,1,0,0,0,508,5788,1,0,0,0,510,5818,
        1,0,0,0,512,5820,1,0,0,0,514,5823,1,0,0,0,516,5923,1,0,0,0,518,5941,
        1,0,0,0,520,5943,1,0,0,0,522,5995,1,0,0,0,524,5997,1,0,0,0,526,6006,
        1,0,0,0,528,6012,1,0,0,0,530,6019,1,0,0,0,532,6034,1,0,0,0,534,6043,
        1,0,0,0,536,6045,1,0,0,0,538,6059,1,0,0,0,540,6080,1,0,0,0,542,6085,
        1,0,0,0,544,6095,1,0,0,0,546,6101,1,0,0,0,548,6135,1,0,0,0,550,6189,
        1,0,0,0,552,6375,1,0,0,0,554,6387,1,0,0,0,556,6403,1,0,0,0,558,6409,
        1,0,0,0,560,6428,1,0,0,0,562,6441,1,0,0,0,564,6455,1,0,0,0,566,6457,
        1,0,0,0,568,6460,1,0,0,0,570,6484,1,0,0,0,572,6496,1,0,0,0,574,6502,
        1,0,0,0,576,6514,1,0,0,0,578,6528,1,0,0,0,580,6530,1,0,0,0,582,6538,
        1,0,0,0,584,6546,1,0,0,0,586,6548,1,0,0,0,588,6550,1,0,0,0,590,6590,
        1,0,0,0,592,6597,1,0,0,0,594,6599,1,0,0,0,596,6622,1,0,0,0,598,6628,
        1,0,0,0,600,6638,1,0,0,0,602,6647,1,0,0,0,604,6650,1,0,0,0,606,6653,
        1,0,0,0,608,6674,1,0,0,0,610,6695,1,0,0,0,612,6703,1,0,0,0,614,6715,
        1,0,0,0,616,6723,1,0,0,0,618,6761,1,0,0,0,620,6773,1,0,0,0,622,6775,
        1,0,0,0,624,6777,1,0,0,0,626,6779,1,0,0,0,628,6781,1,0,0,0,630,6783,
        1,0,0,0,632,6785,1,0,0,0,634,6787,1,0,0,0,636,6789,1,0,0,0,638,6797,
        1,0,0,0,640,6799,1,0,0,0,642,6801,1,0,0,0,644,6803,1,0,0,0,646,6805,
        1,0,0,0,648,6813,1,0,0,0,650,6815,1,0,0,0,652,6825,1,0,0,0,654,6841,
        1,0,0,0,656,6843,1,0,0,0,658,6866,1,0,0,0,660,6868,1,0,0,0,662,6870,
        1,0,0,0,664,6872,1,0,0,0,666,6874,1,0,0,0,668,6882,1,0,0,0,670,6892,
        1,0,0,0,672,6897,1,0,0,0,674,6901,1,0,0,0,676,6908,1,0,0,0,678,6910,
        1,0,0,0,680,6917,1,0,0,0,682,6919,1,0,0,0,684,6925,1,0,0,0,686,6927,
        1,0,0,0,688,6932,1,0,0,0,690,6934,1,0,0,0,692,6936,1,0,0,0,694,6954,
        1,0,0,0,696,6970,1,0,0,0,698,6972,1,0,0,0,700,6976,1,0,0,0,702,6987,
        1,0,0,0,704,6998,1,0,0,0,706,7004,1,0,0,0,708,7006,1,0,0,0,710,7010,
        1,0,0,0,712,7035,1,0,0,0,714,7037,1,0,0,0,716,7040,1,0,0,0,718,7045,
        1,0,0,0,720,7061,1,0,0,0,722,7189,1,0,0,0,724,7191,1,0,0,0,726,7224,
        1,0,0,0,728,7229,1,0,0,0,730,7233,1,0,0,0,732,7239,1,0,0,0,734,7247,
        1,0,0,0,736,7258,1,0,0,0,738,7266,1,0,0,0,740,7275,1,0,0,0,742,7288,
        1,0,0,0,744,7290,1,0,0,0,746,7298,1,0,0,0,748,7306,1,0,0,0,750,7340,
        1,0,0,0,752,7356,1,0,0,0,754,7358,1,0,0,0,756,7361,1,0,0,0,758,7365,
        1,0,0,0,760,7390,1,0,0,0,762,7571,1,0,0,0,764,7573,1,0,0,0,766,7592,
        1,0,0,0,768,7594,1,0,0,0,770,7657,1,0,0,0,772,7697,1,0,0,0,774,7699,
        1,0,0,0,776,7708,1,0,0,0,778,7719,1,0,0,0,780,7721,1,0,0,0,782,7724,
        1,0,0,0,784,7728,1,0,0,0,786,7730,1,0,0,0,788,7742,1,0,0,0,790,7744,
        1,0,0,0,792,7778,1,0,0,0,794,7780,1,0,0,0,796,7785,1,0,0,0,798,7796,
        1,0,0,0,800,7809,1,0,0,0,802,7820,1,0,0,0,804,7937,1,0,0,0,806,7959,
        1,0,0,0,808,7969,1,0,0,0,810,7978,1,0,0,0,812,7987,1,0,0,0,814,7996,
        1,0,0,0,816,7998,1,0,0,0,818,8005,1,0,0,0,820,8007,1,0,0,0,822,8009,
        1,0,0,0,824,8011,1,0,0,0,826,8013,1,0,0,0,828,8015,1,0,0,0,830,8017,
        1,0,0,0,832,8019,1,0,0,0,834,836,3,2,1,0,835,834,1,0,0,0,836,839,
        1,0,0,0,837,835,1,0,0,0,837,838,1,0,0,0,838,840,1,0,0,0,839,837,
        1,0,0,0,840,841,5,0,0,1,841,1,1,0,0,0,842,844,3,4,2,0,843,845,5,
        869,0,0,844,843,1,0,0,0,844,845,1,0,0,0,845,848,1,0,0,0,846,848,
        3,6,3,0,847,842,1,0,0,0,847,846,1,0,0,0,848,3,1,0,0,0,849,857,3,
        8,4,0,850,857,3,10,5,0,851,857,3,12,6,0,852,857,3,14,7,0,853,857,
        3,16,8,0,854,857,3,20,10,0,855,857,3,22,11,0,856,849,1,0,0,0,856,
        850,1,0,0,0,856,851,1,0,0,0,856,852,1,0,0,0,856,853,1,0,0,0,856,
        854,1,0,0,0,856,855,1,0,0,0,857,5,1,0,0,0,858,859,5,869,0,0,859,
        7,1,0,0,0,860,900,3,24,12,0,861,900,3,26,13,0,862,900,3,28,14,0,
        863,900,3,30,15,0,864,900,3,32,16,0,865,900,3,536,268,0,866,900,
        3,36,18,0,867,900,3,38,19,0,868,900,3,40,20,0,869,900,3,42,21,0,
        870,900,3,44,22,0,871,900,3,50,25,0,872,900,3,34,17,0,873,900,3,
        120,60,0,874,900,3,122,61,0,875,900,3,124,62,0,876,900,3,126,63,
        0,877,900,3,128,64,0,878,900,3,130,65,0,879,900,3,132,66,0,880,900,
        3,134,67,0,881,900,3,136,68,0,882,900,3,138,69,0,883,900,3,144,72,
        0,884,900,3,146,73,0,885,900,3,148,74,0,886,900,3,150,75,0,887,900,
        3,152,76,0,888,900,3,154,77,0,889,900,3,156,78,0,890,900,3,158,79,
        0,891,900,3,160,80,0,892,900,3,162,81,0,893,900,3,164,82,0,894,900,
        3,166,83,0,895,900,3,168,84,0,896,900,3,170,85,0,897,900,3,172,86,
        0,898,900,3,176,88,0,899,860,1,0,0,0,899,861,1,0,0,0,899,862,1,0,
        0,0,899,863,1,0,0,0,899,864,1,0,0,0,899,865,1,0,0,0,899,866,1,0,
        0,0,899,867,1,0,0,0,899,868,1,0,0,0,899,869,1,0,0,0,899,870,1,0,
        0,0,899,871,1,0,0,0,899,872,1,0,0,0,899,873,1,0,0,0,899,874,1,0,
        0,0,899,875,1,0,0,0,899,876,1,0,0,0,899,877,1,0,0,0,899,878,1,0,
        0,0,899,879,1,0,0,0,899,880,1,0,0,0,899,881,1,0,0,0,899,882,1,0,
        0,0,899,883,1,0,0,0,899,884,1,0,0,0,899,885,1,0,0,0,899,886,1,0,
        0,0,899,887,1,0,0,0,899,888,1,0,0,0,899,889,1,0,0,0,899,890,1,0,
        0,0,899,891,1,0,0,0,899,892,1,0,0,0,899,893,1,0,0,0,899,894,1,0,
        0,0,899,895,1,0,0,0,899,896,1,0,0,0,899,897,1,0,0,0,899,898,1,0,
        0,0,900,9,1,0,0,0,901,919,3,204,102,0,902,919,3,206,103,0,903,919,
        3,186,93,0,904,919,3,214,107,0,905,919,3,180,90,0,906,919,3,202,
        101,0,907,919,3,178,89,0,908,919,3,192,96,0,909,919,3,196,98,0,910,
        919,3,198,99,0,911,919,3,200,100,0,912,919,3,182,91,0,913,919,3,
        184,92,0,914,919,3,246,123,0,915,919,3,216,108,0,916,919,3,612,306,
        0,917,919,3,614,307,0,918,901,1,0,0,0,918,902,1,0,0,0,918,903,1,
        0,0,0,918,904,1,0,0,0,918,905,1,0,0,0,918,906,1,0,0,0,918,907,1,
        0,0,0,918,908,1,0,0,0,918,909,1,0,0,0,918,910,1,0,0,0,918,911,1,
        0,0,0,918,912,1,0,0,0,918,913,1,0,0,0,918,914,1,0,0,0,918,915,1,
        0,0,0,918,916,1,0,0,0,918,917,1,0,0,0,919,11,1,0,0,0,920,930,3,316,
        158,0,921,930,3,318,159,0,922,930,3,320,160,0,923,930,3,322,161,
        0,924,930,3,324,162,0,925,930,3,326,163,0,926,930,3,328,164,0,927,
        930,3,330,165,0,928,930,3,332,166,0,929,920,1,0,0,0,929,921,1,0,
        0,0,929,922,1,0,0,0,929,923,1,0,0,0,929,924,1,0,0,0,929,925,1,0,
        0,0,929,926,1,0,0,0,929,927,1,0,0,0,929,928,1,0,0,0,930,13,1,0,0,
        0,931,946,3,348,174,0,932,946,3,350,175,0,933,946,3,352,176,0,934,
        946,3,354,177,0,935,946,3,356,178,0,936,946,3,358,179,0,937,946,
        3,360,180,0,938,946,3,362,181,0,939,946,3,398,199,0,940,946,3,400,
        200,0,941,946,3,402,201,0,942,946,3,404,202,0,943,946,3,406,203,
        0,944,946,3,408,204,0,945,931,1,0,0,0,945,932,1,0,0,0,945,933,1,
        0,0,0,945,934,1,0,0,0,945,935,1,0,0,0,945,936,1,0,0,0,945,937,1,
        0,0,0,945,938,1,0,0,0,945,939,1,0,0,0,945,940,1,0,0,0,945,941,1,
        0,0,0,945,942,1,0,0,0,945,943,1,0,0,0,945,944,1,0,0,0,946,15,1,0,
        0,0,947,951,3,410,205,0,948,951,3,412,206,0,949,951,3,414,207,0,
        950,947,1,0,0,0,950,948,1,0,0,0,950,949,1,0,0,0,951,17,1,0,0,0,952,
        963,3,418,209,0,953,963,3,420,210,0,954,963,3,422,211,0,955,963,
        3,426,213,0,956,963,3,428,214,0,957,963,3,430,215,0,958,963,3,434,
        217,0,959,963,3,424,212,0,960,963,3,432,216,0,961,963,3,436,218,
        0,962,952,1,0,0,0,962,953,1,0,0,0,962,954,1,0,0,0,962,955,1,0,0,
        0,962,956,1,0,0,0,962,957,1,0,0,0,962,958,1,0,0,0,962,959,1,0,0,
        0,962,960,1,0,0,0,962,961,1,0,0,0,963,19,1,0,0,0,964,998,3,454,227,
        0,965,998,3,456,228,0,966,998,3,458,229,0,967,998,3,460,230,0,968,
        998,3,464,232,0,969,998,3,476,238,0,970,998,3,478,239,0,971,998,
        3,466,233,0,972,998,3,468,234,0,973,998,3,470,235,0,974,998,3,472,
        236,0,975,998,3,522,261,0,976,998,3,524,262,0,977,998,3,526,263,
        0,978,998,3,528,264,0,979,998,3,530,265,0,980,998,3,538,269,0,981,
        998,3,542,271,0,982,998,3,544,272,0,983,998,3,546,273,0,984,998,
        3,548,274,0,985,998,3,550,275,0,986,998,3,552,276,0,987,998,3,566,
        283,0,988,998,3,568,284,0,989,998,3,570,285,0,990,998,3,572,286,
        0,991,998,3,574,287,0,992,998,3,576,288,0,993,998,3,580,290,0,994,
        998,3,582,291,0,995,998,3,584,292,0,996,998,3,586,293,0,997,964,
        1,0,0,0,997,965,1,0,0,0,997,966,1,0,0,0,997,967,1,0,0,0,997,968,
        1,0,0,0,997,969,1,0,0,0,997,970,1,0,0,0,997,971,1,0,0,0,997,972,
        1,0,0,0,997,973,1,0,0,0,997,974,1,0,0,0,997,975,1,0,0,0,997,976,
        1,0,0,0,997,977,1,0,0,0,997,978,1,0,0,0,997,979,1,0,0,0,997,980,
        1,0,0,0,997,981,1,0,0,0,997,982,1,0,0,0,997,983,1,0,0,0,997,984,
        1,0,0,0,997,985,1,0,0,0,997,986,1,0,0,0,997,987,1,0,0,0,997,988,
        1,0,0,0,997,989,1,0,0,0,997,990,1,0,0,0,997,991,1,0,0,0,997,992,
        1,0,0,0,997,993,1,0,0,0,997,994,1,0,0,0,997,995,1,0,0,0,997,996,
        1,0,0,0,998,21,1,0,0,0,999,1008,3,598,299,0,1000,1008,3,596,298,
        0,1001,1008,3,600,300,0,1002,1008,3,602,301,0,1003,1008,3,604,302,
        0,1004,1008,3,606,303,0,1005,1008,3,608,304,0,1006,1008,3,616,308,
        0,1007,999,1,0,0,0,1007,1000,1,0,0,0,1007,1001,1,0,0,0,1007,1002,
        1,0,0,0,1007,1003,1,0,0,0,1007,1004,1,0,0,0,1007,1005,1,0,0,0,1007,
        1006,1,0,0,0,1008,23,1,0,0,0,1009,1010,5,34,0,0,1010,1012,7,0,0,
        0,1011,1013,3,756,378,0,1012,1011,1,0,0,0,1012,1013,1,0,0,0,1013,
        1014,1,0,0,0,1014,1018,3,622,311,0,1015,1017,3,52,26,0,1016,1015,
        1,0,0,0,1017,1020,1,0,0,0,1018,1016,1,0,0,0,1018,1019,1,0,0,0,1019,
        25,1,0,0,0,1020,1018,1,0,0,0,1021,1023,5,34,0,0,1022,1024,3,58,29,
        0,1023,1022,1,0,0,0,1023,1024,1,0,0,0,1024,1025,1,0,0,0,1025,1027,
        5,385,0,0,1026,1028,3,756,378,0,1027,1026,1,0,0,0,1027,1028,1,0,
        0,0,1028,1029,1,0,0,0,1029,1030,3,698,349,0,1030,1031,5,119,0,0,
        1031,1032,5,590,0,0,1032,1039,3,60,30,0,1033,1034,5,119,0,0,1034,
        1036,5,343,0,0,1035,1037,5,114,0,0,1036,1035,1,0,0,0,1036,1037,1,
        0,0,0,1037,1038,1,0,0,0,1038,1040,5,541,0,0,1039,1033,1,0,0,0,1039,
        1040,1,0,0,0,1040,1042,1,0,0,0,1041,1043,3,68,34,0,1042,1041,1,0,
        0,0,1042,1043,1,0,0,0,1043,1046,1,0,0,0,1044,1045,5,340,0,0,1045,
        1047,5,882,0,0,1046,1044,1,0,0,0,1046,1047,1,0,0,0,1047,1048,1,0,
        0,0,1048,1049,5,371,0,0,1049,1050,3,416,208,0,1050,27,1,0,0,0,1051,
        1053,5,34,0,0,1052,1054,7,1,0,0,1053,1052,1,0,0,0,1053,1054,1,0,
        0,0,1054,1056,1,0,0,0,1055,1057,7,2,0,0,1056,1055,1,0,0,0,1056,1057,
        1,0,0,0,1057,1058,1,0,0,0,1058,1059,5,82,0,0,1059,1061,3,634,317,
        0,1060,1062,3,70,35,0,1061,1060,1,0,0,0,1061,1062,1,0,0,0,1062,1063,
        1,0,0,0,1063,1064,5,119,0,0,1064,1065,3,648,324,0,1065,1069,3,734,
        367,0,1066,1068,3,72,36,0,1067,1066,1,0,0,0,1068,1071,1,0,0,0,1069,
        1067,1,0,0,0,1069,1070,1,0,0,0,1070,1084,1,0,0,0,1071,1069,1,0,0,
        0,1072,1074,5,308,0,0,1073,1075,5,857,0,0,1074,1073,1,0,0,0,1074,
        1075,1,0,0,0,1075,1076,1,0,0,0,1076,1083,7,3,0,0,1077,1079,5,104,
        0,0,1078,1080,5,857,0,0,1079,1078,1,0,0,0,1079,1080,1,0,0,0,1080,
        1081,1,0,0,0,1081,1083,7,4,0,0,1082,1072,1,0,0,0,1082,1077,1,0,0,
        0,1083,1086,1,0,0,0,1084,1082,1,0,0,0,1084,1085,1,0,0,0,1085,29,
        1,0,0,0,1086,1084,1,0,0,0,1087,1088,5,34,0,0,1088,1089,5,451,0,0,
        1089,1090,5,74,0,0,1090,1091,3,702,351,0,1091,1092,5,6,0,0,1092,
        1093,5,671,0,0,1093,1099,5,882,0,0,1094,1096,5,428,0,0,1095,1097,
        5,857,0,0,1096,1095,1,0,0,0,1096,1097,1,0,0,0,1097,1098,1,0,0,0,
        1098,1100,3,710,355,0,1099,1094,1,0,0,0,1099,1100,1,0,0,0,1100,1106,
        1,0,0,0,1101,1103,5,672,0,0,1102,1104,5,857,0,0,1103,1102,1,0,0,
        0,1103,1104,1,0,0,0,1104,1105,1,0,0,0,1105,1107,3,710,355,0,1106,
        1101,1,0,0,0,1106,1107,1,0,0,0,1107,1113,1,0,0,0,1108,1110,5,553,
        0,0,1109,1111,5,857,0,0,1110,1109,1,0,0,0,1110,1111,1,0,0,0,1111,
        1112,1,0,0,0,1112,1114,3,710,355,0,1113,1108,1,0,0,0,1113,1114,1,
        0,0,0,1114,1120,1,0,0,0,1115,1117,5,504,0,0,1116,1118,5,857,0,0,
        1117,1116,1,0,0,0,1117,1118,1,0,0,0,1118,1119,1,0,0,0,1119,1121,
        3,702,351,0,1120,1115,1,0,0,0,1120,1121,1,0,0,0,1121,1123,1,0,0,
        0,1122,1124,5,687,0,0,1123,1122,1,0,0,0,1123,1124,1,0,0,0,1124,1130,
        1,0,0,0,1125,1127,5,340,0,0,1126,1128,5,857,0,0,1127,1126,1,0,0,
        0,1127,1128,1,0,0,0,1128,1129,1,0,0,0,1129,1131,5,882,0,0,1130,1125,
        1,0,0,0,1130,1131,1,0,0,0,1131,1132,1,0,0,0,1132,1134,5,380,0,0,
        1133,1135,5,857,0,0,1134,1133,1,0,0,0,1134,1135,1,0,0,0,1135,1136,
        1,0,0,0,1136,1137,3,688,344,0,1137,31,1,0,0,0,1138,1140,5,34,0,0,
        1139,1141,3,58,29,0,1140,1139,1,0,0,0,1140,1141,1,0,0,0,1141,1142,
        1,0,0,0,1142,1144,5,132,0,0,1143,1145,3,756,378,0,1144,1143,1,0,
        0,0,1144,1145,1,0,0,0,1145,1146,1,0,0,0,1146,1147,3,698,349,0,1147,
        1149,5,866,0,0,1148,1150,3,74,37,0,1149,1148,1,0,0,0,1149,1150,1,
        0,0,0,1150,1155,1,0,0,0,1151,1152,5,868,0,0,1152,1154,3,74,37,0,
        1153,1151,1,0,0,0,1154,1157,1,0,0,0,1155,1153,1,0,0,0,1155,1156,
        1,0,0,0,1156,1158,1,0,0,0,1157,1155,1,0,0,0,1158,1162,5,867,0,0,
        1159,1161,3,76,38,0,1160,1159,1,0,0,0,1161,1164,1,0,0,0,1162,1160,
        1,0,0,0,1162,1163,1,0,0,0,1163,1165,1,0,0,0,1164,1162,1,0,0,0,1165,
        1166,3,416,208,0,1166,33,1,0,0,0,1167,1168,5,34,0,0,1168,1170,5,
        582,0,0,1169,1171,3,756,378,0,1170,1169,1,0,0,0,1170,1171,1,0,0,
        0,1171,1172,1,0,0,0,1172,1173,3,650,325,0,1173,35,1,0,0,0,1174,1175,
        5,34,0,0,1175,1176,5,592,0,0,1176,1177,3,702,351,0,1177,1178,5,67,
        0,0,1178,1179,5,360,0,0,1179,1180,5,692,0,0,1180,1181,7,5,0,0,1181,
        1182,5,518,0,0,1182,1183,5,866,0,0,1183,1188,3,78,39,0,1184,1185,
        5,868,0,0,1185,1187,3,78,39,0,1186,1184,1,0,0,0,1187,1190,1,0,0,
        0,1188,1186,1,0,0,0,1188,1189,1,0,0,0,1189,1191,1,0,0,0,1190,1188,
        1,0,0,0,1191,1192,5,867,0,0,1192,37,1,0,0,0,1193,1195,5,34,0,0,1194,
        1196,5,660,0,0,1195,1194,1,0,0,0,1195,1196,1,0,0,0,1196,1197,1,0,
        0,0,1197,1199,5,173,0,0,1198,1200,3,756,378,0,1199,1198,1,0,0,0,
        1199,1200,1,0,0,0,1200,1201,1,0,0,0,1201,1203,3,644,322,0,1202,1204,
        3,80,40,0,1203,1202,1,0,0,0,1203,1204,1,0,0,0,1204,1215,1,0,0,0,
        1205,1212,3,98,49,0,1206,1208,5,868,0,0,1207,1206,1,0,0,0,1207,1208,
        1,0,0,0,1208,1209,1,0,0,0,1209,1211,3,98,49,0,1210,1207,1,0,0,0,
        1211,1214,1,0,0,0,1212,1210,1,0,0,0,1212,1213,1,0,0,0,1213,1216,
        1,0,0,0,1214,1212,1,0,0,0,1215,1205,1,0,0,0,1215,1216,1,0,0,0,1216,
        1218,1,0,0,0,1217,1219,3,104,52,0,1218,1217,1,0,0,0,1218,1219,1,
        0,0,0,1219,1221,1,0,0,0,1220,1222,7,6,0,0,1221,1220,1,0,0,0,1221,
        1222,1,0,0,0,1222,1224,1,0,0,0,1223,1225,5,13,0,0,1224,1223,1,0,
        0,0,1224,1225,1,0,0,0,1225,1226,1,0,0,0,1226,1227,3,204,102,0,1227,
        1272,1,0,0,0,1228,1230,5,34,0,0,1229,1231,5,660,0,0,1230,1229,1,
        0,0,0,1230,1231,1,0,0,0,1231,1232,1,0,0,0,1232,1234,5,173,0,0,1233,
        1235,3,756,378,0,1234,1233,1,0,0,0,1234,1235,1,0,0,0,1235,1236,1,
        0,0,0,1236,1244,3,644,322,0,1237,1238,5,99,0,0,1238,1245,3,648,324,
        0,1239,1240,5,866,0,0,1240,1241,5,99,0,0,1241,1242,3,648,324,0,1242,
        1243,5,867,0,0,1243,1245,1,0,0,0,1244,1237,1,0,0,0,1244,1239,1,0,
        0,0,1245,1272,1,0,0,0,1246,1248,5,34,0,0,1247,1249,5,660,0,0,1248,
        1247,1,0,0,0,1248,1249,1,0,0,0,1249,1250,1,0,0,0,1250,1252,5,173,
        0,0,1251,1253,3,756,378,0,1252,1251,1,0,0,0,1252,1253,1,0,0,0,1253,
        1254,1,0,0,0,1254,1255,3,644,322,0,1255,1266,3,80,40,0,1256,1263,
        3,98,49,0,1257,1259,5,868,0,0,1258,1257,1,0,0,0,1258,1259,1,0,0,
        0,1259,1260,1,0,0,0,1260,1262,3,98,49,0,1261,1258,1,0,0,0,1262,1265,
        1,0,0,0,1263,1261,1,0,0,0,1263,1264,1,0,0,0,1264,1267,1,0,0,0,1265,
        1263,1,0,0,0,1266,1256,1,0,0,0,1266,1267,1,0,0,0,1267,1269,1,0,0,
        0,1268,1270,3,104,52,0,1269,1268,1,0,0,0,1269,1270,1,0,0,0,1270,
        1272,1,0,0,0,1271,1193,1,0,0,0,1271,1228,1,0,0,0,1271,1246,1,0,0,
        0,1272,39,1,0,0,0,1273,1275,5,34,0,0,1274,1276,5,180,0,0,1275,1274,
        1,0,0,0,1275,1276,1,0,0,0,1276,1277,1,0,0,0,1277,1278,5,658,0,0,
        1278,1282,3,660,330,0,1279,1280,5,6,0,0,1280,1281,5,361,0,0,1281,
        1283,5,882,0,0,1282,1279,1,0,0,0,1282,1283,1,0,0,0,1283,1289,1,0,
        0,0,1284,1286,5,314,0,0,1285,1287,5,857,0,0,1286,1285,1,0,0,0,1286,
        1287,1,0,0,0,1287,1288,1,0,0,0,1288,1290,3,710,355,0,1289,1284,1,
        0,0,0,1289,1290,1,0,0,0,1290,1294,1,0,0,0,1291,1292,5,399,0,0,1292,
        1293,5,857,0,0,1293,1295,3,710,355,0,1294,1291,1,0,0,0,1294,1295,
        1,0,0,0,1295,1301,1,0,0,0,1296,1298,5,380,0,0,1297,1299,5,857,0,
        0,1298,1297,1,0,0,0,1298,1299,1,0,0,0,1299,1300,1,0,0,0,1300,1302,
        3,688,344,0,1301,1296,1,0,0,0,1301,1302,1,0,0,0,1302,1308,1,0,0,
        0,1303,1305,5,825,0,0,1304,1306,5,857,0,0,1305,1304,1,0,0,0,1305,
        1306,1,0,0,0,1306,1307,1,0,0,0,1307,1309,5,882,0,0,1308,1303,1,0,
        0,0,1308,1309,1,0,0,0,1309,41,1,0,0,0,1310,1312,5,34,0,0,1311,1313,
        5,180,0,0,1312,1311,1,0,0,0,1312,1313,1,0,0,0,1313,1314,1,0,0,0,
        1314,1315,5,658,0,0,1315,1316,3,660,330,0,1316,1317,5,6,0,0,1317,
        1318,5,361,0,0,1318,1319,5,882,0,0,1319,1320,5,187,0,0,1320,1321,
        5,451,0,0,1321,1322,5,74,0,0,1322,1328,3,702,351,0,1323,1325,5,393,
        0,0,1324,1326,5,857,0,0,1325,1324,1,0,0,0,1325,1326,1,0,0,0,1326,
        1327,1,0,0,0,1327,1329,3,710,355,0,1328,1323,1,0,0,0,1328,1329,1,
        0,0,0,1329,1335,1,0,0,0,1330,1332,5,428,0,0,1331,1333,5,857,0,0,
        1332,1331,1,0,0,0,1332,1333,1,0,0,0,1333,1334,1,0,0,0,1334,1336,
        3,710,355,0,1335,1330,1,0,0,0,1335,1336,1,0,0,0,1336,1342,1,0,0,
        0,1337,1339,5,314,0,0,1338,1340,5,857,0,0,1339,1338,1,0,0,0,1339,
        1340,1,0,0,0,1340,1341,1,0,0,0,1341,1343,3,710,355,0,1342,1337,1,
        0,0,0,1342,1343,1,0,0,0,1343,1349,1,0,0,0,1344,1346,5,481,0,0,1345,
        1347,5,857,0,0,1346,1345,1,0,0,0,1346,1347,1,0,0,0,1347,1348,1,0,
        0,0,1348,1350,3,710,355,0,1349,1344,1,0,0,0,1349,1350,1,0,0,0,1350,
        1356,1,0,0,0,1351,1353,5,504,0,0,1352,1354,5,857,0,0,1353,1352,1,
        0,0,0,1353,1354,1,0,0,0,1354,1355,1,0,0,0,1355,1357,3,702,351,0,
        1356,1351,1,0,0,0,1356,1357,1,0,0,0,1357,1359,1,0,0,0,1358,1360,
        5,687,0,0,1359,1358,1,0,0,0,1359,1360,1,0,0,0,1360,1366,1,0,0,0,
        1361,1363,5,340,0,0,1362,1364,5,857,0,0,1363,1362,1,0,0,0,1363,1364,
        1,0,0,0,1364,1365,1,0,0,0,1365,1367,5,882,0,0,1366,1361,1,0,0,0,
        1366,1367,1,0,0,0,1367,1368,1,0,0,0,1368,1370,5,380,0,0,1369,1371,
        5,857,0,0,1370,1369,1,0,0,0,1370,1371,1,0,0,0,1371,1372,1,0,0,0,
        1372,1373,3,688,344,0,1373,43,1,0,0,0,1374,1376,5,34,0,0,1375,1377,
        3,58,29,0,1376,1375,1,0,0,0,1376,1377,1,0,0,0,1377,1378,1,0,0,0,
        1378,1380,5,178,0,0,1379,1381,3,756,378,0,1380,1379,1,0,0,0,1380,
        1381,1,0,0,0,1381,1382,1,0,0,0,1382,1383,3,698,349,0,1383,1384,7,
        7,0,0,1384,1385,7,8,0,0,1385,1386,5,119,0,0,1386,1387,3,648,324,
        0,1387,1388,5,65,0,0,1388,1389,5,52,0,0,1389,1392,5,586,0,0,1390,
        1391,7,9,0,0,1391,1393,3,698,349,0,1392,1390,1,0,0,0,1392,1393,1,
        0,0,0,1393,1394,1,0,0,0,1394,1395,3,416,208,0,1395,45,1,0,0,0,1396,
        1398,5,194,0,0,1397,1399,5,552,0,0,1398,1397,1,0,0,0,1398,1399,1,
        0,0,0,1399,1400,1,0,0,0,1400,1401,3,48,24,0,1401,47,1,0,0,0,1402,
        1414,3,702,351,0,1403,1404,5,866,0,0,1404,1409,3,702,351,0,1405,
        1406,5,868,0,0,1406,1408,3,702,351,0,1407,1405,1,0,0,0,1408,1411,
        1,0,0,0,1409,1407,1,0,0,0,1409,1410,1,0,0,0,1410,1412,1,0,0,0,1411,
        1409,1,0,0,0,1412,1413,5,867,0,0,1413,1415,1,0,0,0,1414,1403,1,0,
        0,0,1414,1415,1,0,0,0,1415,1416,1,0,0,0,1416,1417,5,13,0,0,1417,
        1418,5,866,0,0,1418,1419,3,10,5,0,1419,1422,5,867,0,0,1420,1421,
        5,868,0,0,1421,1423,3,48,24,0,1422,1420,1,0,0,0,1422,1423,1,0,0,
        0,1423,49,1,0,0,0,1424,1426,5,34,0,0,1425,1427,3,758,379,0,1426,
        1425,1,0,0,0,1426,1427,1,0,0,0,1427,1431,1,0,0,0,1428,1429,5,308,
        0,0,1429,1430,5,857,0,0,1430,1432,7,10,0,0,1431,1428,1,0,0,0,1431,
        1432,1,0,0,0,1432,1434,1,0,0,0,1433,1435,3,58,29,0,1434,1433,1,0,
        0,0,1434,1435,1,0,0,0,1435,1439,1,0,0,0,1436,1437,5,162,0,0,1437,
        1438,5,591,0,0,1438,1440,7,11,0,0,1439,1436,1,0,0,0,1439,1440,1,
        0,0,0,1440,1441,1,0,0,0,1441,1442,5,684,0,0,1442,1454,3,630,315,
        0,1443,1444,5,866,0,0,1444,1449,3,654,327,0,1445,1446,5,868,0,0,
        1446,1448,3,654,327,0,1447,1445,1,0,0,0,1448,1451,1,0,0,0,1449,1447,
        1,0,0,0,1449,1450,1,0,0,0,1450,1452,1,0,0,0,1451,1449,1,0,0,0,1452,
        1453,5,867,0,0,1453,1455,1,0,0,0,1454,1443,1,0,0,0,1454,1455,1,0,
        0,0,1455,1456,1,0,0,0,1456,1476,5,13,0,0,1457,1459,5,866,0,0,1458,
        1460,3,46,23,0,1459,1458,1,0,0,0,1459,1460,1,0,0,0,1460,1461,1,0,
        0,0,1461,1462,3,204,102,0,1462,1463,5,867,0,0,1463,1477,1,0,0,0,
        1464,1466,3,46,23,0,1465,1464,1,0,0,0,1465,1466,1,0,0,0,1466,1467,
        1,0,0,0,1467,1474,3,204,102,0,1468,1470,5,194,0,0,1469,1471,7,12,
        0,0,1470,1469,1,0,0,0,1470,1471,1,0,0,0,1471,1472,1,0,0,0,1472,1473,
        5,27,0,0,1473,1475,5,121,0,0,1474,1468,1,0,0,0,1474,1475,1,0,0,0,
        1475,1477,1,0,0,0,1476,1457,1,0,0,0,1476,1465,1,0,0,0,1477,51,1,
        0,0,0,1478,1480,5,42,0,0,1479,1478,1,0,0,0,1479,1480,1,0,0,0,1480,
        1481,1,0,0,0,1481,1483,3,54,27,0,1482,1484,5,857,0,0,1483,1482,1,
        0,0,0,1483,1484,1,0,0,0,1484,1487,1,0,0,0,1485,1488,3,684,342,0,
        1486,1488,5,42,0,0,1487,1485,1,0,0,0,1487,1486,1,0,0,0,1488,1512,
        1,0,0,0,1489,1491,5,42,0,0,1490,1489,1,0,0,0,1490,1491,1,0,0,0,1491,
        1492,1,0,0,0,1492,1494,5,28,0,0,1493,1495,5,857,0,0,1494,1493,1,
        0,0,0,1494,1495,1,0,0,0,1495,1496,1,0,0,0,1496,1512,3,686,343,0,
        1497,1499,5,42,0,0,1498,1497,1,0,0,0,1498,1499,1,0,0,0,1499,1500,
        1,0,0,0,1500,1502,5,376,0,0,1501,1503,5,857,0,0,1502,1501,1,0,0,
        0,1502,1503,1,0,0,0,1503,1504,1,0,0,0,1504,1512,5,882,0,0,1505,1506,
        5,135,0,0,1506,1508,5,515,0,0,1507,1509,5,857,0,0,1508,1507,1,0,
        0,0,1508,1509,1,0,0,0,1509,1510,1,0,0,0,1510,1512,7,13,0,0,1511,
        1479,1,0,0,0,1511,1490,1,0,0,0,1511,1498,1,0,0,0,1511,1505,1,0,0,
        0,1512,53,1,0,0,0,1513,1514,5,26,0,0,1514,1519,5,155,0,0,1515,1519,
        5,823,0,0,1516,1517,5,224,0,0,1517,1519,5,155,0,0,1518,1513,1,0,
        0,0,1518,1515,1,0,0,0,1518,1516,1,0,0,0,1519,55,1,0,0,0,1520,1523,
        7,14,0,0,1521,1522,5,866,0,0,1522,1524,5,867,0,0,1523,1521,1,0,0,
        0,1523,1524,1,0,0,0,1524,57,1,0,0,0,1525,1526,5,364,0,0,1526,1529,
        5,857,0,0,1527,1530,3,680,340,0,1528,1530,3,56,28,0,1529,1527,1,
        0,0,0,1529,1528,1,0,0,0,1530,59,1,0,0,0,1531,1532,5,311,0,0,1532,
        1536,3,62,31,0,1533,1535,3,64,32,0,1534,1533,1,0,0,0,1535,1538,1,
        0,0,0,1536,1534,1,0,0,0,1536,1537,1,0,0,0,1537,1566,1,0,0,0,1538,
        1536,1,0,0,0,1539,1542,5,387,0,0,1540,1543,3,708,354,0,1541,1543,
        3,800,400,0,1542,1540,1,0,0,0,1542,1541,1,0,0,0,1543,1544,1,0,0,
        0,1544,1553,3,66,33,0,1545,1546,5,641,0,0,1546,1550,3,62,31,0,1547,
        1549,3,64,32,0,1548,1547,1,0,0,0,1549,1552,1,0,0,0,1550,1548,1,0,
        0,0,1550,1551,1,0,0,0,1551,1554,1,0,0,0,1552,1550,1,0,0,0,1553,1545,
        1,0,0,0,1553,1554,1,0,0,0,1554,1563,1,0,0,0,1555,1556,5,379,0,0,
        1556,1560,3,62,31,0,1557,1559,3,64,32,0,1558,1557,1,0,0,0,1559,1562,
        1,0,0,0,1560,1558,1,0,0,0,1560,1561,1,0,0,0,1561,1564,1,0,0,0,1562,
        1560,1,0,0,0,1563,1555,1,0,0,0,1563,1564,1,0,0,0,1564,1566,1,0,0,
        0,1565,1531,1,0,0,0,1565,1539,1,0,0,0,1566,61,1,0,0,0,1567,1572,
        5,287,0,0,1568,1572,3,712,356,0,1569,1572,3,708,354,0,1570,1572,
        3,800,400,0,1571,1567,1,0,0,0,1571,1568,1,0,0,0,1571,1569,1,0,0,
        0,1571,1570,1,0,0,0,1572,63,1,0,0,0,1573,1574,5,853,0,0,1574,1577,
        5,87,0,0,1575,1578,3,708,354,0,1576,1578,3,800,400,0,1577,1575,1,
        0,0,0,1577,1576,1,0,0,0,1578,1579,1,0,0,0,1579,1580,3,66,33,0,1580,
        65,1,0,0,0,1581,1595,3,826,413,0,1582,1595,5,223,0,0,1583,1595,5,
        242,0,0,1584,1595,5,243,0,0,1585,1595,5,244,0,0,1586,1595,5,245,
        0,0,1587,1595,5,246,0,0,1588,1595,5,247,0,0,1589,1595,5,248,0,0,
        1590,1595,5,249,0,0,1591,1595,5,250,0,0,1592,1595,5,251,0,0,1593,
        1595,5,252,0,0,1594,1581,1,0,0,0,1594,1582,1,0,0,0,1594,1583,1,0,
        0,0,1594,1584,1,0,0,0,1594,1585,1,0,0,0,1594,1586,1,0,0,0,1594,1587,
        1,0,0,0,1594,1588,1,0,0,0,1594,1589,1,0,0,0,1594,1590,1,0,0,0,1594,
        1591,1,0,0,0,1594,1592,1,0,0,0,1594,1593,1,0,0,0,1595,67,1,0,0,0,
        1596,1602,5,375,0,0,1597,1602,5,368,0,0,1598,1599,5,368,0,0,1599,
        1600,5,119,0,0,1600,1602,5,598,0,0,1601,1596,1,0,0,0,1601,1597,1,
        0,0,0,1601,1598,1,0,0,0,1602,69,1,0,0,0,1603,1604,5,188,0,0,1604,
        1605,7,15,0,0,1605,71,1,0,0,0,1606,1608,5,443,0,0,1607,1609,5,857,
        0,0,1608,1607,1,0,0,0,1608,1609,1,0,0,0,1609,1610,1,0,0,0,1610,1629,
        3,710,355,0,1611,1629,3,70,35,0,1612,1613,5,194,0,0,1613,1614,5,
        525,0,0,1614,1629,3,702,351,0,1615,1616,5,340,0,0,1616,1629,5,882,
        0,0,1617,1629,7,16,0,0,1618,1620,5,825,0,0,1619,1621,5,857,0,0,1620,
        1619,1,0,0,0,1620,1621,1,0,0,0,1621,1622,1,0,0,0,1622,1629,5,882,
        0,0,1623,1625,5,833,0,0,1624,1626,5,857,0,0,1625,1624,1,0,0,0,1625,
        1626,1,0,0,0,1626,1627,1,0,0,0,1627,1629,5,882,0,0,1628,1606,1,0,
        0,0,1628,1611,1,0,0,0,1628,1612,1,0,0,0,1628,1615,1,0,0,0,1628,1617,
        1,0,0,0,1628,1618,1,0,0,0,1628,1623,1,0,0,0,1629,73,1,0,0,0,1630,
        1632,7,17,0,0,1631,1630,1,0,0,0,1631,1632,1,0,0,0,1632,1633,1,0,
        0,0,1633,1634,3,702,351,0,1634,1635,3,722,361,0,1635,75,1,0,0,0,
        1636,1637,5,340,0,0,1637,1660,5,882,0,0,1638,1639,5,444,0,0,1639,
        1660,5,162,0,0,1640,1642,5,114,0,0,1641,1640,1,0,0,0,1641,1642,1,
        0,0,0,1642,1643,1,0,0,0,1643,1660,5,47,0,0,1644,1645,5,354,0,0,1645,
        1655,5,162,0,0,1646,1647,5,502,0,0,1647,1655,5,162,0,0,1648,1649,
        5,136,0,0,1649,1650,5,162,0,0,1650,1655,5,360,0,0,1651,1652,5,112,
        0,0,1652,1653,5,162,0,0,1653,1655,5,360,0,0,1654,1644,1,0,0,0,1654,
        1646,1,0,0,0,1654,1648,1,0,0,0,1654,1651,1,0,0,0,1655,1660,1,0,0,
        0,1656,1657,5,162,0,0,1657,1658,5,591,0,0,1658,1660,7,11,0,0,1659,
        1636,1,0,0,0,1659,1638,1,0,0,0,1659,1641,1,0,0,0,1659,1654,1,0,0,
        0,1659,1656,1,0,0,0,1660,77,1,0,0,0,1661,1662,5,421,0,0,1662,1676,
        5,882,0,0,1663,1664,5,39,0,0,1664,1676,5,882,0,0,1665,1666,5,678,
        0,0,1666,1676,5,882,0,0,1667,1668,5,529,0,0,1668,1676,5,882,0,0,
        1669,1670,5,601,0,0,1670,1676,5,882,0,0,1671,1672,5,519,0,0,1672,
        1676,5,882,0,0,1673,1674,5,537,0,0,1674,1676,3,708,354,0,1675,1661,
        1,0,0,0,1675,1663,1,0,0,0,1675,1665,1,0,0,0,1675,1667,1,0,0,0,1675,
        1669,1,0,0,0,1675,1671,1,0,0,0,1675,1673,1,0,0,0,1676,79,1,0,0,0,
        1677,1678,5,866,0,0,1678,1683,3,82,41,0,1679,1680,5,868,0,0,1680,
        1682,3,82,41,0,1681,1679,1,0,0,0,1682,1685,1,0,0,0,1683,1681,1,0,
        0,0,1683,1684,1,0,0,0,1684,1686,1,0,0,0,1685,1683,1,0,0,0,1686,1687,
        5,867,0,0,1687,81,1,0,0,0,1688,1689,3,654,327,0,1689,1690,3,88,44,
        0,1690,1772,1,0,0,0,1691,1693,7,18,0,0,1692,1694,3,638,319,0,1693,
        1692,1,0,0,0,1693,1694,1,0,0,0,1694,1696,1,0,0,0,1695,1697,3,70,
        35,0,1696,1695,1,0,0,0,1696,1697,1,0,0,0,1697,1698,1,0,0,0,1698,
        1702,3,734,367,0,1699,1701,3,72,36,0,1700,1699,1,0,0,0,1701,1704,
        1,0,0,0,1702,1700,1,0,0,0,1702,1703,1,0,0,0,1703,1772,1,0,0,0,1704,
        1702,1,0,0,0,1705,1707,7,19,0,0,1706,1708,7,18,0,0,1707,1706,1,0,
        0,0,1707,1708,1,0,0,0,1708,1710,1,0,0,0,1709,1711,3,638,319,0,1710,
        1709,1,0,0,0,1710,1711,1,0,0,0,1711,1712,1,0,0,0,1712,1716,3,734,
        367,0,1713,1715,3,72,36,0,1714,1713,1,0,0,0,1715,1718,1,0,0,0,1716,
        1714,1,0,0,0,1716,1717,1,0,0,0,1717,1772,1,0,0,0,1718,1716,1,0,0,
        0,1719,1721,3,86,43,0,1720,1719,1,0,0,0,1720,1721,1,0,0,0,1721,1722,
        1,0,0,0,1722,1723,5,131,0,0,1723,1725,5,92,0,0,1724,1726,3,70,35,
        0,1725,1724,1,0,0,0,1725,1726,1,0,0,0,1726,1727,1,0,0,0,1727,1731,
        3,734,367,0,1728,1730,3,72,36,0,1729,1728,1,0,0,0,1730,1733,1,0,
        0,0,1731,1729,1,0,0,0,1731,1732,1,0,0,0,1732,1772,1,0,0,0,1733,1731,
        1,0,0,0,1734,1736,3,86,43,0,1735,1734,1,0,0,0,1735,1736,1,0,0,0,
        1736,1737,1,0,0,0,1737,1739,5,182,0,0,1738,1740,7,18,0,0,1739,1738,
        1,0,0,0,1739,1740,1,0,0,0,1740,1742,1,0,0,0,1741,1743,3,638,319,
        0,1742,1741,1,0,0,0,1742,1743,1,0,0,0,1743,1745,1,0,0,0,1744,1746,
        3,70,35,0,1745,1744,1,0,0,0,1745,1746,1,0,0,0,1746,1747,1,0,0,0,
        1747,1751,3,734,367,0,1748,1750,3,72,36,0,1749,1748,1,0,0,0,1750,
        1753,1,0,0,0,1751,1749,1,0,0,0,1751,1752,1,0,0,0,1752,1772,1,0,0,
        0,1753,1751,1,0,0,0,1754,1756,3,86,43,0,1755,1754,1,0,0,0,1755,1756,
        1,0,0,0,1756,1757,1,0,0,0,1757,1758,5,67,0,0,1758,1760,5,92,0,0,
        1759,1761,3,638,319,0,1760,1759,1,0,0,0,1760,1761,1,0,0,0,1761,1762,
        1,0,0,0,1762,1763,3,734,367,0,1763,1764,3,92,46,0,1764,1772,1,0,
        0,0,1765,1766,5,27,0,0,1766,1767,5,866,0,0,1767,1768,3,800,400,0,
        1768,1769,5,867,0,0,1769,1772,1,0,0,0,1770,1772,3,84,42,0,1771,1688,
        1,0,0,0,1771,1691,1,0,0,0,1771,1705,1,0,0,0,1771,1720,1,0,0,0,1771,
        1735,1,0,0,0,1771,1755,1,0,0,0,1771,1765,1,0,0,0,1771,1770,1,0,0,
        0,1772,83,1,0,0,0,1773,1775,3,86,43,0,1774,1773,1,0,0,0,1774,1775,
        1,0,0,0,1775,1776,1,0,0,0,1776,1777,5,27,0,0,1777,1778,5,866,0,0,
        1778,1779,3,800,400,0,1779,1784,5,867,0,0,1780,1782,5,114,0,0,1781,
        1780,1,0,0,0,1781,1782,1,0,0,0,1782,1783,1,0,0,0,1783,1785,5,57,
        0,0,1784,1781,1,0,0,0,1784,1785,1,0,0,0,1785,85,1,0,0,0,1786,1788,
        5,31,0,0,1787,1789,3,702,351,0,1788,1787,1,0,0,0,1788,1789,1,0,0,
        0,1789,87,1,0,0,0,1790,1794,3,722,361,0,1791,1793,3,90,45,0,1792,
        1791,1,0,0,0,1793,1796,1,0,0,0,1794,1792,1,0,0,0,1794,1795,1,0,0,
        0,1795,89,1,0,0,0,1796,1794,1,0,0,0,1797,1841,3,718,359,0,1798,1799,
        5,42,0,0,1799,1841,3,750,375,0,1800,1841,5,686,0,0,1801,1841,5,435,
        0,0,1802,1807,5,315,0,0,1803,1804,5,119,0,0,1804,1805,5,185,0,0,
        1805,1807,3,752,376,0,1806,1802,1,0,0,0,1806,1803,1,0,0,0,1807,1841,
        1,0,0,0,1808,1810,5,131,0,0,1809,1808,1,0,0,0,1809,1810,1,0,0,0,
        1810,1811,1,0,0,0,1811,1841,5,92,0,0,1812,1814,5,182,0,0,1813,1815,
        5,92,0,0,1814,1813,1,0,0,0,1814,1815,1,0,0,0,1815,1841,1,0,0,0,1816,
        1817,5,340,0,0,1817,1841,5,882,0,0,1818,1819,5,338,0,0,1819,1841,
        7,20,0,0,1820,1821,5,647,0,0,1821,1841,7,21,0,0,1822,1841,3,92,46,
        0,1823,1824,5,28,0,0,1824,1841,3,686,343,0,1825,1826,5,71,0,0,1826,
        1828,5,9,0,0,1827,1825,1,0,0,0,1827,1828,1,0,0,0,1828,1829,1,0,0,
        0,1829,1830,5,13,0,0,1830,1831,5,866,0,0,1831,1832,3,800,400,0,1832,
        1834,5,867,0,0,1833,1835,7,22,0,0,1834,1833,1,0,0,0,1834,1835,1,
        0,0,0,1835,1841,1,0,0,0,1836,1837,5,241,0,0,1837,1838,5,42,0,0,1838,
        1841,5,682,0,0,1839,1841,3,84,42,0,1840,1797,1,0,0,0,1840,1798,1,
        0,0,0,1840,1800,1,0,0,0,1840,1801,1,0,0,0,1840,1806,1,0,0,0,1840,
        1809,1,0,0,0,1840,1812,1,0,0,0,1840,1816,1,0,0,0,1840,1818,1,0,0,
        0,1840,1820,1,0,0,0,1840,1822,1,0,0,0,1840,1823,1,0,0,0,1840,1827,
        1,0,0,0,1840,1836,1,0,0,0,1840,1839,1,0,0,0,1841,91,1,0,0,0,1842,
        1843,5,138,0,0,1843,1845,3,648,324,0,1844,1846,3,734,367,0,1845,
        1844,1,0,0,0,1845,1846,1,0,0,0,1846,1849,1,0,0,0,1847,1848,5,110,
        0,0,1848,1850,7,23,0,0,1849,1847,1,0,0,0,1849,1850,1,0,0,0,1850,
        1852,1,0,0,0,1851,1853,3,94,47,0,1852,1851,1,0,0,0,1852,1853,1,0,
        0,0,1853,93,1,0,0,0,1854,1855,5,119,0,0,1855,1856,5,44,0,0,1856,
        1860,3,96,48,0,1857,1858,5,119,0,0,1858,1859,5,185,0,0,1859,1861,
        3,96,48,0,1860,1857,1,0,0,0,1860,1861,1,0,0,0,1861,1871,1,0,0,0,
        1862,1863,5,119,0,0,1863,1864,5,185,0,0,1864,1868,3,96,48,0,1865,
        1866,5,119,0,0,1866,1867,5,44,0,0,1867,1869,3,96,48,0,1868,1865,
        1,0,0,0,1868,1869,1,0,0,0,1869,1871,1,0,0,0,1870,1854,1,0,0,0,1870,
        1862,1,0,0,0,1871,95,1,0,0,0,1872,1881,5,146,0,0,1873,1881,5,22,
        0,0,1874,1875,5,155,0,0,1875,1881,5,116,0,0,1876,1877,5,502,0,0,
        1877,1881,5,305,0,0,1878,1879,5,155,0,0,1879,1881,5,42,0,0,1880,
        1872,1,0,0,0,1880,1873,1,0,0,0,1880,1874,1,0,0,0,1880,1876,1,0,0,
        0,1880,1878,1,0,0,0,1881,97,1,0,0,0,1882,1884,5,380,0,0,1883,1885,
        5,857,0,0,1884,1883,1,0,0,0,1884,1885,1,0,0,0,1885,1887,1,0,0,0,
        1886,1888,3,688,344,0,1887,1886,1,0,0,0,1887,1888,1,0,0,0,1888,2068,
        1,0,0,0,1889,1891,5,825,0,0,1890,1892,5,857,0,0,1891,1890,1,0,0,
        0,1891,1892,1,0,0,0,1892,1893,1,0,0,0,1893,2068,5,882,0,0,1894,1896,
        5,314,0,0,1895,1897,5,857,0,0,1896,1895,1,0,0,0,1896,1897,1,0,0,
        0,1897,1898,1,0,0,0,1898,2068,3,708,354,0,1899,1901,5,315,0,0,1900,
        1902,5,857,0,0,1901,1900,1,0,0,0,1901,1902,1,0,0,0,1902,1903,1,0,
        0,0,1903,2068,3,708,354,0,1904,1906,5,316,0,0,1905,1907,5,857,0,
        0,1906,1905,1,0,0,0,1906,1907,1,0,0,0,1907,1908,1,0,0,0,1908,2068,
        3,708,354,0,1909,1911,5,42,0,0,1910,1909,1,0,0,0,1910,1911,1,0,0,
        0,1911,1912,1,0,0,0,1912,1914,3,54,27,0,1913,1915,5,857,0,0,1914,
        1913,1,0,0,0,1914,1915,1,0,0,0,1915,1918,1,0,0,0,1916,1919,3,684,
        342,0,1917,1919,5,42,0,0,1918,1916,1,0,0,0,1918,1917,1,0,0,0,1919,
        2068,1,0,0,0,1920,1922,7,24,0,0,1921,1923,5,857,0,0,1922,1921,1,
        0,0,0,1922,1923,1,0,0,0,1923,1924,1,0,0,0,1924,2068,7,25,0,0,1925,
        1927,5,42,0,0,1926,1925,1,0,0,0,1926,1927,1,0,0,0,1927,1928,1,0,
        0,0,1928,1930,5,28,0,0,1929,1931,5,857,0,0,1930,1929,1,0,0,0,1930,
        1931,1,0,0,0,1931,1932,1,0,0,0,1932,2068,3,686,343,0,1933,1935,5,
        340,0,0,1934,1936,5,857,0,0,1935,1934,1,0,0,0,1935,1936,1,0,0,0,
        1936,1937,1,0,0,0,1937,2068,5,882,0,0,1938,1940,5,346,0,0,1939,1941,
        5,857,0,0,1940,1939,1,0,0,0,1940,1941,1,0,0,0,1941,1942,1,0,0,0,
        1942,2068,7,26,0,0,1943,1945,5,349,0,0,1944,1946,5,857,0,0,1945,
        1944,1,0,0,0,1945,1946,1,0,0,0,1946,1947,1,0,0,0,1947,2068,5,882,
        0,0,1948,1949,7,27,0,0,1949,1951,5,367,0,0,1950,1952,5,857,0,0,1951,
        1950,1,0,0,0,1951,1952,1,0,0,0,1952,1953,1,0,0,0,1953,2068,5,882,
        0,0,1954,1956,5,365,0,0,1955,1957,5,857,0,0,1956,1955,1,0,0,0,1956,
        1957,1,0,0,0,1957,1958,1,0,0,0,1958,2068,7,25,0,0,1959,1961,5,376,
        0,0,1960,1962,5,857,0,0,1961,1960,1,0,0,0,1961,1962,1,0,0,0,1962,
        1963,1,0,0,0,1963,2068,5,882,0,0,1964,1966,7,28,0,0,1965,1967,5,
        857,0,0,1966,1965,1,0,0,0,1966,1967,1,0,0,0,1967,1968,1,0,0,0,1968,
        2068,7,25,0,0,1969,1971,7,29,0,0,1970,1972,5,857,0,0,1971,1970,1,
        0,0,0,1971,1972,1,0,0,0,1972,1973,1,0,0,0,1973,2068,3,708,354,0,
        1974,1976,5,377,0,0,1975,1977,5,857,0,0,1976,1975,1,0,0,0,1976,1977,
        1,0,0,0,1977,1978,1,0,0,0,1978,2068,3,708,354,0,1979,1980,5,82,0,
        0,1980,1982,5,367,0,0,1981,1983,5,857,0,0,1982,1981,1,0,0,0,1982,
        1983,1,0,0,0,1983,1984,1,0,0,0,1984,2068,5,882,0,0,1985,1987,5,431,
        0,0,1986,1988,5,857,0,0,1987,1986,1,0,0,0,1987,1988,1,0,0,0,1988,
        1989,1,0,0,0,1989,2068,7,30,0,0,1990,1992,5,443,0,0,1991,1993,5,
        857,0,0,1992,1991,1,0,0,0,1992,1993,1,0,0,0,1993,1994,1,0,0,0,1994,
        2068,3,710,355,0,1995,1997,5,480,0,0,1996,1998,5,857,0,0,1997,1996,
        1,0,0,0,1997,1998,1,0,0,0,1998,1999,1,0,0,0,1999,2068,3,708,354,
        0,2000,2002,5,490,0,0,2001,2003,5,857,0,0,2002,2001,1,0,0,0,2002,
        2003,1,0,0,0,2003,2004,1,0,0,0,2004,2068,3,708,354,0,2005,2007,5,
        520,0,0,2006,2008,5,857,0,0,2007,2006,1,0,0,0,2007,2008,1,0,0,0,
        2008,2009,1,0,0,0,2009,2068,7,13,0,0,2010,2012,5,529,0,0,2011,2013,
        5,857,0,0,2012,2011,1,0,0,0,2012,2013,1,0,0,0,2013,2014,1,0,0,0,
        2014,2068,5,882,0,0,2015,2017,5,588,0,0,2016,2018,5,857,0,0,2017,
        2016,1,0,0,0,2017,2018,1,0,0,0,2018,2019,1,0,0,0,2019,2068,7,31,
        0,0,2020,2021,5,640,0,0,2021,2068,5,664,0,0,2022,2024,5,833,0,0,
        2023,2025,5,857,0,0,2024,2023,1,0,0,0,2024,2025,1,0,0,0,2025,2026,
        1,0,0,0,2026,2068,5,882,0,0,2027,2029,5,642,0,0,2028,2030,5,857,
        0,0,2029,2028,1,0,0,0,2029,2030,1,0,0,0,2030,2031,1,0,0,0,2031,2068,
        7,13,0,0,2032,2034,5,643,0,0,2033,2035,5,857,0,0,2034,2033,1,0,0,
        0,2034,2035,1,0,0,0,2035,2036,1,0,0,0,2036,2068,7,13,0,0,2037,2039,
        5,644,0,0,2038,2040,5,857,0,0,2039,2038,1,0,0,0,2039,2040,1,0,0,
        0,2040,2043,1,0,0,0,2041,2044,5,42,0,0,2042,2044,3,708,354,0,2043,
        2041,1,0,0,0,2043,2042,1,0,0,0,2044,2068,1,0,0,0,2045,2046,5,658,
        0,0,2046,2048,3,662,331,0,2047,2049,3,102,51,0,2048,2047,1,0,0,0,
        2048,2049,1,0,0,0,2049,2068,1,0,0,0,2050,2051,5,659,0,0,2051,2052,
        5,857,0,0,2052,2068,3,100,50,0,2053,2068,3,102,51,0,2054,2056,5,
        665,0,0,2055,2057,5,857,0,0,2056,2055,1,0,0,0,2056,2057,1,0,0,0,
        2057,2058,1,0,0,0,2058,2068,7,25,0,0,2059,2061,5,181,0,0,2060,2062,
        5,857,0,0,2061,2060,1,0,0,0,2061,2062,1,0,0,0,2062,2063,1,0,0,0,
        2063,2064,5,866,0,0,2064,2065,3,646,323,0,2065,2066,5,867,0,0,2066,
        2068,1,0,0,0,2067,1882,1,0,0,0,2067,1889,1,0,0,0,2067,1894,1,0,0,
        0,2067,1899,1,0,0,0,2067,1904,1,0,0,0,2067,1910,1,0,0,0,2067,1920,
        1,0,0,0,2067,1926,1,0,0,0,2067,1933,1,0,0,0,2067,1938,1,0,0,0,2067,
        1943,1,0,0,0,2067,1948,1,0,0,0,2067,1954,1,0,0,0,2067,1959,1,0,0,
        0,2067,1964,1,0,0,0,2067,1969,1,0,0,0,2067,1974,1,0,0,0,2067,1979,
        1,0,0,0,2067,1985,1,0,0,0,2067,1990,1,0,0,0,2067,1995,1,0,0,0,2067,
        2000,1,0,0,0,2067,2005,1,0,0,0,2067,2010,1,0,0,0,2067,2015,1,0,0,
        0,2067,2020,1,0,0,0,2067,2022,1,0,0,0,2067,2027,1,0,0,0,2067,2032,
        1,0,0,0,2067,2037,1,0,0,0,2067,2045,1,0,0,0,2067,2050,1,0,0,0,2067,
        2053,1,0,0,0,2067,2054,1,0,0,0,2067,2059,1,0,0,0,2068,99,1,0,0,0,
        2069,2070,7,32,0,0,2070,101,1,0,0,0,2071,2072,5,647,0,0,2072,2073,
        7,21,0,0,2073,103,1,0,0,0,2074,2075,5,130,0,0,2075,2076,5,20,0,0,
        2076,2079,3,106,53,0,2077,2078,5,528,0,0,2078,2080,3,708,354,0,2079,
        2077,1,0,0,0,2079,2080,1,0,0,0,2080,2088,1,0,0,0,2081,2082,5,652,
        0,0,2082,2083,5,20,0,0,2083,2086,3,108,54,0,2084,2085,5,653,0,0,
        2085,2087,3,708,354,0,2086,2084,1,0,0,0,2086,2087,1,0,0,0,2087,2089,
        1,0,0,0,2088,2081,1,0,0,0,2088,2089,1,0,0,0,2089,2101,1,0,0,0,2090,
        2091,5,866,0,0,2091,2096,3,110,55,0,2092,2093,5,868,0,0,2093,2095,
        3,110,55,0,2094,2092,1,0,0,0,2095,2098,1,0,0,0,2096,2094,1,0,0,0,
        2096,2097,1,0,0,0,2097,2099,1,0,0,0,2098,2096,1,0,0,0,2099,2100,
        5,867,0,0,2100,2102,1,0,0,0,2101,2090,1,0,0,0,2101,2102,1,0,0,0,
        2102,105,1,0,0,0,2103,2105,5,101,0,0,2104,2103,1,0,0,0,2104,2105,
        1,0,0,0,2105,2106,1,0,0,0,2106,2107,5,418,0,0,2107,2108,5,866,0,
        0,2108,2109,3,800,400,0,2109,2110,5,867,0,0,2110,2150,1,0,0,0,2111,
        2113,5,101,0,0,2112,2111,1,0,0,0,2112,2113,1,0,0,0,2113,2114,1,0,
        0,0,2114,2118,5,92,0,0,2115,2116,5,308,0,0,2116,2117,5,857,0,0,2117,
        2119,7,33,0,0,2118,2115,1,0,0,0,2118,2119,1,0,0,0,2119,2120,1,0,
        0,0,2120,2122,5,866,0,0,2121,2123,3,656,328,0,2122,2121,1,0,0,0,
        2122,2123,1,0,0,0,2123,2124,1,0,0,0,2124,2150,5,867,0,0,2125,2135,
        5,134,0,0,2126,2127,5,866,0,0,2127,2128,3,800,400,0,2128,2129,5,
        867,0,0,2129,2136,1,0,0,0,2130,2131,5,337,0,0,2131,2132,5,866,0,
        0,2132,2133,3,656,328,0,2133,2134,5,867,0,0,2134,2136,1,0,0,0,2135,
        2126,1,0,0,0,2135,2130,1,0,0,0,2136,2150,1,0,0,0,2137,2147,5,449,
        0,0,2138,2139,5,866,0,0,2139,2140,3,800,400,0,2140,2141,5,867,0,
        0,2141,2148,1,0,0,0,2142,2143,5,337,0,0,2143,2144,5,866,0,0,2144,
        2145,3,656,328,0,2145,2146,5,867,0,0,2146,2148,1,0,0,0,2147,2138,
        1,0,0,0,2147,2142,1,0,0,0,2148,2150,1,0,0,0,2149,2104,1,0,0,0,2149,
        2112,1,0,0,0,2149,2125,1,0,0,0,2149,2137,1,0,0,0,2150,107,1,0,0,
        0,2151,2153,5,101,0,0,2152,2151,1,0,0,0,2152,2153,1,0,0,0,2153,2154,
        1,0,0,0,2154,2155,5,418,0,0,2155,2156,5,866,0,0,2156,2157,3,800,
        400,0,2157,2158,5,867,0,0,2158,2173,1,0,0,0,2159,2161,5,101,0,0,
        2160,2159,1,0,0,0,2160,2161,1,0,0,0,2161,2162,1,0,0,0,2162,2166,
        5,92,0,0,2163,2164,5,308,0,0,2164,2165,5,857,0,0,2165,2167,7,33,
        0,0,2166,2163,1,0,0,0,2166,2167,1,0,0,0,2167,2168,1,0,0,0,2168,2169,
        5,866,0,0,2169,2170,3,656,328,0,2170,2171,5,867,0,0,2171,2173,1,
        0,0,0,2172,2152,1,0,0,0,2172,2160,1,0,0,0,2173,109,1,0,0,0,2174,
        2175,5,130,0,0,2175,2176,3,668,334,0,2176,2177,5,189,0,0,2177,2178,
        5,447,0,0,2178,2179,5,662,0,0,2179,2180,5,866,0,0,2180,2185,3,112,
        56,0,2181,2182,5,868,0,0,2182,2184,3,112,56,0,2183,2181,1,0,0,0,
        2184,2187,1,0,0,0,2185,2183,1,0,0,0,2185,2186,1,0,0,0,2186,2188,
        1,0,0,0,2187,2185,1,0,0,0,2188,2192,5,867,0,0,2189,2191,3,118,59,
        0,2190,2189,1,0,0,0,2191,2194,1,0,0,0,2192,2190,1,0,0,0,2192,2193,
        1,0,0,0,2193,2206,1,0,0,0,2194,2192,1,0,0,0,2195,2196,5,866,0,0,
        2196,2201,3,116,58,0,2197,2198,5,868,0,0,2198,2200,3,116,58,0,2199,
        2197,1,0,0,0,2200,2203,1,0,0,0,2201,2199,1,0,0,0,2201,2202,1,0,0,
        0,2202,2204,1,0,0,0,2203,2201,1,0,0,0,2204,2205,5,867,0,0,2205,2207,
        1,0,0,0,2206,2195,1,0,0,0,2206,2207,1,0,0,0,2207,2321,1,0,0,0,2208,
        2209,5,130,0,0,2209,2210,3,668,334,0,2210,2211,5,189,0,0,2211,2212,
        5,447,0,0,2212,2213,5,662,0,0,2213,2217,3,112,56,0,2214,2216,3,118,
        59,0,2215,2214,1,0,0,0,2216,2219,1,0,0,0,2217,2215,1,0,0,0,2217,
        2218,1,0,0,0,2218,2231,1,0,0,0,2219,2217,1,0,0,0,2220,2221,5,866,
        0,0,2221,2226,3,116,58,0,2222,2223,5,868,0,0,2223,2225,3,116,58,
        0,2224,2222,1,0,0,0,2225,2228,1,0,0,0,2226,2224,1,0,0,0,2226,2227,
        1,0,0,0,2227,2229,1,0,0,0,2228,2226,1,0,0,0,2229,2230,5,867,0,0,
        2230,2232,1,0,0,0,2231,2220,1,0,0,0,2231,2232,1,0,0,0,2232,2321,
        1,0,0,0,2233,2234,5,130,0,0,2234,2235,3,668,334,0,2235,2236,5,189,
        0,0,2236,2237,5,80,0,0,2237,2238,5,866,0,0,2238,2243,3,112,56,0,
        2239,2240,5,868,0,0,2240,2242,3,112,56,0,2241,2239,1,0,0,0,2242,
        2245,1,0,0,0,2243,2241,1,0,0,0,2243,2244,1,0,0,0,2244,2246,1,0,0,
        0,2245,2243,1,0,0,0,2246,2250,5,867,0,0,2247,2249,3,118,59,0,2248,
        2247,1,0,0,0,2249,2252,1,0,0,0,2250,2248,1,0,0,0,2250,2251,1,0,0,
        0,2251,2264,1,0,0,0,2252,2250,1,0,0,0,2253,2254,5,866,0,0,2254,2259,
        3,116,58,0,2255,2256,5,868,0,0,2256,2258,3,116,58,0,2257,2255,1,
        0,0,0,2258,2261,1,0,0,0,2259,2257,1,0,0,0,2259,2260,1,0,0,0,2260,
        2262,1,0,0,0,2261,2259,1,0,0,0,2262,2263,5,867,0,0,2263,2265,1,0,
        0,0,2264,2253,1,0,0,0,2264,2265,1,0,0,0,2265,2321,1,0,0,0,2266,2267,
        5,130,0,0,2267,2268,3,668,334,0,2268,2269,5,189,0,0,2269,2270,5,
        80,0,0,2270,2271,5,866,0,0,2271,2276,3,114,57,0,2272,2273,5,868,
        0,0,2273,2275,3,114,57,0,2274,2272,1,0,0,0,2275,2278,1,0,0,0,2276,
        2274,1,0,0,0,2276,2277,1,0,0,0,2277,2279,1,0,0,0,2278,2276,1,0,0,
        0,2279,2283,5,867,0,0,2280,2282,3,118,59,0,2281,2280,1,0,0,0,2282,
        2285,1,0,0,0,2283,2281,1,0,0,0,2283,2284,1,0,0,0,2284,2297,1,0,0,
        0,2285,2283,1,0,0,0,2286,2287,5,866,0,0,2287,2292,3,116,58,0,2288,
        2289,5,868,0,0,2289,2291,3,116,58,0,2290,2288,1,0,0,0,2291,2294,
        1,0,0,0,2292,2290,1,0,0,0,2292,2293,1,0,0,0,2293,2295,1,0,0,0,2294,
        2292,1,0,0,0,2295,2296,5,867,0,0,2296,2298,1,0,0,0,2297,2286,1,0,
        0,0,2297,2298,1,0,0,0,2298,2321,1,0,0,0,2299,2300,5,130,0,0,2300,
        2304,3,668,334,0,2301,2303,3,118,59,0,2302,2301,1,0,0,0,2303,2306,
        1,0,0,0,2304,2302,1,0,0,0,2304,2305,1,0,0,0,2305,2318,1,0,0,0,2306,
        2304,1,0,0,0,2307,2308,5,866,0,0,2308,2313,3,116,58,0,2309,2310,
        5,868,0,0,2310,2312,3,116,58,0,2311,2309,1,0,0,0,2312,2315,1,0,0,
        0,2313,2311,1,0,0,0,2313,2314,1,0,0,0,2314,2316,1,0,0,0,2315,2313,
        1,0,0,0,2316,2317,5,867,0,0,2317,2319,1,0,0,0,2318,2307,1,0,0,0,
        2318,2319,1,0,0,0,2319,2321,1,0,0,0,2320,2174,1,0,0,0,2320,2208,
        1,0,0,0,2320,2233,1,0,0,0,2320,2266,1,0,0,0,2320,2299,1,0,0,0,2321,
        111,1,0,0,0,2322,2326,3,720,360,0,2323,2326,3,800,400,0,2324,2326,
        5,111,0,0,2325,2322,1,0,0,0,2325,2323,1,0,0,0,2325,2324,1,0,0,0,
        2326,113,1,0,0,0,2327,2328,5,866,0,0,2328,2331,3,112,56,0,2329,2330,
        5,868,0,0,2330,2332,3,112,56,0,2331,2329,1,0,0,0,2332,2333,1,0,0,
        0,2333,2331,1,0,0,0,2333,2334,1,0,0,0,2334,2335,1,0,0,0,2335,2336,
        5,867,0,0,2336,115,1,0,0,0,2337,2338,5,652,0,0,2338,2342,3,702,351,
        0,2339,2341,3,118,59,0,2340,2339,1,0,0,0,2341,2344,1,0,0,0,2342,
        2340,1,0,0,0,2342,2343,1,0,0,0,2343,117,1,0,0,0,2344,2342,1,0,0,
        0,2345,2347,5,42,0,0,2346,2345,1,0,0,0,2346,2347,1,0,0,0,2347,2349,
        1,0,0,0,2348,2350,5,647,0,0,2349,2348,1,0,0,0,2349,2350,1,0,0,0,
        2350,2351,1,0,0,0,2351,2353,5,380,0,0,2352,2354,5,857,0,0,2353,2352,
        1,0,0,0,2353,2354,1,0,0,0,2354,2355,1,0,0,0,2355,2394,3,688,344,
        0,2356,2358,5,340,0,0,2357,2359,5,857,0,0,2358,2357,1,0,0,0,2358,
        2359,1,0,0,0,2359,2360,1,0,0,0,2360,2394,5,882,0,0,2361,2362,5,360,
        0,0,2362,2364,5,367,0,0,2363,2365,5,857,0,0,2364,2363,1,0,0,0,2364,
        2365,1,0,0,0,2365,2366,1,0,0,0,2366,2394,5,882,0,0,2367,2368,5,82,
        0,0,2368,2370,5,367,0,0,2369,2371,5,857,0,0,2370,2369,1,0,0,0,2370,
        2371,1,0,0,0,2371,2372,1,0,0,0,2372,2394,5,882,0,0,2373,2375,5,480,
        0,0,2374,2376,5,857,0,0,2375,2374,1,0,0,0,2375,2376,1,0,0,0,2376,
        2377,1,0,0,0,2377,2394,3,708,354,0,2378,2380,5,490,0,0,2379,2381,
        5,857,0,0,2380,2379,1,0,0,0,2380,2381,1,0,0,0,2381,2382,1,0,0,0,
        2382,2394,3,708,354,0,2383,2385,5,658,0,0,2384,2386,5,857,0,0,2385,
        2384,1,0,0,0,2385,2386,1,0,0,0,2386,2387,1,0,0,0,2387,2394,3,662,
        331,0,2388,2390,5,504,0,0,2389,2391,5,857,0,0,2390,2389,1,0,0,0,
        2390,2391,1,0,0,0,2391,2392,1,0,0,0,2392,2394,3,702,351,0,2393,2346,
        1,0,0,0,2393,2356,1,0,0,0,2393,2361,1,0,0,0,2393,2367,1,0,0,0,2393,
        2373,1,0,0,0,2393,2378,1,0,0,0,2393,2383,1,0,0,0,2393,2388,1,0,0,
        0,2394,119,1,0,0,0,2395,2396,5,8,0,0,2396,2398,7,0,0,0,2397,2399,
        3,624,312,0,2398,2397,1,0,0,0,2398,2399,1,0,0,0,2399,2401,1,0,0,
        0,2400,2402,3,52,26,0,2401,2400,1,0,0,0,2402,2403,1,0,0,0,2403,2401,
        1,0,0,0,2403,2404,1,0,0,0,2404,2414,1,0,0,0,2405,2406,5,8,0,0,2406,
        2407,7,0,0,0,2407,2408,3,624,312,0,2408,2409,5,677,0,0,2409,2410,
        5,360,0,0,2410,2411,5,367,0,0,2411,2412,5,496,0,0,2412,2414,1,0,
        0,0,2413,2395,1,0,0,0,2413,2405,1,0,0,0,2414,121,1,0,0,0,2415,2417,
        5,8,0,0,2416,2418,3,58,29,0,2417,2416,1,0,0,0,2417,2418,1,0,0,0,
        2418,2419,1,0,0,0,2419,2420,5,385,0,0,2420,2424,3,698,349,0,2421,
        2422,5,119,0,0,2422,2423,5,590,0,0,2423,2425,3,60,30,0,2424,2421,
        1,0,0,0,2424,2425,1,0,0,0,2425,2432,1,0,0,0,2426,2427,5,119,0,0,
        2427,2429,5,343,0,0,2428,2430,5,114,0,0,2429,2428,1,0,0,0,2429,2430,
        1,0,0,0,2430,2431,1,0,0,0,2431,2433,5,541,0,0,2432,2426,1,0,0,0,
        2432,2433,1,0,0,0,2433,2437,1,0,0,0,2434,2435,5,141,0,0,2435,2436,
        5,176,0,0,2436,2438,3,698,349,0,2437,2434,1,0,0,0,2437,2438,1,0,
        0,0,2438,2440,1,0,0,0,2439,2441,3,68,34,0,2440,2439,1,0,0,0,2440,
        2441,1,0,0,0,2441,2444,1,0,0,0,2442,2443,5,340,0,0,2443,2445,5,882,
        0,0,2444,2442,1,0,0,0,2444,2445,1,0,0,0,2445,2448,1,0,0,0,2446,2447,
        5,371,0,0,2447,2449,3,416,208,0,2448,2446,1,0,0,0,2448,2449,1,0,
        0,0,2449,123,1,0,0,0,2450,2451,5,8,0,0,2451,2452,5,409,0,0,2452,
        2456,3,628,314,0,2453,2455,3,76,38,0,2454,2453,1,0,0,0,2455,2458,
        1,0,0,0,2456,2454,1,0,0,0,2456,2457,1,0,0,0,2457,125,1,0,0,0,2458,
        2456,1,0,0,0,2459,2460,5,8,0,0,2460,2461,5,433,0,0,2461,2462,5,585,
        0,0,2462,2463,5,801,0,0,2463,2464,5,453,0,0,2464,2465,5,92,0,0,2465,
        127,1,0,0,0,2466,2467,5,8,0,0,2467,2468,5,451,0,0,2468,2469,5,74,
        0,0,2469,2470,3,702,351,0,2470,2471,5,6,0,0,2471,2472,5,671,0,0,
        2472,2478,5,882,0,0,2473,2475,5,428,0,0,2474,2476,5,857,0,0,2475,
        2474,1,0,0,0,2475,2476,1,0,0,0,2476,2477,1,0,0,0,2477,2479,3,710,
        355,0,2478,2473,1,0,0,0,2478,2479,1,0,0,0,2479,2481,1,0,0,0,2480,
        2482,5,687,0,0,2481,2480,1,0,0,0,2481,2482,1,0,0,0,2482,2483,1,0,
        0,0,2483,2485,5,380,0,0,2484,2486,5,857,0,0,2485,2484,1,0,0,0,2485,
        2486,1,0,0,0,2486,2487,1,0,0,0,2487,2488,3,688,344,0,2488,129,1,
        0,0,0,2489,2490,5,8,0,0,2490,2491,5,132,0,0,2491,2495,3,698,349,
        0,2492,2494,3,76,38,0,2493,2492,1,0,0,0,2494,2497,1,0,0,0,2495,2493,
        1,0,0,0,2495,2496,1,0,0,0,2496,131,1,0,0,0,2497,2495,1,0,0,0,2498,
        2499,5,8,0,0,2499,2500,5,592,0,0,2500,2501,3,702,351,0,2501,2502,
        5,518,0,0,2502,2503,5,866,0,0,2503,2508,3,78,39,0,2504,2505,5,868,
        0,0,2505,2507,3,78,39,0,2506,2504,1,0,0,0,2507,2510,1,0,0,0,2508,
        2506,1,0,0,0,2508,2509,1,0,0,0,2509,2511,1,0,0,0,2510,2508,1,0,0,
        0,2511,2512,5,867,0,0,2512,133,1,0,0,0,2513,2514,5,8,0,0,2514,2515,
        5,173,0,0,2515,2524,3,648,324,0,2516,2521,3,140,70,0,2517,2518,5,
        868,0,0,2518,2520,3,140,70,0,2519,2517,1,0,0,0,2520,2523,1,0,0,0,
        2521,2519,1,0,0,0,2521,2522,1,0,0,0,2522,2525,1,0,0,0,2523,2521,
        1,0,0,0,2524,2516,1,0,0,0,2524,2525,1,0,0,0,2525,2533,1,0,0,0,2526,
        2530,3,142,71,0,2527,2529,3,142,71,0,2528,2527,1,0,0,0,2529,2532,
        1,0,0,0,2530,2528,1,0,0,0,2530,2531,1,0,0,0,2531,2534,1,0,0,0,2532,
        2530,1,0,0,0,2533,2526,1,0,0,0,2533,2534,1,0,0,0,2534,135,1,0,0,
        0,2535,2537,5,8,0,0,2536,2538,5,180,0,0,2537,2536,1,0,0,0,2537,2538,
        1,0,0,0,2538,2539,1,0,0,0,2539,2540,5,658,0,0,2540,2541,3,662,331,
        0,2541,2542,7,34,0,0,2542,2543,5,361,0,0,2543,2549,5,882,0,0,2544,
        2546,5,428,0,0,2545,2547,5,857,0,0,2546,2545,1,0,0,0,2546,2547,1,
        0,0,0,2547,2548,1,0,0,0,2548,2550,3,710,355,0,2549,2544,1,0,0,0,
        2549,2550,1,0,0,0,2550,2552,1,0,0,0,2551,2553,5,687,0,0,2552,2551,
        1,0,0,0,2552,2553,1,0,0,0,2553,2557,1,0,0,0,2554,2555,5,141,0,0,
        2555,2556,5,176,0,0,2556,2558,3,660,330,0,2557,2554,1,0,0,0,2557,
        2558,1,0,0,0,2558,2564,1,0,0,0,2559,2561,5,314,0,0,2560,2562,5,857,
        0,0,2561,2560,1,0,0,0,2561,2562,1,0,0,0,2562,2563,1,0,0,0,2563,2565,
        3,710,355,0,2564,2559,1,0,0,0,2564,2565,1,0,0,0,2565,2568,1,0,0,
        0,2566,2567,5,155,0,0,2567,2569,7,35,0,0,2568,2566,1,0,0,0,2568,
        2569,1,0,0,0,2569,2575,1,0,0,0,2570,2572,5,376,0,0,2571,2573,5,857,
        0,0,2572,2571,1,0,0,0,2572,2573,1,0,0,0,2573,2574,1,0,0,0,2574,2576,
        5,882,0,0,2575,2570,1,0,0,0,2575,2576,1,0,0,0,2576,2582,1,0,0,0,
        2577,2579,5,380,0,0,2578,2580,5,857,0,0,2579,2578,1,0,0,0,2579,2580,
        1,0,0,0,2580,2581,1,0,0,0,2581,2583,3,688,344,0,2582,2577,1,0,0,
        0,2582,2583,1,0,0,0,2583,2589,1,0,0,0,2584,2586,5,825,0,0,2585,2587,
        5,857,0,0,2586,2585,1,0,0,0,2586,2587,1,0,0,0,2587,2588,1,0,0,0,
        2588,2590,5,882,0,0,2589,2584,1,0,0,0,2589,2590,1,0,0,0,2590,137,
        1,0,0,0,2591,2595,5,8,0,0,2592,2593,5,308,0,0,2593,2594,5,857,0,
        0,2594,2596,7,10,0,0,2595,2592,1,0,0,0,2595,2596,1,0,0,0,2596,2598,
        1,0,0,0,2597,2599,3,58,29,0,2598,2597,1,0,0,0,2598,2599,1,0,0,0,
        2599,2603,1,0,0,0,2600,2601,5,162,0,0,2601,2602,5,591,0,0,2602,2604,
        7,11,0,0,2603,2600,1,0,0,0,2603,2604,1,0,0,0,2604,2605,1,0,0,0,2605,
        2606,5,684,0,0,2606,2611,3,632,316,0,2607,2608,5,866,0,0,2608,2609,
        3,656,328,0,2609,2610,5,867,0,0,2610,2612,1,0,0,0,2611,2607,1,0,
        0,0,2611,2612,1,0,0,0,2612,2613,1,0,0,0,2613,2614,5,13,0,0,2614,
        2621,3,204,102,0,2615,2617,5,194,0,0,2616,2618,7,12,0,0,2617,2616,
        1,0,0,0,2617,2618,1,0,0,0,2618,2619,1,0,0,0,2619,2620,5,27,0,0,2620,
        2622,5,121,0,0,2621,2615,1,0,0,0,2621,2622,1,0,0,0,2622,139,1,0,
        0,0,2623,2630,3,98,49,0,2624,2626,5,868,0,0,2625,2624,1,0,0,0,2625,
        2626,1,0,0,0,2626,2627,1,0,0,0,2627,2629,3,98,49,0,2628,2625,1,0,
        0,0,2629,2632,1,0,0,0,2630,2628,1,0,0,0,2630,2631,1,0,0,0,2631,2888,
        1,0,0,0,2632,2630,1,0,0,0,2633,2635,5,6,0,0,2634,2636,5,29,0,0,2635,
        2634,1,0,0,0,2635,2636,1,0,0,0,2636,2637,1,0,0,0,2637,2638,3,658,
        329,0,2638,2642,3,88,44,0,2639,2643,5,402,0,0,2640,2641,5,306,0,
        0,2641,2643,3,658,329,0,2642,2639,1,0,0,0,2642,2640,1,0,0,0,2642,
        2643,1,0,0,0,2643,2888,1,0,0,0,2644,2646,5,6,0,0,2645,2647,5,29,
        0,0,2646,2645,1,0,0,0,2646,2647,1,0,0,0,2647,2648,1,0,0,0,2648,2649,
        5,866,0,0,2649,2650,3,658,329,0,2650,2657,3,88,44,0,2651,2652,5,
        868,0,0,2652,2653,3,658,329,0,2653,2654,3,88,44,0,2654,2656,1,0,
        0,0,2655,2651,1,0,0,0,2656,2659,1,0,0,0,2657,2655,1,0,0,0,2657,2658,
        1,0,0,0,2658,2660,1,0,0,0,2659,2657,1,0,0,0,2660,2661,5,867,0,0,
        2661,2888,1,0,0,0,2662,2663,5,6,0,0,2663,2665,7,18,0,0,2664,2666,
        3,638,319,0,2665,2664,1,0,0,0,2665,2666,1,0,0,0,2666,2668,1,0,0,
        0,2667,2669,3,70,35,0,2668,2667,1,0,0,0,2668,2669,1,0,0,0,2669,2670,
        1,0,0,0,2670,2674,3,734,367,0,2671,2673,3,72,36,0,2672,2671,1,0,
        0,0,2673,2676,1,0,0,0,2674,2672,1,0,0,0,2674,2675,1,0,0,0,2675,2888,
        1,0,0,0,2676,2674,1,0,0,0,2677,2678,5,6,0,0,2678,2680,7,19,0,0,2679,
        2681,7,18,0,0,2680,2679,1,0,0,0,2680,2681,1,0,0,0,2681,2683,1,0,
        0,0,2682,2684,3,638,319,0,2683,2682,1,0,0,0,2683,2684,1,0,0,0,2684,
        2685,1,0,0,0,2685,2689,3,734,367,0,2686,2688,3,72,36,0,2687,2686,
        1,0,0,0,2688,2691,1,0,0,0,2689,2687,1,0,0,0,2689,2690,1,0,0,0,2690,
        2888,1,0,0,0,2691,2689,1,0,0,0,2692,2697,5,6,0,0,2693,2695,5,31,
        0,0,2694,2696,3,702,351,0,2695,2694,1,0,0,0,2695,2696,1,0,0,0,2696,
        2698,1,0,0,0,2697,2693,1,0,0,0,2697,2698,1,0,0,0,2698,2699,1,0,0,
        0,2699,2700,5,131,0,0,2700,2702,5,92,0,0,2701,2703,3,70,35,0,2702,
        2701,1,0,0,0,2702,2703,1,0,0,0,2703,2704,1,0,0,0,2704,2708,3,734,
        367,0,2705,2707,3,72,36,0,2706,2705,1,0,0,0,2707,2710,1,0,0,0,2708,
        2706,1,0,0,0,2708,2709,1,0,0,0,2709,2888,1,0,0,0,2710,2708,1,0,0,
        0,2711,2716,5,6,0,0,2712,2714,5,31,0,0,2713,2715,3,702,351,0,2714,
        2713,1,0,0,0,2714,2715,1,0,0,0,2715,2717,1,0,0,0,2716,2712,1,0,0,
        0,2716,2717,1,0,0,0,2717,2718,1,0,0,0,2718,2720,5,182,0,0,2719,2721,
        7,18,0,0,2720,2719,1,0,0,0,2720,2721,1,0,0,0,2721,2723,1,0,0,0,2722,
        2724,3,638,319,0,2723,2722,1,0,0,0,2723,2724,1,0,0,0,2724,2726,1,
        0,0,0,2725,2727,3,70,35,0,2726,2725,1,0,0,0,2726,2727,1,0,0,0,2727,
        2728,1,0,0,0,2728,2732,3,734,367,0,2729,2731,3,72,36,0,2730,2729,
        1,0,0,0,2731,2734,1,0,0,0,2732,2730,1,0,0,0,2732,2733,1,0,0,0,2733,
        2888,1,0,0,0,2734,2732,1,0,0,0,2735,2740,5,6,0,0,2736,2738,5,31,
        0,0,2737,2739,3,702,351,0,2738,2737,1,0,0,0,2738,2739,1,0,0,0,2739,
        2741,1,0,0,0,2740,2736,1,0,0,0,2740,2741,1,0,0,0,2741,2742,1,0,0,
        0,2742,2743,5,67,0,0,2743,2745,5,92,0,0,2744,2746,3,638,319,0,2745,
        2744,1,0,0,0,2745,2746,1,0,0,0,2746,2747,1,0,0,0,2747,2748,3,734,
        367,0,2748,2749,3,92,46,0,2749,2888,1,0,0,0,2750,2752,5,6,0,0,2751,
        2753,3,84,42,0,2752,2751,1,0,0,0,2752,2753,1,0,0,0,2753,2888,1,0,
        0,0,2754,2755,5,51,0,0,2755,2756,7,36,0,0,2756,2888,3,702,351,0,
        2757,2758,5,8,0,0,2758,2759,7,36,0,0,2759,2761,3,702,351,0,2760,
        2762,5,114,0,0,2761,2760,1,0,0,0,2761,2762,1,0,0,0,2762,2764,1,0,
        0,0,2763,2765,5,57,0,0,2764,2763,1,0,0,0,2764,2765,1,0,0,0,2765,
        2888,1,0,0,0,2766,2768,5,308,0,0,2767,2769,5,857,0,0,2768,2767,1,
        0,0,0,2768,2769,1,0,0,0,2769,2770,1,0,0,0,2770,2888,7,37,0,0,2771,
        2773,5,8,0,0,2772,2774,5,29,0,0,2773,2772,1,0,0,0,2773,2774,1,0,
        0,0,2774,2775,1,0,0,0,2775,2783,3,658,329,0,2776,2777,5,155,0,0,
        2777,2778,5,42,0,0,2778,2784,3,750,375,0,2779,2780,5,155,0,0,2780,
        2784,7,16,0,0,2781,2782,5,51,0,0,2782,2784,5,42,0,0,2783,2776,1,
        0,0,0,2783,2779,1,0,0,0,2783,2781,1,0,0,0,2784,2888,1,0,0,0,2785,
        2786,5,8,0,0,2786,2787,5,82,0,0,2787,2788,3,638,319,0,2788,2789,
        7,16,0,0,2789,2888,1,0,0,0,2790,2792,5,25,0,0,2791,2793,5,29,0,0,
        2792,2791,1,0,0,0,2792,2793,1,0,0,0,2793,2794,1,0,0,0,2794,2795,
        3,658,329,0,2795,2796,3,654,327,0,2796,2800,3,88,44,0,2797,2801,
        5,402,0,0,2798,2799,5,306,0,0,2799,2801,3,658,329,0,2800,2797,1,
        0,0,0,2800,2798,1,0,0,0,2800,2801,1,0,0,0,2801,2888,1,0,0,0,2802,
        2804,5,42,0,0,2803,2802,1,0,0,0,2803,2804,1,0,0,0,2804,2805,1,0,
        0,0,2805,2806,5,26,0,0,2806,2807,5,155,0,0,2807,2808,5,857,0,0,2808,
        2814,3,684,342,0,2809,2811,5,28,0,0,2810,2812,5,857,0,0,2811,2810,
        1,0,0,0,2811,2812,1,0,0,0,2812,2813,1,0,0,0,2813,2815,3,686,343,
        0,2814,2809,1,0,0,0,2814,2815,1,0,0,0,2815,2888,1,0,0,0,2816,2817,
        5,33,0,0,2817,2821,5,176,0,0,2818,2822,5,823,0,0,2819,2820,5,26,
        0,0,2820,2822,5,155,0,0,2821,2818,1,0,0,0,2821,2819,1,0,0,0,2822,
        2823,1,0,0,0,2823,2826,3,684,342,0,2824,2825,5,28,0,0,2825,2827,
        3,686,343,0,2826,2824,1,0,0,0,2826,2827,1,0,0,0,2827,2888,1,0,0,
        0,2828,2829,7,38,0,0,2829,2888,5,93,0,0,2830,2831,7,39,0,0,2831,
        2888,5,658,0,0,2832,2834,5,51,0,0,2833,2835,5,29,0,0,2834,2833,1,
        0,0,0,2834,2835,1,0,0,0,2835,2836,1,0,0,0,2836,2888,3,658,329,0,
        2837,2838,5,51,0,0,2838,2839,7,18,0,0,2839,2888,3,638,319,0,2840,
        2841,5,51,0,0,2841,2842,5,131,0,0,2842,2888,5,92,0,0,2843,2844,5,
        51,0,0,2844,2845,5,67,0,0,2845,2846,5,92,0,0,2846,2888,3,702,351,
        0,2847,2888,5,66,0,0,2848,2850,5,104,0,0,2849,2851,5,857,0,0,2850,
        2849,1,0,0,0,2850,2851,1,0,0,0,2851,2852,1,0,0,0,2852,2888,7,4,0,
        0,2853,2855,5,492,0,0,2854,2856,5,29,0,0,2855,2854,1,0,0,0,2855,
        2856,1,0,0,0,2856,2857,1,0,0,0,2857,2858,3,658,329,0,2858,2862,3,
        88,44,0,2859,2863,5,402,0,0,2860,2861,5,306,0,0,2861,2863,3,658,
        329,0,2862,2859,1,0,0,0,2862,2860,1,0,0,0,2862,2863,1,0,0,0,2863,
        2888,1,0,0,0,2864,2865,5,125,0,0,2865,2866,5,20,0,0,2866,2888,3,
        656,328,0,2867,2868,5,141,0,0,2868,2869,5,29,0,0,2869,2870,3,658,
        329,0,2870,2871,5,176,0,0,2871,2872,3,654,327,0,2872,2888,1,0,0,
        0,2873,2874,5,141,0,0,2874,2875,7,18,0,0,2875,2876,3,638,319,0,2876,
        2877,5,176,0,0,2877,2878,3,634,317,0,2878,2888,1,0,0,0,2879,2881,
        5,141,0,0,2880,2882,7,40,0,0,2881,2880,1,0,0,0,2881,2882,1,0,0,0,
        2882,2883,1,0,0,0,2883,2888,3,644,322,0,2884,2885,7,41,0,0,2885,
        2888,5,681,0,0,2886,2888,3,142,71,0,2887,2623,1,0,0,0,2887,2633,
        1,0,0,0,2887,2644,1,0,0,0,2887,2662,1,0,0,0,2887,2677,1,0,0,0,2887,
        2692,1,0,0,0,2887,2711,1,0,0,0,2887,2735,1,0,0,0,2887,2750,1,0,0,
        0,2887,2754,1,0,0,0,2887,2757,1,0,0,0,2887,2766,1,0,0,0,2887,2771,
        1,0,0,0,2887,2785,1,0,0,0,2887,2790,1,0,0,0,2887,2803,1,0,0,0,2887,
        2816,1,0,0,0,2887,2828,1,0,0,0,2887,2830,1,0,0,0,2887,2832,1,0,0,
        0,2887,2837,1,0,0,0,2887,2840,1,0,0,0,2887,2843,1,0,0,0,2887,2847,
        1,0,0,0,2887,2848,1,0,0,0,2887,2853,1,0,0,0,2887,2864,1,0,0,0,2887,
        2867,1,0,0,0,2887,2873,1,0,0,0,2887,2879,1,0,0,0,2887,2884,1,0,0,
        0,2887,2886,1,0,0,0,2888,141,1,0,0,0,2889,2890,5,6,0,0,2890,2891,
        5,130,0,0,2891,2892,5,866,0,0,2892,2897,3,110,55,0,2893,2894,5,868,
        0,0,2894,2896,3,110,55,0,2895,2893,1,0,0,0,2896,2899,1,0,0,0,2897,
        2895,1,0,0,0,2897,2898,1,0,0,0,2898,2900,1,0,0,0,2899,2897,1,0,0,
        0,2900,2901,5,867,0,0,2901,2988,1,0,0,0,2902,2903,5,51,0,0,2903,
        2904,5,130,0,0,2904,2988,3,666,333,0,2905,2906,5,369,0,0,2906,2909,
        5,130,0,0,2907,2910,3,666,333,0,2908,2910,5,7,0,0,2909,2907,1,0,
        0,0,2909,2908,1,0,0,0,2910,2911,1,0,0,0,2911,2988,5,658,0,0,2912,
        2913,5,425,0,0,2913,2916,5,130,0,0,2914,2917,3,666,333,0,2915,2917,
        5,7,0,0,2916,2914,1,0,0,0,2916,2915,1,0,0,0,2917,2918,1,0,0,0,2918,
        2988,5,658,0,0,2919,2920,5,668,0,0,2920,2923,5,130,0,0,2921,2924,
        3,666,333,0,2922,2924,5,7,0,0,2923,2921,1,0,0,0,2923,2922,1,0,0,
        0,2924,2988,1,0,0,0,2925,2926,5,335,0,0,2926,2927,5,130,0,0,2927,
        2988,3,708,354,0,2928,2929,5,561,0,0,2929,2930,5,130,0,0,2930,2931,
        3,666,333,0,2931,2932,5,88,0,0,2932,2933,5,866,0,0,2933,2938,3,110,
        55,0,2934,2935,5,868,0,0,2935,2937,3,110,55,0,2936,2934,1,0,0,0,
        2937,2940,1,0,0,0,2938,2936,1,0,0,0,2938,2939,1,0,0,0,2939,2941,
        1,0,0,0,2940,2938,1,0,0,0,2941,2942,5,867,0,0,2942,2988,1,0,0,0,
        2943,2944,5,388,0,0,2944,2945,5,130,0,0,2945,2946,3,668,334,0,2946,
        2947,5,194,0,0,2947,2948,5,173,0,0,2948,2951,3,648,324,0,2949,2950,
        7,41,0,0,2950,2952,5,681,0,0,2951,2949,1,0,0,0,2951,2952,1,0,0,0,
        2952,2988,1,0,0,0,2953,2954,5,10,0,0,2954,2957,5,130,0,0,2955,2958,
        3,666,333,0,2956,2958,5,7,0,0,2957,2955,1,0,0,0,2957,2956,1,0,0,
        0,2958,2988,1,0,0,0,2959,2960,5,27,0,0,2960,2963,5,130,0,0,2961,
        2964,3,666,333,0,2962,2964,5,7,0,0,2963,2961,1,0,0,0,2963,2962,1,
        0,0,0,2964,2988,1,0,0,0,2965,2966,5,120,0,0,2966,2969,5,130,0,0,
        2967,2970,3,666,333,0,2968,2970,5,7,0,0,2969,2967,1,0,0,0,2969,2968,
        1,0,0,0,2970,2988,1,0,0,0,2971,2972,5,550,0,0,2972,2975,5,130,0,
        0,2973,2976,3,666,333,0,2974,2976,5,7,0,0,2975,2973,1,0,0,0,2975,
        2974,1,0,0,0,2976,2988,1,0,0,0,2977,2978,5,562,0,0,2978,2981,5,130,
        0,0,2979,2982,3,666,333,0,2980,2982,5,7,0,0,2981,2979,1,0,0,0,2981,
        2980,1,0,0,0,2982,2988,1,0,0,0,2983,2984,5,560,0,0,2984,2988,5,527,
        0,0,2985,2986,5,677,0,0,2986,2988,5,527,0,0,2987,2889,1,0,0,0,2987,
        2902,1,0,0,0,2987,2905,1,0,0,0,2987,2912,1,0,0,0,2987,2919,1,0,0,
        0,2987,2925,1,0,0,0,2987,2928,1,0,0,0,2987,2943,1,0,0,0,2987,2953,
        1,0,0,0,2987,2959,1,0,0,0,2987,2965,1,0,0,0,2987,2971,1,0,0,0,2987,
        2977,1,0,0,0,2987,2983,1,0,0,0,2987,2985,1,0,0,0,2988,143,1,0,0,
        0,2989,2990,5,51,0,0,2990,2992,7,0,0,0,2991,2993,3,754,377,0,2992,
        2991,1,0,0,0,2992,2993,1,0,0,0,2993,2994,1,0,0,0,2994,2995,3,624,
        312,0,2995,145,1,0,0,0,2996,2997,5,51,0,0,2997,2999,5,385,0,0,2998,
        3000,3,754,377,0,2999,2998,1,0,0,0,2999,3000,1,0,0,0,3000,3001,1,
        0,0,0,3001,3002,3,698,349,0,3002,147,1,0,0,0,3003,3004,5,51,0,0,
        3004,3006,5,82,0,0,3005,3007,7,1,0,0,3006,3005,1,0,0,0,3006,3007,
        1,0,0,0,3007,3008,1,0,0,0,3008,3009,3,638,319,0,3009,3010,5,119,
        0,0,3010,3023,3,648,324,0,3011,3013,5,308,0,0,3012,3014,5,857,0,
        0,3013,3012,1,0,0,0,3013,3014,1,0,0,0,3014,3015,1,0,0,0,3015,3022,
        7,3,0,0,3016,3018,5,104,0,0,3017,3019,5,857,0,0,3018,3017,1,0,0,
        0,3018,3019,1,0,0,0,3019,3020,1,0,0,0,3020,3022,7,4,0,0,3021,3011,
        1,0,0,0,3021,3016,1,0,0,0,3022,3025,1,0,0,0,3023,3021,1,0,0,0,3023,
        3024,1,0,0,0,3024,149,1,0,0,0,3025,3023,1,0,0,0,3026,3027,5,51,0,
        0,3027,3028,5,451,0,0,3028,3029,5,74,0,0,3029,3030,3,702,351,0,3030,
        3032,5,380,0,0,3031,3033,5,857,0,0,3032,3031,1,0,0,0,3032,3033,1,
        0,0,0,3033,3034,1,0,0,0,3034,3035,3,688,344,0,3035,151,1,0,0,0,3036,
        3037,5,51,0,0,3037,3039,5,132,0,0,3038,3040,3,754,377,0,3039,3038,
        1,0,0,0,3039,3040,1,0,0,0,3040,3041,1,0,0,0,3041,3042,3,698,349,
        0,3042,153,1,0,0,0,3043,3044,5,51,0,0,3044,3046,5,409,0,0,3045,3047,
        3,754,377,0,3046,3045,1,0,0,0,3046,3047,1,0,0,0,3047,3048,1,0,0,
        0,3048,3049,3,628,314,0,3049,155,1,0,0,0,3050,3051,5,51,0,0,3051,
        3053,5,592,0,0,3052,3054,3,754,377,0,3053,3052,1,0,0,0,3053,3054,
        1,0,0,0,3054,3055,1,0,0,0,3055,3056,3,702,351,0,3056,157,1,0,0,0,
        3057,3058,5,51,0,0,3058,3059,5,161,0,0,3059,3060,5,137,0,0,3060,
        3062,5,835,0,0,3061,3063,3,754,377,0,3062,3061,1,0,0,0,3062,3063,
        1,0,0,0,3063,3064,1,0,0,0,3064,3065,5,883,0,0,3065,159,1,0,0,0,3066,
        3068,5,51,0,0,3067,3069,5,660,0,0,3068,3067,1,0,0,0,3068,3069,1,
        0,0,0,3069,3070,1,0,0,0,3070,3072,5,173,0,0,3071,3073,3,754,377,
        0,3072,3071,1,0,0,0,3072,3073,1,0,0,0,3073,3074,1,0,0,0,3074,3076,
        3,646,323,0,3075,3077,7,42,0,0,3076,3075,1,0,0,0,3076,3077,1,0,0,
        0,3077,161,1,0,0,0,3078,3080,5,51,0,0,3079,3081,5,180,0,0,3080,3079,
        1,0,0,0,3080,3081,1,0,0,0,3081,3082,1,0,0,0,3082,3083,5,658,0,0,
        3083,3089,3,662,331,0,3084,3086,5,380,0,0,3085,3087,5,857,0,0,3086,
        3085,1,0,0,0,3086,3087,1,0,0,0,3087,3088,1,0,0,0,3088,3090,3,688,
        344,0,3089,3084,1,0,0,0,3089,3090,1,0,0,0,3090,163,1,0,0,0,3091,
        3092,5,51,0,0,3092,3094,5,178,0,0,3093,3095,3,754,377,0,3094,3093,
        1,0,0,0,3094,3095,1,0,0,0,3095,3096,1,0,0,0,3096,3097,3,698,349,
        0,3097,165,1,0,0,0,3098,3099,5,51,0,0,3099,3101,5,684,0,0,3100,3102,
        3,754,377,0,3101,3100,1,0,0,0,3101,3102,1,0,0,0,3102,3103,1,0,0,
        0,3103,3108,3,632,316,0,3104,3105,5,868,0,0,3105,3107,3,632,316,
        0,3106,3104,1,0,0,0,3107,3110,1,0,0,0,3108,3106,1,0,0,0,3108,3109,
        1,0,0,0,3109,3112,1,0,0,0,3110,3108,1,0,0,0,3111,3113,7,42,0,0,3112,
        3111,1,0,0,0,3112,3113,1,0,0,0,3113,167,1,0,0,0,3114,3115,5,51,0,
        0,3115,3117,5,582,0,0,3116,3118,3,754,377,0,3117,3116,1,0,0,0,3117,
        3118,1,0,0,0,3118,3119,1,0,0,0,3119,3120,3,650,325,0,3120,169,1,
        0,0,0,3121,3122,5,155,0,0,3122,3123,5,42,0,0,3123,3127,5,582,0,0,
        3124,3128,5,505,0,0,3125,3128,5,7,0,0,3126,3128,3,650,325,0,3127,
        3124,1,0,0,0,3127,3125,1,0,0,0,3127,3126,1,0,0,0,3128,3129,1,0,0,
        0,3129,3130,5,176,0,0,3130,3135,3,652,326,0,3131,3132,5,868,0,0,
        3132,3134,3,652,326,0,3133,3131,1,0,0,0,3134,3137,1,0,0,0,3135,3133,
        1,0,0,0,3135,3136,1,0,0,0,3136,3142,1,0,0,0,3137,3135,1,0,0,0,3138,
        3139,5,155,0,0,3139,3140,5,582,0,0,3140,3142,3,462,231,0,3141,3121,
        1,0,0,0,3141,3138,1,0,0,0,3142,171,1,0,0,0,3143,3144,5,141,0,0,3144,
        3145,5,173,0,0,3145,3150,3,174,87,0,3146,3147,5,868,0,0,3147,3149,
        3,174,87,0,3148,3146,1,0,0,0,3149,3152,1,0,0,0,3150,3148,1,0,0,0,
        3150,3151,1,0,0,0,3151,173,1,0,0,0,3152,3150,1,0,0,0,3153,3154,3,
        648,324,0,3154,3155,5,176,0,0,3155,3156,3,644,322,0,3156,175,1,0,
        0,0,3157,3159,5,668,0,0,3158,3160,5,173,0,0,3159,3158,1,0,0,0,3159,
        3160,1,0,0,0,3160,3161,1,0,0,0,3161,3162,3,648,324,0,3162,177,1,
        0,0,0,3163,3164,5,21,0,0,3164,3171,3,698,349,0,3165,3168,5,866,0,
        0,3166,3169,3,744,372,0,3167,3169,3,736,368,0,3168,3166,1,0,0,0,
        3168,3167,1,0,0,0,3168,3169,1,0,0,0,3169,3170,1,0,0,0,3170,3172,
        5,867,0,0,3171,3165,1,0,0,0,3171,3172,1,0,0,0,3172,179,1,0,0,0,3173,
        3176,3,234,117,0,3174,3176,3,236,118,0,3175,3173,1,0,0,0,3175,3174,
        1,0,0,0,3176,181,1,0,0,0,3177,3178,5,371,0,0,3178,3179,3,736,368,
        0,3179,183,1,0,0,0,3180,3185,3,238,119,0,3181,3185,3,240,120,0,3182,
        3185,3,242,121,0,3183,3185,3,244,122,0,3184,3180,1,0,0,0,3184,3181,
        1,0,0,0,3184,3182,1,0,0,0,3184,3183,1,0,0,0,3185,185,1,0,0,0,3186,
        3188,5,86,0,0,3187,3189,7,43,0,0,3188,3187,1,0,0,0,3188,3189,1,0,
        0,0,3189,3191,1,0,0,0,3190,3192,5,79,0,0,3191,3190,1,0,0,0,3191,
        3192,1,0,0,0,3192,3194,1,0,0,0,3193,3195,5,88,0,0,3194,3193,1,0,
        0,0,3194,3195,1,0,0,0,3195,3196,1,0,0,0,3196,3203,3,648,324,0,3197,
        3198,5,130,0,0,3198,3200,5,866,0,0,3199,3201,3,666,333,0,3200,3199,
        1,0,0,0,3200,3201,1,0,0,0,3201,3202,1,0,0,0,3202,3204,5,867,0,0,
        3203,3197,1,0,0,0,3203,3204,1,0,0,0,3204,3216,1,0,0,0,3205,3207,
        3,262,131,0,3206,3205,1,0,0,0,3206,3207,1,0,0,0,3207,3210,1,0,0,
        0,3208,3211,3,738,369,0,3209,3211,3,190,95,0,3210,3208,1,0,0,0,3210,
        3209,1,0,0,0,3210,3211,1,0,0,0,3211,3213,1,0,0,0,3212,3214,3,188,
        94,0,3213,3212,1,0,0,0,3213,3214,1,0,0,0,3214,3217,1,0,0,0,3215,
        3217,3,226,113,0,3216,3206,1,0,0,0,3216,3215,1,0,0,0,3217,3219,1,
        0,0,0,3218,3220,3,188,94,0,3219,3218,1,0,0,0,3219,3220,1,0,0,0,3220,
        3233,1,0,0,0,3221,3222,5,119,0,0,3222,3223,5,373,0,0,3223,3224,5,
        92,0,0,3224,3225,5,185,0,0,3225,3230,3,228,114,0,3226,3227,5,868,
        0,0,3227,3229,3,228,114,0,3228,3226,1,0,0,0,3229,3232,1,0,0,0,3230,
        3228,1,0,0,0,3230,3231,1,0,0,0,3231,3234,1,0,0,0,3232,3230,1,0,0,
        0,3233,3221,1,0,0,0,3233,3234,1,0,0,0,3234,187,1,0,0,0,3235,3236,
        5,13,0,0,3236,3238,3,702,351,0,3237,3239,3,262,131,0,3238,3237,1,
        0,0,0,3238,3239,1,0,0,0,3239,189,1,0,0,0,3240,3245,3,204,102,0,3241,
        3242,5,173,0,0,3242,3245,3,648,324,0,3243,3245,3,224,112,0,3244,
        3240,1,0,0,0,3244,3241,1,0,0,0,3244,3243,1,0,0,0,3245,191,1,0,0,
        0,3246,3252,3,194,97,0,3247,3249,5,828,0,0,3248,3250,7,44,0,0,3249,
        3248,1,0,0,0,3249,3250,1,0,0,0,3250,3251,1,0,0,0,3251,3253,3,194,
        97,0,3252,3247,1,0,0,0,3253,3254,1,0,0,0,3254,3252,1,0,0,0,3254,
        3255,1,0,0,0,3255,193,1,0,0,0,3256,3258,5,866,0,0,3257,3256,1,0,
        0,0,3257,3258,1,0,0,0,3258,3259,1,0,0,0,3259,3261,3,274,137,0,3260,
        3262,5,867,0,0,3261,3260,1,0,0,0,3261,3262,1,0,0,0,3262,195,1,0,
        0,0,3263,3264,5,103,0,0,3264,3266,5,360,0,0,3265,3267,7,45,0,0,3266,
        3265,1,0,0,0,3266,3267,1,0,0,0,3267,3269,1,0,0,0,3268,3270,5,450,
        0,0,3269,3268,1,0,0,0,3269,3270,1,0,0,0,3270,3271,1,0,0,0,3271,3272,
        5,83,0,0,3272,3274,5,882,0,0,3273,3275,7,6,0,0,3274,3273,1,0,0,0,
        3274,3275,1,0,0,0,3275,3276,1,0,0,0,3276,3277,5,88,0,0,3277,3278,
        5,173,0,0,3278,3284,3,648,324,0,3279,3280,5,130,0,0,3280,3281,5,
        866,0,0,3281,3282,3,666,333,0,3282,3283,5,867,0,0,3283,3285,1,0,
        0,0,3284,3279,1,0,0,0,3284,3285,1,0,0,0,3285,3289,1,0,0,0,3286,3287,
        5,26,0,0,3287,3288,5,155,0,0,3288,3290,3,684,342,0,3289,3286,1,0,
        0,0,3289,3290,1,0,0,0,3290,3297,1,0,0,0,3291,3293,7,46,0,0,3292,
        3294,3,298,149,0,3293,3292,1,0,0,0,3294,3295,1,0,0,0,3295,3293,1,
        0,0,0,3295,3296,1,0,0,0,3296,3298,1,0,0,0,3297,3291,1,0,0,0,3297,
        3298,1,0,0,0,3298,3305,1,0,0,0,3299,3301,5,102,0,0,3300,3302,3,300,
        150,0,3301,3300,1,0,0,0,3302,3303,1,0,0,0,3303,3301,1,0,0,0,3303,
        3304,1,0,0,0,3304,3306,1,0,0,0,3305,3299,1,0,0,0,3305,3306,1,0,0,
        0,3306,3311,1,0,0,0,3307,3308,5,79,0,0,3308,3309,3,708,354,0,3309,
        3310,7,47,0,0,3310,3312,1,0,0,0,3311,3307,1,0,0,0,3311,3312,1,0,
        0,0,3312,3324,1,0,0,0,3313,3314,5,866,0,0,3314,3319,3,230,115,0,
        3315,3316,5,868,0,0,3316,3318,3,230,115,0,3317,3315,1,0,0,0,3318,
        3321,1,0,0,0,3319,3317,1,0,0,0,3319,3320,1,0,0,0,3320,3322,1,0,0,
        0,3321,3319,1,0,0,0,3322,3323,5,867,0,0,3323,3325,1,0,0,0,3324,3313,
        1,0,0,0,3324,3325,1,0,0,0,3325,3335,1,0,0,0,3326,3327,5,155,0,0,
        3327,3332,3,228,114,0,3328,3329,5,868,0,0,3329,3331,3,228,114,0,
        3330,3328,1,0,0,0,3331,3334,1,0,0,0,3332,3330,1,0,0,0,3332,3333,
        1,0,0,0,3333,3336,1,0,0,0,3334,3332,1,0,0,0,3335,3326,1,0,0,0,3335,
        3336,1,0,0,0,3336,197,1,0,0,0,3337,3338,5,103,0,0,3338,3340,5,695,
        0,0,3339,3341,7,45,0,0,3340,3339,1,0,0,0,3340,3341,1,0,0,0,3341,
        3343,1,0,0,0,3342,3344,5,450,0,0,3343,3342,1,0,0,0,3343,3344,1,0,
        0,0,3344,3345,1,0,0,0,3345,3346,5,83,0,0,3346,3348,5,882,0,0,3347,
        3349,7,6,0,0,3348,3347,1,0,0,0,3348,3349,1,0,0,0,3349,3350,1,0,0,
        0,3350,3351,5,88,0,0,3351,3352,5,173,0,0,3352,3356,3,648,324,0,3353,
        3354,5,26,0,0,3354,3355,5,155,0,0,3355,3357,3,684,342,0,3356,3353,
        1,0,0,0,3356,3357,1,0,0,0,3357,3368,1,0,0,0,3358,3359,5,587,0,0,
        3359,3360,5,423,0,0,3360,3362,5,20,0,0,3361,3363,5,859,0,0,3362,
        3361,1,0,0,0,3362,3363,1,0,0,0,3363,3364,1,0,0,0,3364,3366,5,882,
        0,0,3365,3367,5,858,0,0,3366,3365,1,0,0,0,3366,3367,1,0,0,0,3367,
        3369,1,0,0,0,3368,3358,1,0,0,0,3368,3369,1,0,0,0,3369,3374,1,0,0,
        0,3370,3371,5,79,0,0,3371,3372,3,708,354,0,3372,3373,7,47,0,0,3373,
        3375,1,0,0,0,3374,3370,1,0,0,0,3374,3375,1,0,0,0,3375,3387,1,0,0,
        0,3376,3377,5,866,0,0,3377,3382,3,230,115,0,3378,3379,5,868,0,0,
        3379,3381,3,230,115,0,3380,3378,1,0,0,0,3381,3384,1,0,0,0,3382,3380,
        1,0,0,0,3382,3383,1,0,0,0,3383,3385,1,0,0,0,3384,3382,1,0,0,0,3385,
        3386,5,867,0,0,3386,3388,1,0,0,0,3387,3376,1,0,0,0,3387,3388,1,0,
        0,0,3388,3398,1,0,0,0,3389,3390,5,155,0,0,3390,3395,3,228,114,0,
        3391,3392,5,868,0,0,3392,3394,3,228,114,0,3393,3391,1,0,0,0,3394,
        3397,1,0,0,0,3395,3393,1,0,0,0,3395,3396,1,0,0,0,3396,3399,1,0,0,
        0,3397,3395,1,0,0,0,3398,3389,1,0,0,0,3398,3399,1,0,0,0,3399,199,
        1,0,0,0,3400,3401,5,866,0,0,3401,3403,3,218,109,0,3402,3404,3,252,
        126,0,3403,3402,1,0,0,0,3403,3404,1,0,0,0,3404,3406,1,0,0,0,3405,
        3407,3,312,156,0,3406,3405,1,0,0,0,3406,3407,1,0,0,0,3407,3408,1,
        0,0,0,3408,3410,5,867,0,0,3409,3411,3,252,126,0,3410,3409,1,0,0,
        0,3410,3411,1,0,0,0,3411,3413,1,0,0,0,3412,3414,3,312,156,0,3413,
        3412,1,0,0,0,3413,3414,1,0,0,0,3414,3416,1,0,0,0,3415,3417,3,296,
        148,0,3416,3415,1,0,0,0,3416,3417,1,0,0,0,3417,201,1,0,0,0,3418,
        3420,5,143,0,0,3419,3421,7,48,0,0,3420,3419,1,0,0,0,3420,3421,1,
        0,0,0,3421,3423,1,0,0,0,3422,3424,5,88,0,0,3423,3422,1,0,0,0,3423,
        3424,1,0,0,0,3424,3425,1,0,0,0,3425,3431,3,648,324,0,3426,3427,5,
        130,0,0,3427,3428,5,866,0,0,3428,3429,3,666,333,0,3429,3430,5,867,
        0,0,3430,3432,1,0,0,0,3431,3426,1,0,0,0,3431,3432,1,0,0,0,3432,3441,
        1,0,0,0,3433,3434,5,866,0,0,3434,3435,3,656,328,0,3435,3436,5,867,
        0,0,3436,3438,1,0,0,0,3437,3433,1,0,0,0,3437,3438,1,0,0,0,3438,3439,
        1,0,0,0,3439,3442,3,222,111,0,3440,3442,3,226,113,0,3441,3437,1,
        0,0,0,3441,3440,1,0,0,0,3442,203,1,0,0,0,3443,3447,3,274,137,0,3444,
        3446,3,276,138,0,3445,3444,1,0,0,0,3446,3449,1,0,0,0,3447,3445,1,
        0,0,0,3447,3448,1,0,0,0,3448,3458,1,0,0,0,3449,3447,1,0,0,0,3450,
        3452,5,181,0,0,3451,3453,7,44,0,0,3452,3451,1,0,0,0,3452,3453,1,
        0,0,0,3453,3456,1,0,0,0,3454,3457,3,274,137,0,3455,3457,3,272,136,
        0,3456,3454,1,0,0,0,3456,3455,1,0,0,0,3457,3459,1,0,0,0,3458,3450,
        1,0,0,0,3458,3459,1,0,0,0,3459,3464,1,0,0,0,3460,3461,5,868,0,0,
        3461,3463,3,278,139,0,3462,3460,1,0,0,0,3463,3466,1,0,0,0,3464,3462,
        1,0,0,0,3464,3465,1,0,0,0,3465,3468,1,0,0,0,3466,3464,1,0,0,0,3467,
        3469,3,252,126,0,3468,3467,1,0,0,0,3468,3469,1,0,0,0,3469,3471,1,
        0,0,0,3470,3472,3,312,156,0,3471,3470,1,0,0,0,3471,3472,1,0,0,0,
        3472,3474,1,0,0,0,3473,3475,3,232,116,0,3474,3473,1,0,0,0,3474,3475,
        1,0,0,0,3475,3477,1,0,0,0,3476,3478,3,296,148,0,3477,3476,1,0,0,
        0,3477,3478,1,0,0,0,3478,3503,1,0,0,0,3479,3483,3,272,136,0,3480,
        3482,3,276,138,0,3481,3480,1,0,0,0,3482,3485,1,0,0,0,3483,3481,1,
        0,0,0,3483,3484,1,0,0,0,3484,3491,1,0,0,0,3485,3483,1,0,0,0,3486,
        3488,5,181,0,0,3487,3489,7,44,0,0,3488,3487,1,0,0,0,3488,3489,1,
        0,0,0,3489,3490,1,0,0,0,3490,3492,3,272,136,0,3491,3486,1,0,0,0,
        3491,3492,1,0,0,0,3492,3494,1,0,0,0,3493,3495,3,252,126,0,3494,3493,
        1,0,0,0,3494,3495,1,0,0,0,3495,3497,1,0,0,0,3496,3498,3,312,156,
        0,3497,3496,1,0,0,0,3497,3498,1,0,0,0,3498,3500,1,0,0,0,3499,3501,
        3,232,116,0,3500,3499,1,0,0,0,3500,3501,1,0,0,0,3501,3503,1,0,0,
        0,3502,3443,1,0,0,0,3502,3479,1,0,0,0,3503,205,1,0,0,0,3504,3506,
        3,46,23,0,3505,3504,1,0,0,0,3505,3506,1,0,0,0,3506,3507,1,0,0,0,
        3507,3509,3,208,104,0,3508,3510,3,252,126,0,3509,3508,1,0,0,0,3509,
        3510,1,0,0,0,3510,3512,1,0,0,0,3511,3513,3,312,156,0,3512,3511,1,
        0,0,0,3512,3513,1,0,0,0,3513,3515,1,0,0,0,3514,3516,3,296,148,0,
        3515,3514,1,0,0,0,3515,3516,1,0,0,0,3516,207,1,0,0,0,3517,3518,6,
        104,-1,0,3518,3519,3,210,105,0,3519,3534,1,0,0,0,3520,3521,10,2,
        0,0,3521,3523,5,181,0,0,3522,3524,7,44,0,0,3523,3522,1,0,0,0,3523,
        3524,1,0,0,0,3524,3525,1,0,0,0,3525,3533,3,210,105,0,3526,3527,10,
        1,0,0,3527,3529,5,59,0,0,3528,3530,7,44,0,0,3529,3528,1,0,0,0,3529,
        3530,1,0,0,0,3530,3531,1,0,0,0,3531,3533,3,210,105,0,3532,3520,1,
        0,0,0,3532,3526,1,0,0,0,3533,3536,1,0,0,0,3534,3532,1,0,0,0,3534,
        3535,1,0,0,0,3535,209,1,0,0,0,3536,3534,1,0,0,0,3537,3538,6,105,
        -1,0,3538,3539,3,212,106,0,3539,3548,1,0,0,0,3540,3541,10,1,0,0,
        3541,3543,5,828,0,0,3542,3544,7,44,0,0,3543,3542,1,0,0,0,3543,3544,
        1,0,0,0,3544,3545,1,0,0,0,3545,3547,3,212,106,0,3546,3540,1,0,0,
        0,3547,3550,1,0,0,0,3548,3546,1,0,0,0,3548,3549,1,0,0,0,3549,211,
        1,0,0,0,3550,3548,1,0,0,0,3551,3566,3,220,110,0,3552,3553,5,866,
        0,0,3553,3555,3,208,104,0,3554,3556,3,252,126,0,3555,3554,1,0,0,
        0,3555,3556,1,0,0,0,3556,3558,1,0,0,0,3557,3559,3,312,156,0,3558,
        3557,1,0,0,0,3558,3559,1,0,0,0,3559,3561,1,0,0,0,3560,3562,3,296,
        148,0,3561,3560,1,0,0,0,3561,3562,1,0,0,0,3562,3563,1,0,0,0,3563,
        3564,5,867,0,0,3564,3566,1,0,0,0,3565,3551,1,0,0,0,3565,3552,1,0,
        0,0,3566,213,1,0,0,0,3567,3570,3,248,124,0,3568,3570,3,250,125,0,
        3569,3567,1,0,0,0,3569,3568,1,0,0,0,3570,215,1,0,0,0,3571,3575,3,
        224,112,0,3572,3573,5,125,0,0,3573,3574,5,20,0,0,3574,3576,3,670,
        335,0,3575,3572,1,0,0,0,3575,3576,1,0,0,0,3576,3579,1,0,0,0,3577,
        3578,5,100,0,0,3578,3580,3,314,157,0,3579,3577,1,0,0,0,3579,3580,
        1,0,0,0,3580,217,1,0,0,0,3581,3586,3,220,110,0,3582,3583,7,49,0,
        0,3583,3585,3,220,110,0,3584,3582,1,0,0,0,3585,3588,1,0,0,0,3586,
        3584,1,0,0,0,3586,3587,1,0,0,0,3587,3590,1,0,0,0,3588,3586,1,0,0,
        0,3589,3591,3,252,126,0,3590,3589,1,0,0,0,3590,3591,1,0,0,0,3591,
        3593,1,0,0,0,3592,3594,3,312,156,0,3593,3592,1,0,0,0,3593,3594,1,
        0,0,0,3594,3596,1,0,0,0,3595,3597,3,296,148,0,3596,3595,1,0,0,0,
        3596,3597,1,0,0,0,3597,219,1,0,0,0,3598,3602,3,204,102,0,3599,3602,
        3,614,307,0,3600,3602,3,216,108,0,3601,3598,1,0,0,0,3601,3599,1,
        0,0,0,3601,3600,1,0,0,0,3602,221,1,0,0,0,3603,3609,3,204,102,0,3604,
        3605,5,173,0,0,3605,3609,3,648,324,0,3606,3609,3,738,369,0,3607,
        3609,3,224,112,0,3608,3603,1,0,0,0,3608,3604,1,0,0,0,3608,3606,1,
        0,0,0,3608,3607,1,0,0,0,3609,223,1,0,0,0,3610,3611,5,189,0,0,3611,
        3612,5,586,0,0,3612,3618,3,740,370,0,3613,3614,5,868,0,0,3614,3615,
        5,586,0,0,3615,3617,3,740,370,0,3616,3613,1,0,0,0,3617,3620,1,0,
        0,0,3618,3616,1,0,0,0,3618,3619,1,0,0,0,3619,225,1,0,0,0,3620,3618,
        1,0,0,0,3621,3622,5,155,0,0,3622,3627,3,228,114,0,3623,3624,5,868,
        0,0,3624,3626,3,228,114,0,3625,3623,1,0,0,0,3626,3629,1,0,0,0,3627,
        3625,1,0,0,0,3627,3628,1,0,0,0,3628,227,1,0,0,0,3629,3627,1,0,0,
        0,3630,3631,3,658,329,0,3631,3632,5,857,0,0,3632,3633,3,742,371,
        0,3633,229,1,0,0,0,3634,3637,3,702,351,0,3635,3637,5,892,0,0,3636,
        3634,1,0,0,0,3636,3635,1,0,0,0,3637,231,1,0,0,0,3638,3639,5,65,0,
        0,3639,3649,7,50,0,0,3640,3641,5,510,0,0,3641,3646,3,648,324,0,3642,
        3643,5,868,0,0,3643,3645,3,648,324,0,3644,3642,1,0,0,0,3645,3648,
        1,0,0,0,3646,3644,1,0,0,0,3646,3647,1,0,0,0,3647,3650,1,0,0,0,3648,
        3646,1,0,0,0,3649,3640,1,0,0,0,3649,3650,1,0,0,0,3650,3653,1,0,0,
        0,3651,3652,7,51,0,0,3652,3654,5,105,0,0,3653,3651,1,0,0,0,3653,
        3654,1,0,0,0,3654,3660,1,0,0,0,3655,3656,5,104,0,0,3656,3657,5,80,
        0,0,3657,3658,5,594,0,0,3658,3660,5,491,0,0,3659,3638,1,0,0,0,3659,
        3655,1,0,0,0,3660,233,1,0,0,0,3661,3663,5,44,0,0,3662,3664,5,107,
        0,0,3663,3662,1,0,0,0,3663,3664,1,0,0,0,3664,3666,1,0,0,0,3665,3667,
        5,549,0,0,3666,3665,1,0,0,0,3666,3667,1,0,0,0,3667,3669,1,0,0,0,
        3668,3670,5,79,0,0,3669,3668,1,0,0,0,3669,3670,1,0,0,0,3670,3671,
        1,0,0,0,3671,3672,5,68,0,0,3672,3677,3,648,324,0,3673,3675,5,13,
        0,0,3674,3673,1,0,0,0,3674,3675,1,0,0,0,3675,3676,1,0,0,0,3676,3678,
        3,702,351,0,3677,3674,1,0,0,0,3677,3678,1,0,0,0,3678,3684,1,0,0,
        0,3679,3680,5,130,0,0,3680,3681,5,866,0,0,3681,3682,3,666,333,0,
        3682,3683,5,867,0,0,3683,3685,1,0,0,0,3684,3679,1,0,0,0,3684,3685,
        1,0,0,0,3685,3688,1,0,0,0,3686,3687,5,192,0,0,3687,3689,3,800,400,
        0,3688,3686,1,0,0,0,3688,3689,1,0,0,0,3689,3691,1,0,0,0,3690,3692,
        3,252,126,0,3691,3690,1,0,0,0,3691,3692,1,0,0,0,3692,3695,1,0,0,
        0,3693,3694,5,100,0,0,3694,3696,3,314,157,0,3695,3693,1,0,0,0,3695,
        3696,1,0,0,0,3696,235,1,0,0,0,3697,3699,5,44,0,0,3698,3700,5,107,
        0,0,3699,3698,1,0,0,0,3699,3700,1,0,0,0,3700,3702,1,0,0,0,3701,3703,
        5,549,0,0,3702,3701,1,0,0,0,3702,3703,1,0,0,0,3703,3705,1,0,0,0,
        3704,3706,5,79,0,0,3705,3704,1,0,0,0,3705,3706,1,0,0,0,3706,3746,
        1,0,0,0,3707,3710,3,648,324,0,3708,3709,5,865,0,0,3709,3711,5,850,
        0,0,3710,3708,1,0,0,0,3710,3711,1,0,0,0,3711,3720,1,0,0,0,3712,3713,
        5,868,0,0,3713,3716,3,648,324,0,3714,3715,5,865,0,0,3715,3717,5,
        850,0,0,3716,3714,1,0,0,0,3716,3717,1,0,0,0,3717,3719,1,0,0,0,3718,
        3712,1,0,0,0,3719,3722,1,0,0,0,3720,3718,1,0,0,0,3720,3721,1,0,0,
        0,3721,3723,1,0,0,0,3722,3720,1,0,0,0,3723,3724,5,68,0,0,3724,3725,
        3,256,128,0,3725,3747,1,0,0,0,3726,3727,5,68,0,0,3727,3730,3,648,
        324,0,3728,3729,5,865,0,0,3729,3731,5,850,0,0,3730,3728,1,0,0,0,
        3730,3731,1,0,0,0,3731,3740,1,0,0,0,3732,3733,5,868,0,0,3733,3736,
        3,648,324,0,3734,3735,5,865,0,0,3735,3737,5,850,0,0,3736,3734,1,
        0,0,0,3736,3737,1,0,0,0,3737,3739,1,0,0,0,3738,3732,1,0,0,0,3739,
        3742,1,0,0,0,3740,3738,1,0,0,0,3740,3741,1,0,0,0,3741,3743,1,0,0,
        0,3742,3740,1,0,0,0,3743,3744,5,188,0,0,3744,3745,3,256,128,0,3745,
        3747,1,0,0,0,3746,3707,1,0,0,0,3746,3726,1,0,0,0,3747,3750,1,0,0,
        0,3748,3749,5,192,0,0,3749,3751,3,800,400,0,3750,3748,1,0,0,0,3750,
        3751,1,0,0,0,3751,237,1,0,0,0,3752,3753,5,417,0,0,3753,3754,3,648,
        324,0,3754,3759,5,516,0,0,3755,3757,5,13,0,0,3756,3755,1,0,0,0,3756,
        3757,1,0,0,0,3757,3758,1,0,0,0,3758,3760,3,702,351,0,3759,3756,1,
        0,0,0,3759,3760,1,0,0,0,3760,239,1,0,0,0,3761,3762,5,417,0,0,3762,
        3763,3,648,324,0,3763,3764,5,135,0,0,3764,3771,3,638,319,0,3765,
        3766,3,810,405,0,3766,3767,5,866,0,0,3767,3768,3,744,372,0,3768,
        3769,5,867,0,0,3769,3772,1,0,0,0,3770,3772,7,52,0,0,3771,3765,1,
        0,0,0,3771,3770,1,0,0,0,3772,3775,1,0,0,0,3773,3774,5,192,0,0,3774,
        3776,3,800,400,0,3775,3773,1,0,0,0,3775,3776,1,0,0,0,3776,3779,1,
        0,0,0,3777,3778,5,100,0,0,3778,3780,3,314,157,0,3779,3777,1,0,0,
        0,3779,3780,1,0,0,0,3780,241,1,0,0,0,3781,3782,5,417,0,0,3782,3783,
        3,648,324,0,3783,3784,5,135,0,0,3784,3787,7,53,0,0,3785,3786,5,192,
        0,0,3786,3788,3,800,400,0,3787,3785,1,0,0,0,3787,3788,1,0,0,0,3788,
        3791,1,0,0,0,3789,3790,5,100,0,0,3790,3792,3,314,157,0,3791,3789,
        1,0,0,0,3791,3792,1,0,0,0,3792,243,1,0,0,0,3793,3794,5,417,0,0,3794,
        3795,3,648,324,0,3795,3796,5,334,0,0,3796,245,1,0,0,0,3797,3798,
        5,425,0,0,3798,3799,5,173,0,0,3799,3800,5,68,0,0,3800,3805,3,712,
        356,0,3801,3802,5,868,0,0,3802,3804,3,712,356,0,3803,3801,1,0,0,
        0,3804,3807,1,0,0,0,3805,3803,1,0,0,0,3805,3806,1,0,0,0,3806,247,
        1,0,0,0,3807,3805,1,0,0,0,3808,3810,5,185,0,0,3809,3811,5,107,0,
        0,3810,3809,1,0,0,0,3810,3811,1,0,0,0,3811,3813,1,0,0,0,3812,3814,
        5,79,0,0,3813,3812,1,0,0,0,3813,3814,1,0,0,0,3814,3815,1,0,0,0,3815,
        3820,3,648,324,0,3816,3818,5,13,0,0,3817,3816,1,0,0,0,3817,3818,
        1,0,0,0,3818,3819,1,0,0,0,3819,3821,3,702,351,0,3820,3817,1,0,0,
        0,3820,3821,1,0,0,0,3821,3822,1,0,0,0,3822,3823,5,155,0,0,3823,3828,
        3,228,114,0,3824,3825,5,868,0,0,3825,3827,3,228,114,0,3826,3824,
        1,0,0,0,3827,3830,1,0,0,0,3828,3826,1,0,0,0,3828,3829,1,0,0,0,3829,
        3833,1,0,0,0,3830,3828,1,0,0,0,3831,3832,5,192,0,0,3832,3834,3,800,
        400,0,3833,3831,1,0,0,0,3833,3834,1,0,0,0,3834,3836,1,0,0,0,3835,
        3837,3,252,126,0,3836,3835,1,0,0,0,3836,3837,1,0,0,0,3837,3839,1,
        0,0,0,3838,3840,3,312,156,0,3839,3838,1,0,0,0,3839,3840,1,0,0,0,
        3840,249,1,0,0,0,3841,3843,5,185,0,0,3842,3844,5,107,0,0,3843,3842,
        1,0,0,0,3843,3844,1,0,0,0,3844,3846,1,0,0,0,3845,3847,5,79,0,0,3846,
        3845,1,0,0,0,3846,3847,1,0,0,0,3847,3848,1,0,0,0,3848,3849,3,256,
        128,0,3849,3850,5,155,0,0,3850,3855,3,228,114,0,3851,3852,5,868,
        0,0,3852,3854,3,228,114,0,3853,3851,1,0,0,0,3854,3857,1,0,0,0,3855,
        3853,1,0,0,0,3855,3856,1,0,0,0,3856,3860,1,0,0,0,3857,3855,1,0,0,
        0,3858,3859,5,192,0,0,3859,3861,3,800,400,0,3860,3858,1,0,0,0,3860,
        3861,1,0,0,0,3861,251,1,0,0,0,3862,3863,5,125,0,0,3863,3864,5,20,
        0,0,3864,3869,3,254,127,0,3865,3866,5,868,0,0,3866,3868,3,254,127,
        0,3867,3865,1,0,0,0,3868,3871,1,0,0,0,3869,3867,1,0,0,0,3869,3870,
        1,0,0,0,3870,253,1,0,0,0,3871,3869,1,0,0,0,3872,3874,3,800,400,0,
        3873,3875,7,54,0,0,3874,3873,1,0,0,0,3874,3875,1,0,0,0,3875,255,
        1,0,0,0,3876,3881,3,258,129,0,3877,3878,5,868,0,0,3878,3880,3,258,
        129,0,3879,3877,1,0,0,0,3880,3883,1,0,0,0,3881,3879,1,0,0,0,3881,
        3882,1,0,0,0,3882,257,1,0,0,0,3883,3881,1,0,0,0,3884,3888,3,260,
        130,0,3885,3887,3,268,134,0,3886,3885,1,0,0,0,3887,3890,1,0,0,0,
        3888,3886,1,0,0,0,3888,3889,1,0,0,0,3889,3903,1,0,0,0,3890,3888,
        1,0,0,0,3891,3892,5,866,0,0,3892,3896,3,260,130,0,3893,3895,3,268,
        134,0,3894,3893,1,0,0,0,3895,3898,1,0,0,0,3896,3894,1,0,0,0,3896,
        3897,1,0,0,0,3897,3899,1,0,0,0,3898,3896,1,0,0,0,3899,3900,5,867,
        0,0,3900,3903,1,0,0,0,3901,3903,3,280,140,0,3902,3884,1,0,0,0,3902,
        3891,1,0,0,0,3902,3901,1,0,0,0,3903,259,1,0,0,0,3904,3910,3,648,
        324,0,3905,3906,5,130,0,0,3906,3907,5,866,0,0,3907,3908,3,666,333,
        0,3908,3909,5,867,0,0,3909,3911,1,0,0,0,3910,3905,1,0,0,0,3910,3911,
        1,0,0,0,3911,3916,1,0,0,0,3912,3914,5,13,0,0,3913,3912,1,0,0,0,3913,
        3914,1,0,0,0,3914,3915,1,0,0,0,3915,3917,3,702,351,0,3916,3913,1,
        0,0,0,3916,3917,1,0,0,0,3917,3926,1,0,0,0,3918,3923,3,264,132,0,
        3919,3920,5,868,0,0,3920,3922,3,264,132,0,3921,3919,1,0,0,0,3922,
        3925,1,0,0,0,3923,3921,1,0,0,0,3923,3924,1,0,0,0,3924,3927,1,0,0,
        0,3925,3923,1,0,0,0,3926,3918,1,0,0,0,3926,3927,1,0,0,0,3927,3950,
        1,0,0,0,3928,3930,5,95,0,0,3929,3928,1,0,0,0,3929,3930,1,0,0,0,3930,
        3936,1,0,0,0,3931,3937,3,204,102,0,3932,3933,5,866,0,0,3933,3934,
        3,204,102,0,3934,3935,5,867,0,0,3935,3937,1,0,0,0,3936,3931,1,0,
        0,0,3936,3932,1,0,0,0,3937,3939,1,0,0,0,3938,3940,5,13,0,0,3939,
        3938,1,0,0,0,3939,3940,1,0,0,0,3940,3941,1,0,0,0,3941,3943,3,702,
        351,0,3942,3944,3,262,131,0,3943,3942,1,0,0,0,3943,3944,1,0,0,0,
        3944,3950,1,0,0,0,3945,3946,5,866,0,0,3946,3947,3,256,128,0,3947,
        3948,5,867,0,0,3948,3950,1,0,0,0,3949,3904,1,0,0,0,3949,3929,1,0,
        0,0,3949,3945,1,0,0,0,3950,261,1,0,0,0,3951,3952,5,866,0,0,3952,
        3953,3,656,328,0,3953,3954,5,867,0,0,3954,263,1,0,0,0,3955,3956,
        7,55,0,0,3956,3959,7,18,0,0,3957,3958,5,65,0,0,3958,3960,3,266,133,
        0,3959,3957,1,0,0,0,3959,3960,1,0,0,0,3960,3961,1,0,0,0,3961,3963,
        5,866,0,0,3962,3964,3,636,318,0,3963,3962,1,0,0,0,3963,3964,1,0,
        0,0,3964,3965,1,0,0,0,3965,3966,5,867,0,0,3966,265,1,0,0,0,3967,
        3973,5,91,0,0,3968,3969,5,125,0,0,3969,3973,5,20,0,0,3970,3971,5,
        74,0,0,3971,3973,5,20,0,0,3972,3967,1,0,0,0,3972,3968,1,0,0,0,3972,
        3970,1,0,0,0,3973,267,1,0,0,0,3974,3976,7,56,0,0,3975,3974,1,0,0,
        0,3975,3976,1,0,0,0,3976,3977,1,0,0,0,3977,3979,5,91,0,0,3978,3980,
        5,95,0,0,3979,3978,1,0,0,0,3979,3980,1,0,0,0,3980,3981,1,0,0,0,3981,
        3985,3,260,130,0,3982,3984,3,270,135,0,3983,3982,1,0,0,0,3984,3987,
        1,0,0,0,3985,3983,1,0,0,0,3985,3986,1,0,0,0,3986,4024,1,0,0,0,3987,
        3985,1,0,0,0,3988,3989,5,172,0,0,3989,3993,3,260,130,0,3990,3992,
        3,270,135,0,3991,3990,1,0,0,0,3992,3995,1,0,0,0,3993,3991,1,0,0,
        0,3993,3994,1,0,0,0,3994,4024,1,0,0,0,3995,3993,1,0,0,0,3996,3998,
        7,57,0,0,3997,3999,5,127,0,0,3998,3997,1,0,0,0,3998,3999,1,0,0,0,
        3999,4000,1,0,0,0,4000,4002,5,91,0,0,4001,4003,5,95,0,0,4002,4001,
        1,0,0,0,4002,4003,1,0,0,0,4003,4004,1,0,0,0,4004,4008,3,260,130,
        0,4005,4007,3,270,135,0,4006,4005,1,0,0,0,4007,4010,1,0,0,0,4008,
        4006,1,0,0,0,4008,4009,1,0,0,0,4009,4024,1,0,0,0,4010,4008,1,0,0,
        0,4011,4019,5,113,0,0,4012,4015,5,84,0,0,4013,4015,7,57,0,0,4014,
        4012,1,0,0,0,4014,4013,1,0,0,0,4015,4017,1,0,0,0,4016,4018,5,127,
        0,0,4017,4016,1,0,0,0,4017,4018,1,0,0,0,4018,4020,1,0,0,0,4019,4014,
        1,0,0,0,4019,4020,1,0,0,0,4020,4021,1,0,0,0,4021,4022,5,91,0,0,4022,
        4024,3,260,130,0,4023,3975,1,0,0,0,4023,3988,1,0,0,0,4023,3996,1,
        0,0,0,4023,4011,1,0,0,0,4024,269,1,0,0,0,4025,4026,5,119,0,0,4026,
        4033,3,800,400,0,4027,4028,5,188,0,0,4028,4029,5,866,0,0,4029,4030,
        3,656,328,0,4030,4031,5,867,0,0,4031,4033,1,0,0,0,4032,4025,1,0,
        0,0,4032,4027,1,0,0,0,4033,271,1,0,0,0,4034,4035,5,866,0,0,4035,
        4036,3,274,137,0,4036,4037,5,867,0,0,4037,4043,1,0,0,0,4038,4039,
        5,866,0,0,4039,4040,3,272,136,0,4040,4041,5,867,0,0,4041,4043,1,
        0,0,0,4042,4034,1,0,0,0,4042,4038,1,0,0,0,4043,273,1,0,0,0,4044,
        4048,5,154,0,0,4045,4047,3,290,145,0,4046,4045,1,0,0,0,4047,4050,
        1,0,0,0,4048,4046,1,0,0,0,4048,4049,1,0,0,0,4049,4051,1,0,0,0,4050,
        4048,1,0,0,0,4051,4053,3,292,146,0,4052,4054,3,296,148,0,4053,4052,
        1,0,0,0,4053,4054,1,0,0,0,4054,4055,1,0,0,0,4055,4057,3,302,151,
        0,4056,4058,3,304,152,0,4057,4056,1,0,0,0,4057,4058,1,0,0,0,4058,
        4060,1,0,0,0,4059,4061,3,306,153,0,4060,4059,1,0,0,0,4060,4061,1,
        0,0,0,4061,4063,1,0,0,0,4062,4064,3,308,154,0,4063,4062,1,0,0,0,
        4063,4064,1,0,0,0,4064,4066,1,0,0,0,4065,4067,3,252,126,0,4066,4065,
        1,0,0,0,4066,4067,1,0,0,0,4067,4069,1,0,0,0,4068,4070,3,312,156,
        0,4069,4068,1,0,0,0,4069,4070,1,0,0,0,4070,4072,1,0,0,0,4071,4073,
        3,296,148,0,4072,4071,1,0,0,0,4072,4073,1,0,0,0,4073,275,1,0,0,0,
        4074,4076,5,181,0,0,4075,4077,7,44,0,0,4076,4075,1,0,0,0,4076,4077,
        1,0,0,0,4077,4080,1,0,0,0,4078,4081,3,274,137,0,4079,4081,3,272,
        136,0,4080,4078,1,0,0,0,4080,4079,1,0,0,0,4081,277,1,0,0,0,4082,
        4097,5,95,0,0,4083,4098,3,274,137,0,4084,4098,3,272,136,0,4085,4088,
        5,866,0,0,4086,4089,3,274,137,0,4087,4089,3,272,136,0,4088,4086,
        1,0,0,0,4088,4087,1,0,0,0,4089,4090,1,0,0,0,4090,4095,5,867,0,0,
        4091,4093,5,13,0,0,4092,4091,1,0,0,0,4092,4093,1,0,0,0,4093,4094,
        1,0,0,0,4094,4096,3,702,351,0,4095,4092,1,0,0,0,4095,4096,1,0,0,
        0,4096,4098,1,0,0,0,4097,4083,1,0,0,0,4097,4084,1,0,0,0,4097,4085,
        1,0,0,0,4098,279,1,0,0,0,4099,4100,5,253,0,0,4100,4101,5,866,0,0,
        4101,4102,5,882,0,0,4102,4103,5,868,0,0,4103,4104,5,882,0,0,4104,
        4105,5,337,0,0,4105,4106,5,866,0,0,4106,4107,3,282,141,0,4107,4108,
        5,867,0,0,4108,4113,5,867,0,0,4109,4111,5,13,0,0,4110,4109,1,0,0,
        0,4110,4111,1,0,0,0,4111,4112,1,0,0,0,4112,4114,3,702,351,0,4113,
        4110,1,0,0,0,4113,4114,1,0,0,0,4114,281,1,0,0,0,4115,4120,3,284,
        142,0,4116,4117,5,868,0,0,4117,4119,3,284,142,0,4118,4116,1,0,0,
        0,4119,4122,1,0,0,0,4120,4118,1,0,0,0,4120,4121,1,0,0,0,4121,283,
        1,0,0,0,4122,4120,1,0,0,0,4123,4140,3,658,329,0,4124,4125,5,65,0,
        0,4125,4141,5,256,0,0,4126,4138,3,722,361,0,4127,4128,5,257,0,0,
        4128,4130,5,882,0,0,4129,4131,3,286,143,0,4130,4129,1,0,0,0,4130,
        4131,1,0,0,0,4131,4133,1,0,0,0,4132,4134,3,288,144,0,4133,4132,1,
        0,0,0,4133,4134,1,0,0,0,4134,4139,1,0,0,0,4135,4136,5,60,0,0,4136,
        4137,5,257,0,0,4137,4139,5,882,0,0,4138,4127,1,0,0,0,4138,4135,1,
        0,0,0,4139,4141,1,0,0,0,4140,4124,1,0,0,0,4140,4126,1,0,0,0,4141,
        4153,1,0,0,0,4142,4144,5,255,0,0,4143,4145,5,257,0,0,4144,4143,1,
        0,0,0,4144,4145,1,0,0,0,4145,4146,1,0,0,0,4146,4147,5,882,0,0,4147,
        4148,5,337,0,0,4148,4149,5,866,0,0,4149,4150,3,282,141,0,4150,4151,
        5,867,0,0,4151,4153,1,0,0,0,4152,4123,1,0,0,0,4152,4142,1,0,0,0,
        4153,285,1,0,0,0,4154,4159,5,116,0,0,4155,4159,5,382,0,0,4156,4157,
        5,42,0,0,4157,4159,3,750,375,0,4158,4154,1,0,0,0,4158,4155,1,0,0,
        0,4158,4156,1,0,0,0,4159,4160,1,0,0,0,4160,4161,5,119,0,0,4161,4162,
        5,55,0,0,4162,287,1,0,0,0,4163,4168,5,116,0,0,4164,4168,5,382,0,
        0,4165,4166,5,42,0,0,4166,4168,3,750,375,0,4167,4163,1,0,0,0,4167,
        4164,1,0,0,0,4167,4165,1,0,0,0,4168,4169,1,0,0,0,4169,4170,5,119,
        0,0,4170,4171,5,382,0,0,4171,289,1,0,0,0,4172,4181,7,58,0,0,4173,
        4181,5,76,0,0,4174,4181,5,172,0,0,4175,4181,5,168,0,0,4176,4181,
        5,166,0,0,4177,4181,5,636,0,0,4178,4181,7,59,0,0,4179,4181,5,167,
        0,0,4180,4172,1,0,0,0,4180,4173,1,0,0,0,4180,4174,1,0,0,0,4180,4175,
        1,0,0,0,4180,4176,1,0,0,0,4180,4177,1,0,0,0,4180,4178,1,0,0,0,4180,
        4179,1,0,0,0,4181,291,1,0,0,0,4182,4185,5,850,0,0,4183,4185,3,294,
        147,0,4184,4182,1,0,0,0,4184,4183,1,0,0,0,4185,4190,1,0,0,0,4186,
        4187,5,868,0,0,4187,4189,3,294,147,0,4188,4186,1,0,0,0,4189,4192,
        1,0,0,0,4190,4188,1,0,0,0,4190,4191,1,0,0,0,4191,293,1,0,0,0,4192,
        4190,1,0,0,0,4193,4194,5,892,0,0,4194,4196,5,841,0,0,4195,4193,1,
        0,0,0,4195,4196,1,0,0,0,4196,4197,1,0,0,0,4197,4202,3,800,400,0,
        4198,4200,5,13,0,0,4199,4198,1,0,0,0,4199,4200,1,0,0,0,4200,4201,
        1,0,0,0,4201,4203,3,702,351,0,4202,4199,1,0,0,0,4202,4203,1,0,0,
        0,4203,4223,1,0,0,0,4204,4209,3,760,380,0,4205,4207,5,13,0,0,4206,
        4205,1,0,0,0,4206,4207,1,0,0,0,4207,4208,1,0,0,0,4208,4210,3,702,
        351,0,4209,4206,1,0,0,0,4209,4210,1,0,0,0,4210,4223,1,0,0,0,4211,
        4212,3,698,349,0,4212,4213,5,865,0,0,4213,4214,5,850,0,0,4214,4223,
        1,0,0,0,4215,4220,3,658,329,0,4216,4218,5,13,0,0,4217,4216,1,0,0,
        0,4217,4218,1,0,0,0,4218,4219,1,0,0,0,4219,4221,3,702,351,0,4220,
        4217,1,0,0,0,4220,4221,1,0,0,0,4221,4223,1,0,0,0,4222,4195,1,0,0,
        0,4222,4204,1,0,0,0,4222,4211,1,0,0,0,4222,4215,1,0,0,0,4223,295,
        1,0,0,0,4224,4225,5,88,0,0,4225,4230,3,230,115,0,4226,4227,5,868,
        0,0,4227,4229,3,230,115,0,4228,4226,1,0,0,0,4229,4232,1,0,0,0,4230,
        4228,1,0,0,0,4230,4231,1,0,0,0,4231,4261,1,0,0,0,4232,4230,1,0,0,
        0,4233,4234,5,88,0,0,4234,4235,5,372,0,0,4235,4261,5,882,0,0,4236,
        4237,5,88,0,0,4237,4238,5,128,0,0,4238,4242,5,882,0,0,4239,4240,
        5,26,0,0,4240,4241,5,155,0,0,4241,4243,3,684,342,0,4242,4239,1,0,
        0,0,4242,4243,1,0,0,0,4243,4250,1,0,0,0,4244,4246,7,46,0,0,4245,
        4247,3,298,149,0,4246,4245,1,0,0,0,4247,4248,1,0,0,0,4248,4246,1,
        0,0,0,4248,4249,1,0,0,0,4249,4251,1,0,0,0,4250,4244,1,0,0,0,4250,
        4251,1,0,0,0,4251,4258,1,0,0,0,4252,4254,5,102,0,0,4253,4255,3,300,
        150,0,4254,4253,1,0,0,0,4255,4256,1,0,0,0,4256,4254,1,0,0,0,4256,
        4257,1,0,0,0,4257,4259,1,0,0,0,4258,4252,1,0,0,0,4258,4259,1,0,0,
        0,4259,4261,1,0,0,0,4260,4224,1,0,0,0,4260,4233,1,0,0,0,4260,4236,
        1,0,0,0,4261,297,1,0,0,0,4262,4263,5,174,0,0,4263,4264,5,20,0,0,
        4264,4275,5,882,0,0,4265,4267,5,123,0,0,4266,4265,1,0,0,0,4266,4267,
        1,0,0,0,4267,4268,1,0,0,0,4268,4269,5,56,0,0,4269,4270,5,20,0,0,
        4270,4275,5,882,0,0,4271,4272,5,58,0,0,4272,4273,5,20,0,0,4273,4275,
        5,882,0,0,4274,4262,1,0,0,0,4274,4266,1,0,0,0,4274,4271,1,0,0,0,
        4275,299,1,0,0,0,4276,4277,5,171,0,0,4277,4278,5,20,0,0,4278,4283,
        5,882,0,0,4279,4280,5,174,0,0,4280,4281,5,20,0,0,4281,4283,5,882,
        0,0,4282,4276,1,0,0,0,4282,4279,1,0,0,0,4283,301,1,0,0,0,4284,4285,
        5,68,0,0,4285,4287,3,256,128,0,4286,4284,1,0,0,0,4286,4287,1,0,0,
        0,4287,4290,1,0,0,0,4288,4289,5,192,0,0,4289,4291,3,800,400,0,4290,
        4288,1,0,0,0,4290,4291,1,0,0,0,4291,303,1,0,0,0,4292,4293,5,74,0,
        0,4293,4294,5,20,0,0,4294,4299,3,310,155,0,4295,4296,5,868,0,0,4296,
        4298,3,310,155,0,4297,4295,1,0,0,0,4298,4301,1,0,0,0,4299,4297,1,
        0,0,0,4299,4300,1,0,0,0,4300,4304,1,0,0,0,4301,4299,1,0,0,0,4302,
        4303,5,194,0,0,4303,4305,5,584,0,0,4304,4302,1,0,0,0,4304,4305,1,
        0,0,0,4305,305,1,0,0,0,4306,4307,5,75,0,0,4307,4308,3,800,400,0,
        4308,307,1,0,0,0,4309,4310,5,689,0,0,4310,4311,3,778,389,0,4311,
        4312,5,13,0,0,4312,4313,5,866,0,0,4313,4314,3,776,388,0,4314,4324,
        5,867,0,0,4315,4316,5,868,0,0,4316,4317,3,778,389,0,4317,4318,5,
        13,0,0,4318,4319,5,866,0,0,4319,4320,3,776,388,0,4320,4321,5,867,
        0,0,4321,4323,1,0,0,0,4322,4315,1,0,0,0,4323,4326,1,0,0,0,4324,4322,
        1,0,0,0,4324,4325,1,0,0,0,4325,309,1,0,0,0,4326,4324,1,0,0,0,4327,
        4329,3,800,400,0,4328,4330,7,54,0,0,4329,4328,1,0,0,0,4329,4330,
        1,0,0,0,4330,311,1,0,0,0,4331,4342,5,100,0,0,4332,4333,3,314,157,
        0,4333,4334,5,868,0,0,4334,4336,1,0,0,0,4335,4332,1,0,0,0,4335,4336,
        1,0,0,0,4336,4337,1,0,0,0,4337,4343,3,314,157,0,4338,4339,3,314,
        157,0,4339,4340,5,509,0,0,4340,4341,3,314,157,0,4341,4343,1,0,0,
        0,4342,4335,1,0,0,0,4342,4338,1,0,0,0,4343,313,1,0,0,0,4344,4348,
        3,708,354,0,4345,4348,3,682,341,0,4346,4348,3,704,352,0,4347,4344,
        1,0,0,0,4347,4345,1,0,0,0,4347,4346,1,0,0,0,4348,315,1,0,0,0,4349,
        4350,5,640,0,0,4350,4359,5,664,0,0,4351,4356,3,338,169,0,4352,4353,
        5,868,0,0,4353,4355,3,338,169,0,4354,4352,1,0,0,0,4355,4358,1,0,
        0,0,4356,4354,1,0,0,0,4356,4357,1,0,0,0,4357,4360,1,0,0,0,4358,4356,
        1,0,0,0,4359,4351,1,0,0,0,4359,4360,1,0,0,0,4360,317,1,0,0,0,4361,
        4363,5,317,0,0,4362,4364,5,691,0,0,4363,4362,1,0,0,0,4363,4364,1,
        0,0,0,4364,319,1,0,0,0,4365,4367,5,341,0,0,4366,4368,5,691,0,0,4367,
        4366,1,0,0,0,4367,4368,1,0,0,0,4368,4374,1,0,0,0,4369,4371,5,11,
        0,0,4370,4372,5,502,0,0,4371,4370,1,0,0,0,4371,4372,1,0,0,0,4372,
        4373,1,0,0,0,4373,4375,5,326,0,0,4374,4369,1,0,0,0,4374,4375,1,0,
        0,0,4375,4380,1,0,0,0,4376,4378,5,502,0,0,4377,4376,1,0,0,0,4377,
        4378,1,0,0,0,4378,4379,1,0,0,0,4379,4381,5,140,0,0,4380,4377,1,0,
        0,0,4380,4381,1,0,0,0,4381,321,1,0,0,0,4382,4384,5,583,0,0,4383,
        4385,5,691,0,0,4384,4383,1,0,0,0,4384,4385,1,0,0,0,4385,4391,1,0,
        0,0,4386,4388,5,11,0,0,4387,4389,5,502,0,0,4388,4387,1,0,0,0,4388,
        4389,1,0,0,0,4389,4390,1,0,0,0,4390,4392,5,326,0,0,4391,4386,1,0,
        0,0,4391,4392,1,0,0,0,4392,4397,1,0,0,0,4393,4395,5,502,0,0,4394,
        4393,1,0,0,0,4394,4395,1,0,0,0,4395,4396,1,0,0,0,4396,4398,5,140,
        0,0,4397,4394,1,0,0,0,4397,4398,1,0,0,0,4398,323,1,0,0,0,4399,4400,
        5,589,0,0,4400,4401,3,702,351,0,4401,325,1,0,0,0,4402,4404,5,583,
        0,0,4403,4405,5,691,0,0,4404,4403,1,0,0,0,4404,4405,1,0,0,0,4405,
        4406,1,0,0,0,4406,4408,5,176,0,0,4407,4409,5,589,0,0,4408,4407,1,
        0,0,0,4408,4409,1,0,0,0,4409,4410,1,0,0,0,4410,4411,3,702,351,0,
        4411,327,1,0,0,0,4412,4413,5,140,0,0,4413,4414,5,589,0,0,4414,4415,
        3,702,351,0,4415,329,1,0,0,0,4416,4417,5,104,0,0,4417,4418,7,60,
        0,0,4418,4423,3,340,170,0,4419,4420,5,868,0,0,4420,4422,3,340,170,
        0,4421,4419,1,0,0,0,4422,4425,1,0,0,0,4423,4421,1,0,0,0,4423,4424,
        1,0,0,0,4424,331,1,0,0,0,4425,4423,1,0,0,0,4426,4427,5,183,0,0,4427,
        4428,5,752,0,0,4428,333,1,0,0,0,4429,4430,5,155,0,0,4430,4431,5,
        313,0,0,4431,4432,5,857,0,0,4432,4433,7,25,0,0,4433,335,1,0,0,0,
        4434,4436,5,155,0,0,4435,4437,7,61,0,0,4436,4435,1,0,0,0,4436,4437,
        1,0,0,0,4437,4438,1,0,0,0,4438,4439,5,664,0,0,4439,4444,3,344,172,
        0,4440,4441,5,868,0,0,4441,4443,3,344,172,0,4442,4440,1,0,0,0,4443,
        4446,1,0,0,0,4444,4442,1,0,0,0,4444,4445,1,0,0,0,4445,337,1,0,0,
        0,4446,4444,1,0,0,0,4447,4448,5,194,0,0,4448,4449,5,350,0,0,4449,
        4455,5,600,0,0,4450,4451,5,135,0,0,4451,4455,5,195,0,0,4452,4453,
        5,135,0,0,4453,4455,5,515,0,0,4454,4447,1,0,0,0,4454,4450,1,0,0,
        0,4454,4452,1,0,0,0,4455,339,1,0,0,0,4456,4461,3,648,324,0,4457,
        4459,5,13,0,0,4458,4457,1,0,0,0,4458,4459,1,0,0,0,4459,4460,1,0,
        0,0,4460,4462,3,702,351,0,4461,4458,1,0,0,0,4461,4462,1,0,0,0,4462,
        4463,1,0,0,0,4463,4464,3,342,171,0,4464,341,1,0,0,0,4465,4467,5,
        135,0,0,4466,4468,5,450,0,0,4467,4466,1,0,0,0,4467,4468,1,0,0,0,
        4468,4474,1,0,0,0,4469,4471,5,107,0,0,4470,4469,1,0,0,0,4470,4471,
        1,0,0,0,4471,4472,1,0,0,0,4472,4474,5,195,0,0,4473,4465,1,0,0,0,
        4473,4470,1,0,0,0,4474,343,1,0,0,0,4475,4476,5,440,0,0,4476,4477,
        5,448,0,0,4477,4483,3,346,173,0,4478,4479,5,135,0,0,4479,4483,5,
        195,0,0,4480,4481,5,135,0,0,4481,4483,5,515,0,0,4482,4475,1,0,0,
        0,4482,4478,1,0,0,0,4482,4480,1,0,0,0,4483,345,1,0,0,0,4484,4485,
        5,809,0,0,4485,4492,5,135,0,0,4486,4487,5,135,0,0,4487,4492,5,810,
        0,0,4488,4489,5,135,0,0,4489,4492,5,811,0,0,4490,4492,5,812,0,0,
        4491,4484,1,0,0,0,4491,4486,1,0,0,0,4491,4488,1,0,0,0,4491,4490,
        1,0,0,0,4492,347,1,0,0,0,4493,4494,5,25,0,0,4494,4495,5,453,0,0,
        4495,4496,5,176,0,0,4496,4501,3,364,182,0,4497,4498,5,868,0,0,4498,
        4500,3,364,182,0,4499,4497,1,0,0,0,4500,4503,1,0,0,0,4501,4499,1,
        0,0,0,4501,4502,1,0,0,0,4502,4505,1,0,0,0,4503,4501,1,0,0,0,4504,
        4506,3,384,192,0,4505,4504,1,0,0,0,4505,4506,1,0,0,0,4506,349,1,
        0,0,0,4507,4508,5,25,0,0,4508,4509,5,572,0,0,4509,4510,5,400,0,0,
        4510,4515,3,386,193,0,4511,4512,5,868,0,0,4512,4514,3,386,193,0,
        4513,4511,1,0,0,0,4514,4517,1,0,0,0,4515,4513,1,0,0,0,4515,4516,
        1,0,0,0,4516,4519,1,0,0,0,4517,4515,1,0,0,0,4518,4520,3,384,192,
        0,4519,4518,1,0,0,0,4519,4520,1,0,0,0,4520,351,1,0,0,0,4521,4522,
        5,25,0,0,4522,4523,5,572,0,0,4523,4524,5,605,0,0,4524,4525,5,176,
        0,0,4525,4530,3,374,187,0,4526,4527,5,868,0,0,4527,4529,3,374,187,
        0,4528,4526,1,0,0,0,4529,4532,1,0,0,0,4530,4528,1,0,0,0,4530,4531,
        1,0,0,0,4531,4534,1,0,0,0,4532,4530,1,0,0,0,4533,4535,3,384,192,
        0,4534,4533,1,0,0,0,4534,4535,1,0,0,0,4535,353,1,0,0,0,4536,4537,
        5,133,0,0,4537,4538,7,62,0,0,4538,4543,5,452,0,0,4539,4540,5,176,
        0,0,4540,4544,5,882,0,0,4541,4542,5,16,0,0,4542,4544,5,882,0,0,4543,
        4539,1,0,0,0,4543,4541,1,0,0,0,4544,355,1,0,0,0,4545,4546,5,640,
        0,0,4546,4555,7,63,0,0,4547,4552,3,390,195,0,4548,4549,5,868,0,0,
        4549,4551,3,390,195,0,4550,4548,1,0,0,0,4551,4554,1,0,0,0,4552,4550,
        1,0,0,0,4552,4553,1,0,0,0,4553,4556,1,0,0,0,4554,4552,1,0,0,0,4555,
        4547,1,0,0,0,4555,4556,1,0,0,0,4556,4559,1,0,0,0,4557,4558,5,676,
        0,0,4558,4560,3,392,196,0,4559,4557,1,0,0,0,4559,4560,1,0,0,0,4560,
        4564,1,0,0,0,4561,4563,3,394,197,0,4562,4561,1,0,0,0,4563,4566,1,
        0,0,0,4564,4562,1,0,0,0,4564,4565,1,0,0,0,4565,4568,1,0,0,0,4566,
        4564,1,0,0,0,4567,4569,3,384,192,0,4568,4567,1,0,0,0,4568,4569,1,
        0,0,0,4569,357,1,0,0,0,4570,4571,5,646,0,0,4571,4580,7,63,0,0,4572,
        4577,3,390,195,0,4573,4574,5,868,0,0,4574,4576,3,390,195,0,4575,
        4573,1,0,0,0,4576,4579,1,0,0,0,4577,4575,1,0,0,0,4577,4578,1,0,0,
        0,4578,4581,1,0,0,0,4579,4577,1,0,0,0,4580,4572,1,0,0,0,4580,4581,
        1,0,0,0,4581,4583,1,0,0,0,4582,4584,3,384,192,0,4583,4582,1,0,0,
        0,4583,4584,1,0,0,0,4584,359,1,0,0,0,4585,4586,5,640,0,0,4586,4590,
        5,415,0,0,4587,4588,5,678,0,0,4588,4589,5,857,0,0,4589,4591,5,882,
        0,0,4590,4587,1,0,0,0,4590,4591,1,0,0,0,4591,4596,1,0,0,0,4592,4593,
        5,868,0,0,4593,4594,5,529,0,0,4594,4595,5,857,0,0,4595,4597,5,882,
        0,0,4596,4592,1,0,0,0,4596,4597,1,0,0,0,4597,4602,1,0,0,0,4598,4599,
        5,868,0,0,4599,4600,5,363,0,0,4600,4601,5,857,0,0,4601,4603,5,882,
        0,0,4602,4598,1,0,0,0,4602,4603,1,0,0,0,4603,361,1,0,0,0,4604,4605,
        5,646,0,0,4605,4606,5,415,0,0,4606,363,1,0,0,0,4607,4608,3,366,183,
        0,4608,4609,5,857,0,0,4609,4610,5,882,0,0,4610,4635,1,0,0,0,4611,
        4612,3,368,184,0,4612,4613,5,857,0,0,4613,4614,3,708,354,0,4614,
        4635,1,0,0,0,4615,4616,3,370,185,0,4616,4617,5,857,0,0,4617,4618,
        7,25,0,0,4618,4635,1,0,0,0,4619,4635,3,372,186,0,4620,4621,5,424,
        0,0,4621,4622,5,857,0,0,4622,4631,5,866,0,0,4623,4628,3,702,351,
        0,4624,4625,5,868,0,0,4625,4627,3,702,351,0,4626,4624,1,0,0,0,4627,
        4630,1,0,0,0,4628,4626,1,0,0,0,4628,4629,1,0,0,0,4629,4632,1,0,0,
        0,4630,4628,1,0,0,0,4631,4623,1,0,0,0,4631,4632,1,0,0,0,4632,4633,
        1,0,0,0,4633,4635,5,867,0,0,4634,4607,1,0,0,0,4634,4611,1,0,0,0,
        4634,4615,1,0,0,0,4634,4619,1,0,0,0,4634,4620,1,0,0,0,4635,365,1,
        0,0,0,4636,4637,7,64,0,0,4637,367,1,0,0,0,4638,4639,7,65,0,0,4639,
        369,1,0,0,0,4640,4641,7,66,0,0,4641,371,1,0,0,0,4642,4643,5,543,
        0,0,4643,4644,5,857,0,0,4644,4656,7,67,0,0,4645,4646,5,574,0,0,4646,
        4647,5,857,0,0,4647,4656,7,68,0,0,4648,4649,5,310,0,0,4649,4653,
        5,857,0,0,4650,4654,5,507,0,0,4651,4654,5,450,0,0,4652,4654,3,396,
        198,0,4653,4650,1,0,0,0,4653,4651,1,0,0,0,4653,4652,1,0,0,0,4654,
        4656,1,0,0,0,4655,4642,1,0,0,0,4655,4645,1,0,0,0,4655,4648,1,0,0,
        0,4656,373,1,0,0,0,4657,4658,3,376,188,0,4658,4659,5,857,0,0,4659,
        4660,5,882,0,0,4660,4685,1,0,0,0,4661,4662,3,378,189,0,4662,4663,
        5,857,0,0,4663,4664,3,708,354,0,4664,4685,1,0,0,0,4665,4666,3,380,
        190,0,4666,4667,5,857,0,0,4667,4668,7,25,0,0,4668,4685,1,0,0,0,4669,
        4685,3,382,191,0,4670,4671,5,424,0,0,4671,4672,5,857,0,0,4672,4681,
        5,866,0,0,4673,4678,3,702,351,0,4674,4675,5,868,0,0,4675,4677,3,
        702,351,0,4676,4674,1,0,0,0,4677,4680,1,0,0,0,4678,4676,1,0,0,0,
        4678,4679,1,0,0,0,4679,4682,1,0,0,0,4680,4678,1,0,0,0,4681,4673,
        1,0,0,0,4681,4682,1,0,0,0,4682,4683,1,0,0,0,4683,4685,5,867,0,0,
        4684,4657,1,0,0,0,4684,4661,1,0,0,0,4684,4665,1,0,0,0,4684,4669,
        1,0,0,0,4684,4670,1,0,0,0,4685,375,1,0,0,0,4686,4687,7,69,0,0,4687,
        377,1,0,0,0,4688,4689,7,70,0,0,4689,379,1,0,0,0,4690,4691,7,71,0,
        0,4691,381,1,0,0,0,4692,4693,5,543,0,0,4693,4694,5,857,0,0,4694,
        4706,7,67,0,0,4695,4696,5,574,0,0,4696,4697,5,857,0,0,4697,4706,
        7,72,0,0,4698,4699,5,310,0,0,4699,4703,5,857,0,0,4700,4704,5,507,
        0,0,4701,4704,5,450,0,0,4702,4704,3,396,198,0,4703,4700,1,0,0,0,
        4703,4701,1,0,0,0,4703,4702,1,0,0,0,4704,4706,1,0,0,0,4705,4692,
        1,0,0,0,4705,4695,1,0,0,0,4705,4698,1,0,0,0,4706,383,1,0,0,0,4707,
        4708,5,65,0,0,4708,4709,5,328,0,0,4709,4710,5,882,0,0,4710,385,1,
        0,0,0,4711,4712,5,565,0,0,4712,4713,5,857,0,0,4713,4714,5,866,0,
        0,4714,4719,3,624,312,0,4715,4716,5,868,0,0,4716,4718,3,624,312,
        0,4717,4715,1,0,0,0,4718,4721,1,0,0,0,4719,4717,1,0,0,0,4719,4720,
        1,0,0,0,4720,4722,1,0,0,0,4721,4719,1,0,0,0,4722,4723,5,867,0,0,
        4723,4775,1,0,0,0,4724,4725,5,567,0,0,4725,4726,5,857,0,0,4726,4727,
        5,866,0,0,4727,4732,3,624,312,0,4728,4729,5,868,0,0,4729,4731,3,
        624,312,0,4730,4728,1,0,0,0,4731,4734,1,0,0,0,4732,4730,1,0,0,0,
        4732,4733,1,0,0,0,4733,4735,1,0,0,0,4734,4732,1,0,0,0,4735,4736,
        5,867,0,0,4736,4775,1,0,0,0,4737,4738,5,566,0,0,4738,4739,5,857,
        0,0,4739,4740,5,866,0,0,4740,4741,3,646,323,0,4741,4742,5,867,0,
        0,4742,4775,1,0,0,0,4743,4744,5,568,0,0,4744,4745,5,857,0,0,4745,
        4746,5,866,0,0,4746,4747,3,646,323,0,4747,4748,5,867,0,0,4748,4775,
        1,0,0,0,4749,4750,5,570,0,0,4750,4751,5,857,0,0,4751,4752,5,866,
        0,0,4752,4753,3,746,373,0,4753,4754,5,867,0,0,4754,4775,1,0,0,0,
        4755,4756,5,571,0,0,4756,4757,5,857,0,0,4757,4758,5,866,0,0,4758,
        4759,3,746,373,0,4759,4760,5,867,0,0,4760,4775,1,0,0,0,4761,4762,
        5,569,0,0,4762,4763,5,857,0,0,4763,4764,5,866,0,0,4764,4769,3,388,
        194,0,4765,4766,5,868,0,0,4766,4768,3,388,194,0,4767,4765,1,0,0,
        0,4768,4771,1,0,0,0,4769,4767,1,0,0,0,4769,4770,1,0,0,0,4770,4772,
        1,0,0,0,4771,4769,1,0,0,0,4772,4773,5,867,0,0,4773,4775,1,0,0,0,
        4774,4711,1,0,0,0,4774,4724,1,0,0,0,4774,4737,1,0,0,0,4774,4743,
        1,0,0,0,4774,4749,1,0,0,0,4774,4755,1,0,0,0,4774,4761,1,0,0,0,4775,
        387,1,0,0,0,4776,4777,5,866,0,0,4777,4778,3,648,324,0,4778,4779,
        5,868,0,0,4779,4780,3,648,324,0,4780,4781,5,867,0,0,4781,389,1,0,
        0,0,4782,4783,7,73,0,0,4783,391,1,0,0,0,4784,4785,7,74,0,0,4785,
        4786,5,857,0,0,4786,4810,3,396,198,0,4787,4788,5,460,0,0,4788,4789,
        5,857,0,0,4789,4790,5,882,0,0,4790,4791,5,868,0,0,4791,4792,5,461,
        0,0,4792,4793,5,857,0,0,4793,4810,3,708,354,0,4794,4795,5,611,0,
        0,4795,4796,5,857,0,0,4796,4797,5,882,0,0,4797,4798,5,868,0,0,4798,
        4799,5,612,0,0,4799,4800,5,857,0,0,4800,4810,3,708,354,0,4801,4802,
        5,557,0,0,4802,4803,5,857,0,0,4803,4804,5,882,0,0,4804,4805,5,868,
        0,0,4805,4806,5,558,0,0,4806,4807,5,857,0,0,4807,4810,3,708,354,
        0,4808,4810,5,634,0,0,4809,4784,1,0,0,0,4809,4787,1,0,0,0,4809,4794,
        1,0,0,0,4809,4801,1,0,0,0,4809,4808,1,0,0,0,4810,393,1,0,0,0,4811,
        4812,5,678,0,0,4812,4813,5,857,0,0,4813,4824,5,882,0,0,4814,4815,
        5,529,0,0,4815,4816,5,857,0,0,4816,4824,5,882,0,0,4817,4818,5,363,
        0,0,4818,4819,5,857,0,0,4819,4824,5,882,0,0,4820,4821,5,535,0,0,
        4821,4822,5,857,0,0,4822,4824,5,882,0,0,4823,4811,1,0,0,0,4823,4814,
        1,0,0,0,4823,4817,1,0,0,0,4823,4820,1,0,0,0,4824,395,1,0,0,0,4825,
        4830,3,692,346,0,4826,4827,5,868,0,0,4827,4829,3,692,346,0,4828,
        4826,1,0,0,0,4829,4832,1,0,0,0,4830,4828,1,0,0,0,4830,4831,1,0,0,
        0,4831,4835,1,0,0,0,4832,4830,1,0,0,0,4833,4835,5,882,0,0,4834,4825,
        1,0,0,0,4834,4833,1,0,0,0,4835,397,1,0,0,0,4836,4837,5,694,0,0,4837,
        4838,7,75,0,0,4838,4840,3,694,347,0,4839,4841,7,76,0,0,4840,4839,
        1,0,0,0,4840,4841,1,0,0,0,4841,399,1,0,0,0,4842,4843,5,694,0,0,4843,
        4844,5,378,0,0,4844,4850,3,694,347,0,4845,4848,5,654,0,0,4846,4847,
        5,65,0,0,4847,4849,5,489,0,0,4848,4846,1,0,0,0,4848,4849,1,0,0,0,
        4849,4851,1,0,0,0,4850,4845,1,0,0,0,4850,4851,1,0,0,0,4851,401,1,
        0,0,0,4852,4853,5,694,0,0,4853,4854,5,540,0,0,4854,4855,3,694,347,
        0,4855,403,1,0,0,0,4856,4857,5,694,0,0,4857,4858,5,341,0,0,4858,
        4861,3,694,347,0,4859,4860,5,513,0,0,4860,4862,5,533,0,0,4861,4859,
        1,0,0,0,4861,4862,1,0,0,0,4862,405,1,0,0,0,4863,4864,5,694,0,0,4864,
        4865,5,583,0,0,4865,4866,3,694,347,0,4866,407,1,0,0,0,4867,4868,
        5,694,0,0,4868,4871,5,551,0,0,4869,4870,5,33,0,0,4870,4872,3,694,
        347,0,4871,4869,1,0,0,0,4871,4872,1,0,0,0,4872,409,1,0,0,0,4873,
        4874,5,540,0,0,4874,4875,3,702,351,0,4875,4878,5,68,0,0,4876,4879,
        5,882,0,0,4877,4879,5,892,0,0,4878,4876,1,0,0,0,4878,4877,1,0,0,
        0,4879,411,1,0,0,0,4880,4881,5,717,0,0,4881,4884,3,702,351,0,4882,
        4883,5,188,0,0,4883,4885,3,748,374,0,4884,4882,1,0,0,0,4884,4885,
        1,0,0,0,4885,413,1,0,0,0,4886,4887,7,77,0,0,4887,4888,5,540,0,0,
        4888,4889,3,702,351,0,4889,415,1,0,0,0,4890,4893,3,418,209,0,4891,
        4893,3,4,2,0,4892,4890,1,0,0,0,4892,4891,1,0,0,0,4893,417,1,0,0,
        0,4894,4895,3,702,351,0,4895,4896,5,878,0,0,4896,4898,1,0,0,0,4897,
        4894,1,0,0,0,4897,4898,1,0,0,0,4898,4899,1,0,0,0,4899,4905,5,317,
        0,0,4900,4901,3,438,219,0,4901,4902,5,869,0,0,4902,4904,1,0,0,0,
        4903,4900,1,0,0,0,4904,4907,1,0,0,0,4905,4903,1,0,0,0,4905,4906,
        1,0,0,0,4906,4913,1,0,0,0,4907,4905,1,0,0,0,4908,4909,3,440,220,
        0,4909,4910,5,869,0,0,4910,4912,1,0,0,0,4911,4908,1,0,0,0,4912,4915,
        1,0,0,0,4913,4911,1,0,0,0,4913,4914,1,0,0,0,4914,4921,1,0,0,0,4915,
        4913,1,0,0,0,4916,4917,3,442,221,0,4917,4918,5,869,0,0,4918,4920,
        1,0,0,0,4919,4916,1,0,0,0,4920,4923,1,0,0,0,4921,4919,1,0,0,0,4921,
        4922,1,0,0,0,4922,4929,1,0,0,0,4923,4921,1,0,0,0,4924,4925,3,444,
        222,0,4925,4926,5,869,0,0,4926,4928,1,0,0,0,4927,4924,1,0,0,0,4928,
        4931,1,0,0,0,4929,4927,1,0,0,0,4929,4930,1,0,0,0,4930,4935,1,0,0,
        0,4931,4929,1,0,0,0,4932,4934,3,448,224,0,4933,4932,1,0,0,0,4934,
        4937,1,0,0,0,4935,4933,1,0,0,0,4935,4936,1,0,0,0,4936,4938,1,0,0,
        0,4937,4935,1,0,0,0,4938,4940,5,378,0,0,4939,4941,3,702,351,0,4940,
        4939,1,0,0,0,4940,4941,1,0,0,0,4941,419,1,0,0,0,4942,4945,5,23,0,
        0,4943,4946,3,702,351,0,4944,4946,3,800,400,0,4945,4943,1,0,0,0,
        4945,4944,1,0,0,0,4945,4946,1,0,0,0,4946,4948,1,0,0,0,4947,4949,
        3,450,225,0,4948,4947,1,0,0,0,4949,4950,1,0,0,0,4950,4948,1,0,0,
        0,4950,4951,1,0,0,0,4951,4958,1,0,0,0,4952,4954,5,53,0,0,4953,4955,
        3,448,224,0,4954,4953,1,0,0,0,4955,4956,1,0,0,0,4956,4954,1,0,0,
        0,4956,4957,1,0,0,0,4957,4959,1,0,0,0,4958,4952,1,0,0,0,4958,4959,
        1,0,0,0,4959,4960,1,0,0,0,4960,4961,5,378,0,0,4961,4962,5,23,0,0,
        4962,421,1,0,0,0,4963,4964,5,78,0,0,4964,4965,3,800,400,0,4965,4967,
        5,175,0,0,4966,4968,3,448,224,0,4967,4966,1,0,0,0,4968,4969,1,0,
        0,0,4969,4967,1,0,0,0,4969,4970,1,0,0,0,4970,4974,1,0,0,0,4971,4973,
        3,452,226,0,4972,4971,1,0,0,0,4973,4976,1,0,0,0,4974,4972,1,0,0,
        0,4974,4975,1,0,0,0,4975,4983,1,0,0,0,4976,4974,1,0,0,0,4977,4979,
        5,53,0,0,4978,4980,3,448,224,0,4979,4978,1,0,0,0,4980,4981,1,0,0,
        0,4981,4979,1,0,0,0,4981,4982,1,0,0,0,4982,4984,1,0,0,0,4983,4977,
        1,0,0,0,4983,4984,1,0,0,0,4984,4985,1,0,0,0,4985,4986,5,378,0,0,
        4986,4987,5,78,0,0,4987,423,1,0,0,0,4988,4989,5,90,0,0,4989,4990,
        3,702,351,0,4990,425,1,0,0,0,4991,4992,5,97,0,0,4992,4993,3,702,
        351,0,4993,427,1,0,0,0,4994,4995,3,702,351,0,4995,4996,5,878,0,0,
        4996,4998,1,0,0,0,4997,4994,1,0,0,0,4997,4998,1,0,0,0,4998,4999,
        1,0,0,0,4999,5001,5,106,0,0,5000,5002,3,448,224,0,5001,5000,1,0,
        0,0,5002,5003,1,0,0,0,5003,5001,1,0,0,0,5003,5004,1,0,0,0,5004,5005,
        1,0,0,0,5005,5006,5,378,0,0,5006,5008,5,106,0,0,5007,5009,3,702,
        351,0,5008,5007,1,0,0,0,5008,5009,1,0,0,0,5009,429,1,0,0,0,5010,
        5011,3,702,351,0,5011,5012,5,878,0,0,5012,5014,1,0,0,0,5013,5010,
        1,0,0,0,5013,5014,1,0,0,0,5014,5015,1,0,0,0,5015,5017,5,142,0,0,
        5016,5018,3,448,224,0,5017,5016,1,0,0,0,5018,5019,1,0,0,0,5019,5017,
        1,0,0,0,5019,5020,1,0,0,0,5020,5021,1,0,0,0,5021,5022,5,676,0,0,
        5022,5023,3,800,400,0,5023,5024,5,378,0,0,5024,5026,5,142,0,0,5025,
        5027,3,702,351,0,5026,5025,1,0,0,0,5026,5027,1,0,0,0,5027,431,1,
        0,0,0,5028,5029,5,148,0,0,5029,5030,3,800,400,0,5030,433,1,0,0,0,
        5031,5032,3,702,351,0,5032,5033,5,878,0,0,5033,5035,1,0,0,0,5034,
        5031,1,0,0,0,5034,5035,1,0,0,0,5035,5036,1,0,0,0,5036,5037,5,193,
        0,0,5037,5038,3,800,400,0,5038,5040,5,371,0,0,5039,5041,3,448,224,
        0,5040,5039,1,0,0,0,5041,5042,1,0,0,0,5042,5040,1,0,0,0,5042,5043,
        1,0,0,0,5043,5044,1,0,0,0,5044,5045,5,378,0,0,5045,5047,5,193,0,
        0,5046,5048,3,702,351,0,5047,5046,1,0,0,0,5047,5048,1,0,0,0,5048,
        435,1,0,0,0,5049,5050,5,334,0,0,5050,5065,3,702,351,0,5051,5056,
        5,64,0,0,5052,5054,5,501,0,0,5053,5052,1,0,0,0,5053,5054,1,0,0,0,
        5054,5055,1,0,0,0,5055,5057,5,68,0,0,5056,5053,1,0,0,0,5056,5057,
        1,0,0,0,5057,5058,1,0,0,0,5058,5059,3,702,351,0,5059,5060,5,88,0,
        0,5060,5061,3,700,350,0,5061,5065,1,0,0,0,5062,5063,5,516,0,0,5063,
        5065,3,702,351,0,5064,5049,1,0,0,0,5064,5051,1,0,0,0,5064,5062,1,
        0,0,0,5065,437,1,0,0,0,5066,5067,5,41,0,0,5067,5068,3,700,350,0,
        5068,5071,3,722,361,0,5069,5070,5,42,0,0,5070,5072,3,800,400,0,5071,
        5069,1,0,0,0,5071,5072,1,0,0,0,5072,439,1,0,0,0,5073,5074,5,41,0,
        0,5074,5075,3,702,351,0,5075,5076,5,30,0,0,5076,5083,5,65,0,0,5077,
        5084,3,708,354,0,5078,5080,5,164,0,0,5079,5081,5,682,0,0,5080,5079,
        1,0,0,0,5080,5081,1,0,0,0,5081,5082,1,0,0,0,5082,5084,5,882,0,0,
        5083,5077,1,0,0,0,5083,5078,1,0,0,0,5084,441,1,0,0,0,5085,5086,5,
        41,0,0,5086,5087,3,702,351,0,5087,5088,5,38,0,0,5088,5089,5,65,0,
        0,5089,5090,3,204,102,0,5090,443,1,0,0,0,5091,5092,5,41,0,0,5092,
        5093,7,78,0,0,5093,5094,5,417,0,0,5094,5095,5,65,0,0,5095,5100,3,
        446,223,0,5096,5097,5,868,0,0,5097,5099,3,446,223,0,5098,5096,1,
        0,0,0,5099,5102,1,0,0,0,5100,5098,1,0,0,0,5100,5101,1,0,0,0,5101,
        5103,1,0,0,0,5102,5100,1,0,0,0,5103,5104,3,416,208,0,5104,445,1,
        0,0,0,5105,5117,3,708,354,0,5106,5108,5,164,0,0,5107,5109,5,682,
        0,0,5108,5107,1,0,0,0,5108,5109,1,0,0,0,5109,5110,1,0,0,0,5110,5117,
        5,882,0,0,5111,5117,3,702,351,0,5112,5117,5,165,0,0,5113,5114,5,
        114,0,0,5114,5117,5,407,0,0,5115,5117,5,163,0,0,5116,5105,1,0,0,
        0,5116,5106,1,0,0,0,5116,5111,1,0,0,0,5116,5112,1,0,0,0,5116,5113,
        1,0,0,0,5116,5115,1,0,0,0,5117,447,1,0,0,0,5118,5121,3,18,9,0,5119,
        5121,3,4,2,0,5120,5118,1,0,0,0,5120,5119,1,0,0,0,5121,5122,1,0,0,
        0,5122,5123,5,869,0,0,5123,449,1,0,0,0,5124,5127,5,191,0,0,5125,
        5128,3,720,360,0,5126,5128,3,800,400,0,5127,5125,1,0,0,0,5127,5126,
        1,0,0,0,5128,5129,1,0,0,0,5129,5131,5,175,0,0,5130,5132,3,448,224,
        0,5131,5130,1,0,0,0,5132,5133,1,0,0,0,5133,5131,1,0,0,0,5133,5134,
        1,0,0,0,5134,451,1,0,0,0,5135,5136,5,54,0,0,5136,5137,3,800,400,
        0,5137,5139,5,175,0,0,5138,5140,3,448,224,0,5139,5138,1,0,0,0,5140,
        5141,1,0,0,0,5141,5139,1,0,0,0,5141,5142,1,0,0,0,5142,453,1,0,0,
        0,5143,5144,5,8,0,0,5144,5146,5,678,0,0,5145,5147,3,754,377,0,5146,
        5145,1,0,0,0,5146,5147,1,0,0,0,5147,5204,1,0,0,0,5148,5153,3,486,
        243,0,5149,5150,5,868,0,0,5150,5152,3,486,243,0,5151,5149,1,0,0,
        0,5152,5155,1,0,0,0,5153,5151,1,0,0,0,5153,5154,1,0,0,0,5154,5205,
        1,0,0,0,5155,5153,1,0,0,0,5156,5161,3,488,244,0,5157,5158,5,868,
        0,0,5158,5160,3,488,244,0,5159,5157,1,0,0,0,5160,5163,1,0,0,0,5161,
        5159,1,0,0,0,5161,5162,1,0,0,0,5162,5178,1,0,0,0,5163,5161,1,0,0,
        0,5164,5176,5,144,0,0,5165,5177,5,505,0,0,5166,5173,3,500,250,0,
        5167,5169,5,11,0,0,5168,5167,1,0,0,0,5168,5169,1,0,0,0,5169,5170,
        1,0,0,0,5170,5172,3,500,250,0,5171,5168,1,0,0,0,5172,5175,1,0,0,
        0,5173,5171,1,0,0,0,5173,5174,1,0,0,0,5174,5177,1,0,0,0,5175,5173,
        1,0,0,0,5176,5165,1,0,0,0,5176,5166,1,0,0,0,5177,5179,1,0,0,0,5178,
        5164,1,0,0,0,5178,5179,1,0,0,0,5179,5186,1,0,0,0,5180,5182,5,194,
        0,0,5181,5183,3,502,251,0,5182,5181,1,0,0,0,5183,5184,1,0,0,0,5184,
        5182,1,0,0,0,5184,5185,1,0,0,0,5185,5187,1,0,0,0,5186,5180,1,0,0,
        0,5186,5187,1,0,0,0,5187,5192,1,0,0,0,5188,5191,3,504,252,0,5189,
        5191,3,506,253,0,5190,5188,1,0,0,0,5190,5189,1,0,0,0,5191,5194,1,
        0,0,0,5192,5190,1,0,0,0,5192,5193,1,0,0,0,5193,5197,1,0,0,0,5194,
        5192,1,0,0,0,5195,5196,7,79,0,0,5196,5198,5,882,0,0,5197,5195,1,
        0,0,0,5197,5198,1,0,0,0,5198,5205,1,0,0,0,5199,5200,3,652,326,0,
        5200,5201,5,42,0,0,5201,5202,5,582,0,0,5202,5203,3,462,231,0,5203,
        5205,1,0,0,0,5204,5148,1,0,0,0,5204,5156,1,0,0,0,5204,5199,1,0,0,
        0,5205,455,1,0,0,0,5206,5207,5,34,0,0,5207,5209,5,678,0,0,5208,5210,
        3,756,378,0,5209,5208,1,0,0,0,5209,5210,1,0,0,0,5210,5211,1,0,0,
        0,5211,5213,3,680,340,0,5212,5214,3,490,245,0,5213,5212,1,0,0,0,
        5213,5214,1,0,0,0,5214,5222,1,0,0,0,5215,5216,5,868,0,0,5216,5218,
        3,680,340,0,5217,5219,3,490,245,0,5218,5217,1,0,0,0,5218,5219,1,
        0,0,0,5219,5221,1,0,0,0,5220,5215,1,0,0,0,5221,5224,1,0,0,0,5222,
        5220,1,0,0,0,5222,5223,1,0,0,0,5223,5228,1,0,0,0,5224,5222,1,0,0,
        0,5225,5226,5,42,0,0,5226,5227,5,582,0,0,5227,5229,3,462,231,0,5228,
        5225,1,0,0,0,5228,5229,1,0,0,0,5229,5244,1,0,0,0,5230,5242,5,144,
        0,0,5231,5243,5,505,0,0,5232,5239,3,500,250,0,5233,5235,5,11,0,0,
        5234,5233,1,0,0,0,5234,5235,1,0,0,0,5235,5236,1,0,0,0,5236,5238,
        3,500,250,0,5237,5234,1,0,0,0,5238,5241,1,0,0,0,5239,5237,1,0,0,
        0,5239,5240,1,0,0,0,5240,5243,1,0,0,0,5241,5239,1,0,0,0,5242,5231,
        1,0,0,0,5242,5232,1,0,0,0,5243,5245,1,0,0,0,5244,5230,1,0,0,0,5244,
        5245,1,0,0,0,5245,5252,1,0,0,0,5246,5248,5,194,0,0,5247,5249,3,502,
        251,0,5248,5247,1,0,0,0,5249,5250,1,0,0,0,5250,5248,1,0,0,0,5250,
        5251,1,0,0,0,5251,5253,1,0,0,0,5252,5246,1,0,0,0,5252,5253,1,0,0,
        0,5253,5258,1,0,0,0,5254,5257,3,504,252,0,5255,5257,3,506,253,0,
        5256,5254,1,0,0,0,5256,5255,1,0,0,0,5257,5260,1,0,0,0,5258,5256,
        1,0,0,0,5258,5259,1,0,0,0,5259,5263,1,0,0,0,5260,5258,1,0,0,0,5261,
        5262,7,79,0,0,5262,5264,5,882,0,0,5263,5261,1,0,0,0,5263,5264,1,
        0,0,0,5264,457,1,0,0,0,5265,5266,5,51,0,0,5266,5268,5,678,0,0,5267,
        5269,3,754,377,0,5268,5267,1,0,0,0,5268,5269,1,0,0,0,5269,5270,1,
        0,0,0,5270,5275,3,680,340,0,5271,5272,5,868,0,0,5272,5274,3,680,
        340,0,5273,5271,1,0,0,0,5274,5277,1,0,0,0,5275,5273,1,0,0,0,5275,
        5276,1,0,0,0,5276,459,1,0,0,0,5277,5275,1,0,0,0,5278,5279,5,73,0,
        0,5279,5284,3,514,257,0,5280,5281,5,868,0,0,5281,5283,3,514,257,
        0,5282,5280,1,0,0,0,5283,5286,1,0,0,0,5284,5282,1,0,0,0,5284,5285,
        1,0,0,0,5285,5287,1,0,0,0,5286,5284,1,0,0,0,5287,5289,5,119,0,0,
        5288,5290,3,482,241,0,5289,5288,1,0,0,0,5289,5290,1,0,0,0,5290,5291,
        1,0,0,0,5291,5292,3,518,259,0,5292,5302,5,176,0,0,5293,5298,3,494,
        247,0,5294,5295,5,868,0,0,5295,5297,3,494,247,0,5296,5294,1,0,0,
        0,5297,5300,1,0,0,0,5298,5296,1,0,0,0,5298,5299,1,0,0,0,5299,5303,
        1,0,0,0,5300,5298,1,0,0,0,5301,5303,3,650,325,0,5302,5293,1,0,0,
        0,5302,5301,1,0,0,0,5303,5318,1,0,0,0,5304,5316,5,144,0,0,5305,5317,
        5,505,0,0,5306,5313,3,500,250,0,5307,5309,5,11,0,0,5308,5307,1,0,
        0,0,5308,5309,1,0,0,0,5309,5310,1,0,0,0,5310,5312,3,500,250,0,5311,
        5308,1,0,0,0,5312,5315,1,0,0,0,5313,5311,1,0,0,0,5313,5314,1,0,0,
        0,5314,5317,1,0,0,0,5315,5313,1,0,0,0,5316,5305,1,0,0,0,5316,5306,
        1,0,0,0,5317,5319,1,0,0,0,5318,5304,1,0,0,0,5318,5319,1,0,0,0,5319,
        5329,1,0,0,0,5320,5326,5,194,0,0,5321,5322,5,73,0,0,5322,5325,5,
        121,0,0,5323,5325,3,502,251,0,5324,5321,1,0,0,0,5324,5323,1,0,0,
        0,5325,5328,1,0,0,0,5326,5324,1,0,0,0,5326,5327,1,0,0,0,5327,5330,
        1,0,0,0,5328,5326,1,0,0,0,5329,5320,1,0,0,0,5329,5330,1,0,0,0,5330,
        5338,1,0,0,0,5331,5332,5,13,0,0,5332,5336,3,680,340,0,5333,5334,
        5,194,0,0,5334,5335,5,582,0,0,5335,5337,3,462,231,0,5336,5333,1,
        0,0,0,5336,5337,1,0,0,0,5337,5339,1,0,0,0,5338,5331,1,0,0,0,5338,
        5339,1,0,0,0,5339,5368,1,0,0,0,5340,5343,5,73,0,0,5341,5342,5,547,
        0,0,5342,5344,5,119,0,0,5343,5341,1,0,0,0,5343,5344,1,0,0,0,5344,
        5345,1,0,0,0,5345,5350,3,652,326,0,5346,5347,5,868,0,0,5347,5349,
        3,652,326,0,5348,5346,1,0,0,0,5349,5352,1,0,0,0,5350,5348,1,0,0,
        0,5350,5351,1,0,0,0,5351,5353,1,0,0,0,5352,5350,1,0,0,0,5353,5354,
        5,176,0,0,5354,5359,3,652,326,0,5355,5356,5,868,0,0,5356,5358,3,
        652,326,0,5357,5355,1,0,0,0,5358,5361,1,0,0,0,5359,5357,1,0,0,0,
        5359,5360,1,0,0,0,5360,5365,1,0,0,0,5361,5359,1,0,0,0,5362,5363,
        5,194,0,0,5363,5364,5,704,0,0,5364,5366,5,121,0,0,5365,5362,1,0,
        0,0,5365,5366,1,0,0,0,5366,5368,1,0,0,0,5367,5278,1,0,0,0,5367,5340,
        1,0,0,0,5368,461,1,0,0,0,5369,5378,5,42,0,0,5370,5378,5,505,0,0,
        5371,5374,5,7,0,0,5372,5373,5,59,0,0,5373,5375,3,650,325,0,5374,
        5372,1,0,0,0,5374,5375,1,0,0,0,5375,5378,1,0,0,0,5376,5378,3,650,
        325,0,5377,5369,1,0,0,0,5377,5370,1,0,0,0,5377,5371,1,0,0,0,5377,
        5376,1,0,0,0,5378,463,1,0,0,0,5379,5380,5,73,0,0,5380,5381,5,547,
        0,0,5381,5382,5,119,0,0,5382,5383,3,680,340,0,5383,5384,5,176,0,
        0,5384,5389,3,680,340,0,5385,5386,5,868,0,0,5386,5388,3,680,340,
        0,5387,5385,1,0,0,0,5388,5391,1,0,0,0,5389,5387,1,0,0,0,5389,5390,
        1,0,0,0,5390,5395,1,0,0,0,5391,5389,1,0,0,0,5392,5393,5,194,0,0,
        5393,5394,5,73,0,0,5394,5396,5,121,0,0,5395,5392,1,0,0,0,5395,5396,
        1,0,0,0,5396,465,1,0,0,0,5397,5398,5,8,0,0,5398,5399,5,739,0,0,5399,
        5400,5,74,0,0,5400,5406,3,642,321,0,5401,5403,5,190,0,0,5402,5404,
        5,857,0,0,5403,5402,1,0,0,0,5403,5404,1,0,0,0,5404,5405,1,0,0,0,
        5405,5407,3,474,237,0,5406,5401,1,0,0,0,5406,5407,1,0,0,0,5407,5413,
        1,0,0,0,5408,5410,5,837,0,0,5409,5411,5,857,0,0,5410,5409,1,0,0,
        0,5410,5411,1,0,0,0,5411,5412,1,0,0,0,5412,5414,3,708,354,0,5413,
        5408,1,0,0,0,5413,5414,1,0,0,0,5414,5419,1,0,0,0,5415,5417,7,38,
        0,0,5416,5418,5,66,0,0,5417,5416,1,0,0,0,5417,5418,1,0,0,0,5418,
        5420,1,0,0,0,5419,5415,1,0,0,0,5419,5420,1,0,0,0,5420,467,1,0,0,
        0,5421,5422,5,34,0,0,5422,5423,5,739,0,0,5423,5424,5,74,0,0,5424,
        5425,3,640,320,0,5425,5426,5,839,0,0,5426,5427,5,857,0,0,5427,5433,
        7,80,0,0,5428,5430,5,190,0,0,5429,5431,5,857,0,0,5430,5429,1,0,0,
        0,5430,5431,1,0,0,0,5431,5432,1,0,0,0,5432,5434,3,474,237,0,5433,
        5428,1,0,0,0,5433,5434,1,0,0,0,5434,5440,1,0,0,0,5435,5437,5,837,
        0,0,5436,5438,5,857,0,0,5437,5436,1,0,0,0,5437,5438,1,0,0,0,5438,
        5439,1,0,0,0,5439,5441,3,708,354,0,5440,5435,1,0,0,0,5440,5441,1,
        0,0,0,5441,5443,1,0,0,0,5442,5444,7,38,0,0,5443,5442,1,0,0,0,5443,
        5444,1,0,0,0,5444,469,1,0,0,0,5445,5446,5,51,0,0,5446,5447,5,739,
        0,0,5447,5448,5,74,0,0,5448,5450,3,642,321,0,5449,5451,5,66,0,0,
        5450,5449,1,0,0,0,5450,5451,1,0,0,0,5451,471,1,0,0,0,5452,5453,5,
        155,0,0,5453,5454,5,739,0,0,5454,5455,5,74,0,0,5455,5465,3,642,321,
        0,5456,5457,5,65,0,0,5457,5462,3,708,354,0,5458,5459,5,868,0,0,5459,
        5461,3,708,354,0,5460,5458,1,0,0,0,5461,5464,1,0,0,0,5462,5460,1,
        0,0,0,5462,5463,1,0,0,0,5463,5466,1,0,0,0,5464,5462,1,0,0,0,5465,
        5456,1,0,0,0,5465,5466,1,0,0,0,5466,473,1,0,0,0,5467,5473,3,708,
        354,0,5468,5469,3,708,354,0,5469,5470,5,854,0,0,5470,5471,3,708,
        354,0,5471,5473,1,0,0,0,5472,5467,1,0,0,0,5472,5468,1,0,0,0,5473,
        5478,1,0,0,0,5474,5475,5,868,0,0,5475,5477,3,474,237,0,5476,5474,
        1,0,0,0,5477,5480,1,0,0,0,5478,5476,1,0,0,0,5478,5479,1,0,0,0,5479,
        475,1,0,0,0,5480,5478,1,0,0,0,5481,5482,5,141,0,0,5482,5483,5,678,
        0,0,5483,5488,3,520,260,0,5484,5485,5,868,0,0,5485,5487,3,520,260,
        0,5486,5484,1,0,0,0,5487,5490,1,0,0,0,5488,5486,1,0,0,0,5488,5489,
        1,0,0,0,5489,477,1,0,0,0,5490,5488,1,0,0,0,5491,5493,5,149,0,0,5492,
        5494,3,754,377,0,5493,5492,1,0,0,0,5493,5494,1,0,0,0,5494,5495,1,
        0,0,0,5495,5500,3,514,257,0,5496,5497,5,868,0,0,5497,5499,3,514,
        257,0,5498,5496,1,0,0,0,5499,5502,1,0,0,0,5500,5498,1,0,0,0,5500,
        5501,1,0,0,0,5501,5503,1,0,0,0,5502,5500,1,0,0,0,5503,5505,5,119,
        0,0,5504,5506,3,482,241,0,5505,5504,1,0,0,0,5505,5506,1,0,0,0,5506,
        5507,1,0,0,0,5507,5508,3,518,259,0,5508,5509,5,68,0,0,5509,5511,
        3,650,325,0,5510,5512,3,480,240,0,5511,5510,1,0,0,0,5511,5512,1,
        0,0,0,5512,5544,1,0,0,0,5513,5515,5,149,0,0,5514,5516,3,754,377,
        0,5515,5514,1,0,0,0,5515,5516,1,0,0,0,5516,5517,1,0,0,0,5517,5519,
        5,7,0,0,5518,5520,5,734,0,0,5519,5518,1,0,0,0,5519,5520,1,0,0,0,
        5520,5521,1,0,0,0,5521,5522,5,868,0,0,5522,5523,5,73,0,0,5523,5524,
        5,121,0,0,5524,5525,5,68,0,0,5525,5527,3,650,325,0,5526,5528,3,480,
        240,0,5527,5526,1,0,0,0,5527,5528,1,0,0,0,5528,5544,1,0,0,0,5529,
        5531,5,149,0,0,5530,5532,3,754,377,0,5531,5530,1,0,0,0,5531,5532,
        1,0,0,0,5532,5535,1,0,0,0,5533,5534,5,547,0,0,5534,5536,5,119,0,
        0,5535,5533,1,0,0,0,5535,5536,1,0,0,0,5536,5537,1,0,0,0,5537,5538,
        3,650,325,0,5538,5539,5,68,0,0,5539,5541,3,650,325,0,5540,5542,3,
        480,240,0,5541,5540,1,0,0,0,5541,5542,1,0,0,0,5542,5544,1,0,0,0,
        5543,5491,1,0,0,0,5543,5513,1,0,0,0,5543,5529,1,0,0,0,5544,479,1,
        0,0,0,5545,5546,5,79,0,0,5546,5547,5,674,0,0,5547,5548,5,678,0,0,
        5548,481,1,0,0,0,5549,5550,7,81,0,0,5550,483,1,0,0,0,5551,5552,5,
        155,0,0,5552,5555,5,529,0,0,5553,5554,5,65,0,0,5554,5556,3,680,340,
        0,5555,5553,1,0,0,0,5555,5556,1,0,0,0,5556,5557,1,0,0,0,5557,5560,
        5,857,0,0,5558,5561,3,794,397,0,5559,5561,5,882,0,0,5560,5558,1,
        0,0,0,5560,5559,1,0,0,0,5561,5584,1,0,0,0,5562,5563,5,155,0,0,5563,
        5566,5,529,0,0,5564,5565,5,65,0,0,5565,5567,3,680,340,0,5566,5564,
        1,0,0,0,5566,5567,1,0,0,0,5567,5572,1,0,0,0,5568,5569,5,176,0,0,
        5569,5573,5,829,0,0,5570,5571,5,857,0,0,5571,5573,5,882,0,0,5572,
        5568,1,0,0,0,5572,5570,1,0,0,0,5573,5576,1,0,0,0,5574,5575,5,143,
        0,0,5575,5577,5,882,0,0,5576,5574,1,0,0,0,5576,5577,1,0,0,0,5577,
        5581,1,0,0,0,5578,5579,5,147,0,0,5579,5580,5,36,0,0,5580,5582,5,
        529,0,0,5581,5578,1,0,0,0,5581,5582,1,0,0,0,5582,5584,1,0,0,0,5583,
        5551,1,0,0,0,5583,5562,1,0,0,0,5584,485,1,0,0,0,5585,5586,3,680,
        340,0,5586,5587,3,504,252,0,5587,487,1,0,0,0,5588,5614,3,680,340,
        0,5589,5590,5,423,0,0,5590,5591,5,20,0,0,5591,5592,5,882,0,0,5592,
        5615,3,496,248,0,5593,5594,5,423,0,0,5594,5595,5,20,0,0,5595,5596,
        5,829,0,0,5596,5597,5,529,0,0,5597,5615,3,496,248,0,5598,5599,5,
        423,0,0,5599,5600,5,194,0,0,5600,5615,3,498,249,0,5601,5602,5,369,
        0,0,5602,5603,5,511,0,0,5603,5615,5,529,0,0,5604,5605,7,82,0,0,5605,
        5607,3,512,256,0,5606,5608,3,508,254,0,5607,5606,1,0,0,0,5607,5608,
        1,0,0,0,5608,5610,1,0,0,0,5609,5604,1,0,0,0,5610,5611,1,0,0,0,5611,
        5609,1,0,0,0,5611,5612,1,0,0,0,5612,5615,1,0,0,0,5613,5615,3,510,
        255,0,5614,5589,1,0,0,0,5614,5593,1,0,0,0,5614,5598,1,0,0,0,5614,
        5601,1,0,0,0,5614,5609,1,0,0,0,5614,5613,1,0,0,0,5614,5615,1,0,0,
        0,5615,489,1,0,0,0,5616,5617,5,423,0,0,5617,5623,5,20,0,0,5618,5624,
        5,882,0,0,5619,5620,5,829,0,0,5620,5624,5,529,0,0,5621,5622,5,529,
        0,0,5622,5624,5,882,0,0,5623,5618,1,0,0,0,5623,5619,1,0,0,0,5623,
        5621,1,0,0,0,5624,5627,1,0,0,0,5625,5626,5,11,0,0,5626,5628,3,490,
        245,0,5627,5625,1,0,0,0,5627,5628,1,0,0,0,5628,5653,1,0,0,0,5629,
        5630,5,423,0,0,5630,5631,5,194,0,0,5631,5640,3,702,351,0,5632,5636,
        5,20,0,0,5633,5637,5,882,0,0,5634,5635,5,829,0,0,5635,5637,5,529,
        0,0,5636,5633,1,0,0,0,5636,5634,1,0,0,0,5637,5641,1,0,0,0,5638,5639,
        5,13,0,0,5639,5641,5,882,0,0,5640,5632,1,0,0,0,5640,5638,1,0,0,0,
        5640,5641,1,0,0,0,5641,5644,1,0,0,0,5642,5643,5,11,0,0,5643,5645,
        3,490,245,0,5644,5642,1,0,0,0,5644,5645,1,0,0,0,5645,5653,1,0,0,
        0,5646,5647,5,423,0,0,5647,5648,5,194,0,0,5648,5650,3,702,351,0,
        5649,5651,3,492,246,0,5650,5649,1,0,0,0,5650,5651,1,0,0,0,5651,5653,
        1,0,0,0,5652,5616,1,0,0,0,5652,5629,1,0,0,0,5652,5646,1,0,0,0,5653,
        491,1,0,0,0,5654,5655,5,427,0,0,5655,5656,5,708,0,0,5656,5657,5,
        423,0,0,5657,5661,5,20,0,0,5658,5659,5,829,0,0,5659,5662,5,529,0,
        0,5660,5662,5,882,0,0,5661,5658,1,0,0,0,5661,5660,1,0,0,0,5662,5672,
        1,0,0,0,5663,5664,5,427,0,0,5664,5665,5,708,0,0,5665,5666,5,423,
        0,0,5666,5667,5,194,0,0,5667,5668,3,702,351,0,5668,5669,5,13,0,0,
        5669,5670,5,882,0,0,5670,5672,1,0,0,0,5671,5654,1,0,0,0,5671,5663,
        1,0,0,0,5672,493,1,0,0,0,5673,5674,3,680,340,0,5674,5675,5,423,0,
        0,5675,5676,5,20,0,0,5676,5677,5,529,0,0,5677,5678,5,882,0,0,5678,
        5699,1,0,0,0,5679,5680,3,680,340,0,5680,5681,5,423,0,0,5681,5682,
        5,20,0,0,5682,5683,5,829,0,0,5683,5684,5,529,0,0,5684,5685,3,496,
        248,0,5685,5699,1,0,0,0,5686,5687,3,680,340,0,5687,5688,5,423,0,
        0,5688,5689,5,20,0,0,5689,5690,5,882,0,0,5690,5691,3,496,248,0,5691,
        5699,1,0,0,0,5692,5693,3,680,340,0,5693,5694,5,423,0,0,5694,5695,
        5,194,0,0,5695,5696,3,498,249,0,5696,5699,1,0,0,0,5697,5699,3,680,
        340,0,5698,5673,1,0,0,0,5698,5679,1,0,0,0,5698,5686,1,0,0,0,5698,
        5692,1,0,0,0,5698,5697,1,0,0,0,5699,495,1,0,0,0,5700,5701,5,143,
        0,0,5701,5703,5,882,0,0,5702,5700,1,0,0,0,5702,5703,1,0,0,0,5703,
        5707,1,0,0,0,5704,5705,5,147,0,0,5705,5706,5,36,0,0,5706,5708,5,
        529,0,0,5707,5704,1,0,0,0,5707,5708,1,0,0,0,5708,497,1,0,0,0,5709,
        5717,3,702,351,0,5710,5714,7,83,0,0,5711,5715,5,882,0,0,5712,5713,
        5,829,0,0,5713,5715,5,529,0,0,5714,5711,1,0,0,0,5714,5712,1,0,0,
        0,5715,5716,1,0,0,0,5716,5718,3,496,248,0,5717,5710,1,0,0,0,5717,
        5718,1,0,0,0,5718,5724,1,0,0,0,5719,5720,3,702,351,0,5720,5721,5,
        188,0,0,5721,5722,3,794,397,0,5722,5724,1,0,0,0,5723,5709,1,0,0,
        0,5723,5719,1,0,0,0,5724,499,1,0,0,0,5725,5734,5,169,0,0,5726,5734,
        5,693,0,0,5727,5728,5,331,0,0,5728,5734,5,882,0,0,5729,5730,5,441,
        0,0,5730,5734,5,882,0,0,5731,5732,5,651,0,0,5732,5734,5,882,0,0,
        5733,5725,1,0,0,0,5733,5726,1,0,0,0,5733,5727,1,0,0,0,5733,5729,
        1,0,0,0,5733,5731,1,0,0,0,5734,501,1,0,0,0,5735,5736,5,479,0,0,5736,
        5744,3,708,354,0,5737,5738,5,482,0,0,5738,5744,3,708,354,0,5739,
        5740,5,478,0,0,5740,5744,3,708,354,0,5741,5742,5,483,0,0,5742,5744,
        3,708,354,0,5743,5735,1,0,0,0,5743,5737,1,0,0,0,5743,5739,1,0,0,
        0,5743,5741,1,0,0,0,5744,503,1,0,0,0,5745,5746,5,529,0,0,5746,5753,
        5,390,0,0,5747,5754,5,42,0,0,5748,5754,5,500,0,0,5749,5750,5,87,
        0,0,5750,5751,3,708,354,0,5751,5752,5,698,0,0,5752,5754,1,0,0,0,
        5753,5747,1,0,0,0,5753,5748,1,0,0,0,5753,5749,1,0,0,0,5753,5754,
        1,0,0,0,5754,5784,1,0,0,0,5755,5756,5,529,0,0,5756,5759,5,420,0,
        0,5757,5760,5,42,0,0,5758,5760,3,708,354,0,5759,5757,1,0,0,0,5759,
        5758,1,0,0,0,5760,5784,1,0,0,0,5761,5762,5,529,0,0,5762,5763,5,581,
        0,0,5763,5768,5,87,0,0,5764,5769,5,42,0,0,5765,5766,3,708,354,0,
        5766,5767,5,698,0,0,5767,5769,1,0,0,0,5768,5764,1,0,0,0,5768,5765,
        1,0,0,0,5769,5784,1,0,0,0,5770,5771,5,529,0,0,5771,5772,5,144,0,
        0,5772,5774,5,36,0,0,5773,5775,7,84,0,0,5774,5773,1,0,0,0,5774,5775,
        1,0,0,0,5775,5784,1,0,0,0,5776,5777,5,395,0,0,5777,5784,3,708,354,
        0,5778,5781,5,530,0,0,5779,5782,3,708,354,0,5780,5782,5,669,0,0,
        5781,5779,1,0,0,0,5781,5780,1,0,0,0,5782,5784,1,0,0,0,5783,5745,
        1,0,0,0,5783,5755,1,0,0,0,5783,5761,1,0,0,0,5783,5770,1,0,0,0,5783,
        5776,1,0,0,0,5783,5778,1,0,0,0,5784,505,1,0,0,0,5785,5786,5,304,
        0,0,5786,5787,7,85,0,0,5787,507,1,0,0,0,5788,5791,5,423,0,0,5789,
        5790,5,194,0,0,5790,5792,3,702,351,0,5791,5789,1,0,0,0,5791,5792,
        1,0,0,0,5792,5801,1,0,0,0,5793,5797,5,20,0,0,5794,5798,5,882,0,0,
        5795,5796,5,829,0,0,5796,5798,5,529,0,0,5797,5794,1,0,0,0,5797,5795,
        1,0,0,0,5798,5802,1,0,0,0,5799,5800,5,13,0,0,5800,5802,5,882,0,0,
        5801,5793,1,0,0,0,5801,5799,1,0,0,0,5802,509,1,0,0,0,5803,5804,3,
        512,256,0,5804,5805,5,429,0,0,5805,5806,5,555,0,0,5806,5819,1,0,
        0,0,5807,5808,3,512,256,0,5808,5809,5,401,0,0,5809,5810,5,555,0,
        0,5810,5811,5,155,0,0,5811,5812,5,330,0,0,5812,5813,5,13,0,0,5813,
        5814,5,882,0,0,5814,5819,1,0,0,0,5815,5816,3,512,256,0,5816,5817,
        5,675,0,0,5817,5819,1,0,0,0,5818,5803,1,0,0,0,5818,5807,1,0,0,0,
        5818,5815,1,0,0,0,5819,511,1,0,0,0,5820,5821,7,86,0,0,5821,5822,
        5,394,0,0,5822,513,1,0,0,0,5823,5828,3,516,258,0,5824,5825,5,866,
        0,0,5825,5826,3,656,328,0,5826,5827,5,867,0,0,5827,5829,1,0,0,0,
        5828,5824,1,0,0,0,5828,5829,1,0,0,0,5829,515,1,0,0,0,5830,5832,5,
        7,0,0,5831,5833,5,734,0,0,5832,5831,1,0,0,0,5832,5833,1,0,0,0,5833,
        5924,1,0,0,0,5834,5836,5,8,0,0,5835,5837,5,743,0,0,5836,5835,1,0,
        0,0,5836,5837,1,0,0,0,5837,5924,1,0,0,0,5838,5846,5,34,0,0,5839,
        5840,5,660,0,0,5840,5847,5,752,0,0,5841,5847,5,743,0,0,5842,5847,
        5,684,0,0,5843,5847,5,678,0,0,5844,5847,5,658,0,0,5845,5847,5,582,
        0,0,5846,5839,1,0,0,0,5846,5841,1,0,0,0,5846,5842,1,0,0,0,5846,5843,
        1,0,0,0,5846,5844,1,0,0,0,5846,5845,1,0,0,0,5846,5847,1,0,0,0,5847,
        5924,1,0,0,0,5848,5924,5,44,0,0,5849,5851,5,51,0,0,5850,5852,5,582,
        0,0,5851,5850,1,0,0,0,5851,5852,1,0,0,0,5852,5924,1,0,0,0,5853,5924,
        5,385,0,0,5854,5924,5,717,0,0,5855,5924,5,718,0,0,5856,5857,5,73,
        0,0,5857,5924,5,121,0,0,5858,5924,5,82,0,0,5859,5924,5,86,0,0,5860,
        5861,5,104,0,0,5861,5924,5,752,0,0,5862,5924,5,735,0,0,5863,5924,
        5,547,0,0,5864,5924,5,138,0,0,5865,5924,5,736,0,0,5866,5867,5,572,
        0,0,5867,5924,7,87,0,0,5868,5924,5,154,0,0,5869,5870,5,157,0,0,5870,
        5924,7,88,0,0,5871,5924,5,749,0,0,5872,5924,5,750,0,0,5873,5924,
        5,178,0,0,5874,5924,5,185,0,0,5875,5924,5,186,0,0,5876,5924,5,705,
        0,0,5877,5924,5,706,0,0,5878,5924,5,707,0,0,5879,5924,5,709,0,0,
        5880,5924,5,710,0,0,5881,5924,5,711,0,0,5882,5924,5,712,0,0,5883,
        5924,5,714,0,0,5884,5924,5,715,0,0,5885,5924,5,716,0,0,5886,5924,
        5,719,0,0,5887,5924,5,720,0,0,5888,5924,5,721,0,0,5889,5924,5,722,
        0,0,5890,5924,5,723,0,0,5891,5924,5,724,0,0,5892,5924,5,725,0,0,
        5893,5924,5,726,0,0,5894,5924,5,727,0,0,5895,5924,5,728,0,0,5896,
        5924,5,731,0,0,5897,5924,5,732,0,0,5898,5924,5,733,0,0,5899,5924,
        5,737,0,0,5900,5924,5,738,0,0,5901,5924,5,740,0,0,5902,5924,5,741,
        0,0,5903,5924,5,742,0,0,5904,5924,5,745,0,0,5905,5924,5,746,0,0,
        5906,5924,5,747,0,0,5907,5924,5,160,0,0,5908,5924,5,748,0,0,5909,
        5924,5,836,0,0,5910,5924,5,751,0,0,5911,5924,5,753,0,0,5912,5924,
        5,838,0,0,5913,5924,5,754,0,0,5914,5924,5,755,0,0,5915,5916,5,103,
        0,0,5916,5917,5,68,0,0,5917,5924,5,744,0,0,5918,5919,5,154,0,0,5919,
        5920,5,88,0,0,5920,5924,5,744,0,0,5921,5922,5,729,0,0,5922,5924,
        5,730,0,0,5923,5830,1,0,0,0,5923,5834,1,0,0,0,5923,5838,1,0,0,0,
        5923,5848,1,0,0,0,5923,5849,1,0,0,0,5923,5853,1,0,0,0,5923,5854,
        1,0,0,0,5923,5855,1,0,0,0,5923,5856,1,0,0,0,5923,5858,1,0,0,0,5923,
        5859,1,0,0,0,5923,5860,1,0,0,0,5923,5862,1,0,0,0,5923,5863,1,0,0,
        0,5923,5864,1,0,0,0,5923,5865,1,0,0,0,5923,5866,1,0,0,0,5923,5868,
        1,0,0,0,5923,5869,1,0,0,0,5923,5871,1,0,0,0,5923,5872,1,0,0,0,5923,
        5873,1,0,0,0,5923,5874,1,0,0,0,5923,5875,1,0,0,0,5923,5876,1,0,0,
        0,5923,5877,1,0,0,0,5923,5878,1,0,0,0,5923,5879,1,0,0,0,5923,5880,
        1,0,0,0,5923,5881,1,0,0,0,5923,5882,1,0,0,0,5923,5883,1,0,0,0,5923,
        5884,1,0,0,0,5923,5885,1,0,0,0,5923,5886,1,0,0,0,5923,5887,1,0,0,
        0,5923,5888,1,0,0,0,5923,5889,1,0,0,0,5923,5890,1,0,0,0,5923,5891,
        1,0,0,0,5923,5892,1,0,0,0,5923,5893,1,0,0,0,5923,5894,1,0,0,0,5923,
        5895,1,0,0,0,5923,5896,1,0,0,0,5923,5897,1,0,0,0,5923,5898,1,0,0,
        0,5923,5899,1,0,0,0,5923,5900,1,0,0,0,5923,5901,1,0,0,0,5923,5902,
        1,0,0,0,5923,5903,1,0,0,0,5923,5904,1,0,0,0,5923,5905,1,0,0,0,5923,
        5906,1,0,0,0,5923,5907,1,0,0,0,5923,5908,1,0,0,0,5923,5909,1,0,0,
        0,5923,5910,1,0,0,0,5923,5911,1,0,0,0,5923,5912,1,0,0,0,5923,5913,
        1,0,0,0,5923,5914,1,0,0,0,5923,5915,1,0,0,0,5923,5918,1,0,0,0,5923,
        5921,1,0,0,0,5924,517,1,0,0,0,5925,5942,5,850,0,0,5926,5927,5,850,
        0,0,5927,5928,5,865,0,0,5928,5942,5,850,0,0,5929,5930,3,702,351,
        0,5930,5931,5,865,0,0,5931,5932,5,850,0,0,5932,5942,1,0,0,0,5933,
        5934,3,702,351,0,5934,5935,5,865,0,0,5935,5936,3,702,351,0,5936,
        5942,1,0,0,0,5937,5938,3,702,351,0,5938,5939,3,706,353,0,5939,5942,
        1,0,0,0,5940,5942,3,702,351,0,5941,5925,1,0,0,0,5941,5926,1,0,0,
        0,5941,5929,1,0,0,0,5941,5933,1,0,0,0,5941,5937,1,0,0,0,5941,5940,
        1,0,0,0,5942,519,1,0,0,0,5943,5944,3,680,340,0,5944,5945,5,176,0,
        0,5945,5946,3,680,340,0,5946,521,1,0,0,0,5947,5949,5,10,0,0,5948,
        5950,3,532,266,0,5949,5948,1,0,0,0,5949,5950,1,0,0,0,5950,5951,1,
        0,0,0,5951,5952,5,173,0,0,5952,5996,3,646,323,0,5953,5955,5,10,0,
        0,5954,5956,3,532,266,0,5955,5954,1,0,0,0,5955,5956,1,0,0,0,5956,
        5957,1,0,0,0,5957,5958,5,173,0,0,5958,5959,3,648,324,0,5959,5960,
        5,185,0,0,5960,5961,5,77,0,0,5961,5962,5,119,0,0,5962,5967,3,656,
        328,0,5963,5964,5,194,0,0,5964,5965,3,708,354,0,5965,5966,5,19,0,
        0,5966,5968,1,0,0,0,5967,5963,1,0,0,0,5967,5968,1,0,0,0,5968,5996,
        1,0,0,0,5969,5971,5,10,0,0,5970,5972,3,532,266,0,5971,5970,1,0,0,
        0,5971,5972,1,0,0,0,5972,5973,1,0,0,0,5973,5974,5,173,0,0,5974,5975,
        3,648,324,0,5975,5976,5,185,0,0,5976,5977,5,77,0,0,5977,5978,5,119,
        0,0,5978,5982,3,658,329,0,5979,5980,5,188,0,0,5980,5981,5,360,0,
        0,5981,5983,5,882,0,0,5982,5979,1,0,0,0,5982,5983,1,0,0,0,5983,5996,
        1,0,0,0,5984,5986,5,10,0,0,5985,5987,3,532,266,0,5986,5985,1,0,0,
        0,5986,5987,1,0,0,0,5987,5988,1,0,0,0,5988,5989,5,173,0,0,5989,5990,
        3,648,324,0,5990,5991,5,51,0,0,5991,5992,5,77,0,0,5992,5993,5,119,
        0,0,5993,5994,3,656,328,0,5994,5996,1,0,0,0,5995,5947,1,0,0,0,5995,
        5953,1,0,0,0,5995,5969,1,0,0,0,5995,5984,1,0,0,0,5996,523,1,0,0,
        0,5997,5998,5,27,0,0,5998,5999,5,173,0,0,5999,6003,3,646,323,0,6000,
        6002,3,534,267,0,6001,6000,1,0,0,0,6002,6005,1,0,0,0,6003,6001,1,
        0,0,0,6003,6004,1,0,0,0,6004,525,1,0,0,0,6005,6003,1,0,0,0,6006,
        6007,5,329,0,0,6007,6008,5,173,0,0,6008,6010,3,646,323,0,6009,6011,
        7,89,0,0,6010,6009,1,0,0,0,6010,6011,1,0,0,0,6011,527,1,0,0,0,6012,
        6014,5,120,0,0,6013,6015,3,532,266,0,6014,6013,1,0,0,0,6014,6015,
        1,0,0,0,6015,6016,1,0,0,0,6016,6017,7,60,0,0,6017,6018,3,646,323,
        0,6018,529,1,0,0,0,6019,6021,5,562,0,0,6020,6022,3,532,266,0,6021,
        6020,1,0,0,0,6021,6022,1,0,0,0,6022,6023,1,0,0,0,6023,6024,5,173,
        0,0,6024,6026,3,646,323,0,6025,6027,5,549,0,0,6026,6025,1,0,0,0,
        6026,6027,1,0,0,0,6027,6029,1,0,0,0,6028,6030,5,392,0,0,6029,6028,
        1,0,0,0,6029,6030,1,0,0,0,6030,6032,1,0,0,0,6031,6033,5,679,0,0,
        6032,6031,1,0,0,0,6032,6033,1,0,0,0,6033,531,1,0,0,0,6034,6035,7,
        90,0,0,6035,533,1,0,0,0,6036,6037,5,65,0,0,6037,6044,5,677,0,0,6038,
        6044,5,549,0,0,6039,6044,5,396,0,0,6040,6044,5,484,0,0,6041,6044,
        5,392,0,0,6042,6044,5,327,0,0,6043,6036,1,0,0,0,6043,6038,1,0,0,
        0,6043,6039,1,0,0,0,6043,6040,1,0,0,0,6043,6041,1,0,0,0,6043,6042,
        1,0,0,0,6044,535,1,0,0,0,6045,6047,5,34,0,0,6046,6048,5,307,0,0,
        6047,6046,1,0,0,0,6047,6048,1,0,0,0,6048,6049,1,0,0,0,6049,6051,
        5,409,0,0,6050,6052,3,756,378,0,6051,6050,1,0,0,0,6051,6052,1,0,
        0,0,6052,6053,1,0,0,0,6053,6054,3,626,313,0,6054,6055,5,580,0,0,
        6055,6056,7,91,0,0,6056,6057,5,603,0,0,6057,6058,5,882,0,0,6058,
        537,1,0,0,0,6059,6060,5,432,0,0,6060,6061,5,344,0,0,6061,6066,3,
        702,351,0,6062,6063,5,868,0,0,6063,6065,3,702,351,0,6064,6062,1,
        0,0,0,6065,6068,1,0,0,0,6066,6064,1,0,0,0,6066,6067,1,0,0,0,6067,
        6078,1,0,0,0,6068,6066,1,0,0,0,6069,6070,5,155,0,0,6070,6075,3,540,
        270,0,6071,6072,5,868,0,0,6072,6074,3,540,270,0,6073,6071,1,0,0,
        0,6074,6077,1,0,0,0,6075,6073,1,0,0,0,6075,6076,1,0,0,0,6076,6079,
        1,0,0,0,6077,6075,1,0,0,0,6078,6069,1,0,0,0,6078,6079,1,0,0,0,6079,
        539,1,0,0,0,6080,6081,7,92,0,0,6081,6082,3,698,349,0,6082,6083,5,
        857,0,0,6083,6084,3,800,400,0,6084,541,1,0,0,0,6085,6086,5,673,0,
        0,6086,6087,5,344,0,0,6087,6092,3,702,351,0,6088,6089,5,868,0,0,
        6089,6091,3,702,351,0,6090,6088,1,0,0,0,6091,6094,1,0,0,0,6092,6090,
        1,0,0,0,6092,6093,1,0,0,0,6093,543,1,0,0,0,6094,6092,1,0,0,0,6095,
        6096,5,432,0,0,6096,6097,5,534,0,0,6097,6098,3,702,351,0,6098,6099,
        5,603,0,0,6099,6100,5,882,0,0,6100,545,1,0,0,0,6101,6102,5,673,0,
        0,6102,6103,5,534,0,0,6103,6104,3,702,351,0,6104,547,1,0,0,0,6105,
        6106,5,713,0,0,6106,6107,5,450,0,0,6107,6108,5,360,0,0,6108,6110,
        5,367,0,0,6109,6111,5,857,0,0,6110,6109,1,0,0,0,6110,6111,1,0,0,
        0,6111,6112,1,0,0,0,6112,6136,5,882,0,0,6113,6114,5,713,0,0,6114,
        6115,5,433,0,0,6115,6116,5,68,0,0,6116,6117,3,672,336,0,6117,6118,
        5,423,0,0,6118,6119,5,20,0,0,6119,6126,5,882,0,0,6120,6121,5,360,
        0,0,6121,6123,5,367,0,0,6122,6124,5,857,0,0,6123,6122,1,0,0,0,6123,
        6124,1,0,0,0,6124,6125,1,0,0,0,6125,6127,5,882,0,0,6126,6120,1,0,
        0,0,6126,6127,1,0,0,0,6127,6133,1,0,0,0,6128,6130,5,144,0,0,6129,
        6131,5,502,0,0,6130,6129,1,0,0,0,6130,6131,1,0,0,0,6131,6132,1,0,
        0,0,6132,6134,5,169,0,0,6133,6128,1,0,0,0,6133,6134,1,0,0,0,6134,
        6136,1,0,0,0,6135,6105,1,0,0,0,6135,6113,1,0,0,0,6136,549,1,0,0,
        0,6137,6138,5,155,0,0,6138,6139,3,554,277,0,6139,6142,7,93,0,0,6140,
        6143,3,800,400,0,6141,6143,5,119,0,0,6142,6140,1,0,0,0,6142,6141,
        1,0,0,0,6143,6153,1,0,0,0,6144,6145,5,868,0,0,6145,6146,3,554,277,
        0,6146,6149,7,93,0,0,6147,6150,3,800,400,0,6148,6150,5,119,0,0,6149,
        6147,1,0,0,0,6149,6148,1,0,0,0,6150,6152,1,0,0,0,6151,6144,1,0,0,
        0,6152,6155,1,0,0,0,6153,6151,1,0,0,0,6153,6154,1,0,0,0,6154,6190,
        1,0,0,0,6155,6153,1,0,0,0,6156,6157,5,155,0,0,6157,6160,3,54,27,
        0,6158,6161,3,684,342,0,6159,6161,5,42,0,0,6160,6158,1,0,0,0,6160,
        6159,1,0,0,0,6161,6190,1,0,0,0,6162,6163,5,155,0,0,6163,6170,5,497,
        0,0,6164,6167,3,684,342,0,6165,6166,5,28,0,0,6166,6168,3,686,343,
        0,6167,6165,1,0,0,0,6167,6168,1,0,0,0,6168,6171,1,0,0,0,6169,6171,
        5,42,0,0,6170,6164,1,0,0,0,6170,6169,1,0,0,0,6171,6190,1,0,0,0,6172,
        6190,3,484,242,0,6173,6190,3,336,168,0,6174,6190,3,334,167,0,6175,
        6176,5,155,0,0,6176,6177,3,698,349,0,6177,6178,7,93,0,0,6178,6186,
        3,800,400,0,6179,6180,5,868,0,0,6180,6181,3,698,349,0,6181,6182,
        7,93,0,0,6182,6183,3,800,400,0,6183,6185,1,0,0,0,6184,6179,1,0,0,
        0,6185,6188,1,0,0,0,6186,6184,1,0,0,0,6186,6187,1,0,0,0,6187,6190,
        1,0,0,0,6188,6186,1,0,0,0,6189,6137,1,0,0,0,6189,6156,1,0,0,0,6189,
        6162,1,0,0,0,6189,6172,1,0,0,0,6189,6173,1,0,0,0,6189,6174,1,0,0,
        0,6189,6175,1,0,0,0,6190,551,1,0,0,0,6191,6192,5,157,0,0,6192,6193,
        7,62,0,0,6193,6376,5,452,0,0,6194,6195,5,157,0,0,6195,6196,7,94,
        0,0,6196,6199,5,386,0,0,6197,6198,5,80,0,0,6198,6200,5,882,0,0,6199,
        6197,1,0,0,0,6199,6200,1,0,0,0,6200,6203,1,0,0,0,6201,6202,5,68,
        0,0,6202,6204,3,708,354,0,6203,6201,1,0,0,0,6203,6204,1,0,0,0,6204,
        6212,1,0,0,0,6205,6209,5,100,0,0,6206,6207,3,708,354,0,6207,6208,
        5,868,0,0,6208,6210,1,0,0,0,6209,6206,1,0,0,0,6209,6210,1,0,0,0,
        6210,6211,1,0,0,0,6211,6213,3,708,354,0,6212,6205,1,0,0,0,6212,6213,
        1,0,0,0,6213,6215,1,0,0,0,6214,6216,3,384,192,0,6215,6214,1,0,0,
        0,6215,6216,1,0,0,0,6216,6376,1,0,0,0,6217,6218,5,157,0,0,6218,6220,
        3,556,278,0,6219,6221,3,558,279,0,6220,6219,1,0,0,0,6220,6221,1,
        0,0,0,6221,6376,1,0,0,0,6222,6224,5,157,0,0,6223,6225,5,392,0,0,
        6224,6223,1,0,0,0,6224,6225,1,0,0,0,6225,6227,1,0,0,0,6226,6228,
        5,408,0,0,6227,6226,1,0,0,0,6227,6228,1,0,0,0,6228,6229,1,0,0,0,
        6229,6230,7,46,0,0,6230,6231,7,95,0,0,6231,6234,3,648,324,0,6232,
        6233,7,95,0,0,6233,6235,3,624,312,0,6234,6232,1,0,0,0,6234,6235,
        1,0,0,0,6235,6237,1,0,0,0,6236,6238,3,558,279,0,6237,6236,1,0,0,
        0,6237,6238,1,0,0,0,6238,6376,1,0,0,0,6239,6240,5,157,0,0,6240,6241,
        5,34,0,0,6241,6243,7,0,0,0,6242,6244,3,756,378,0,6243,6242,1,0,0,
        0,6243,6244,1,0,0,0,6244,6245,1,0,0,0,6245,6376,3,624,312,0,6246,
        6247,5,157,0,0,6247,6248,5,34,0,0,6248,6249,7,96,0,0,6249,6376,3,
        698,349,0,6250,6251,5,157,0,0,6251,6252,5,34,0,0,6252,6253,5,409,
        0,0,6253,6376,3,628,314,0,6254,6255,5,157,0,0,6255,6256,5,34,0,0,
        6256,6257,5,684,0,0,6257,6376,3,632,316,0,6258,6259,5,157,0,0,6259,
        6260,5,34,0,0,6260,6261,5,173,0,0,6261,6376,3,648,324,0,6262,6263,
        5,157,0,0,6263,6264,5,34,0,0,6264,6265,5,678,0,0,6265,6376,3,680,
        340,0,6266,6267,5,157,0,0,6267,6268,5,380,0,0,6268,6269,3,688,344,
        0,6269,6270,7,97,0,0,6270,6376,1,0,0,0,6271,6272,5,157,0,0,6272,
        6376,3,560,280,0,6273,6274,5,157,0,0,6274,6282,7,98,0,0,6275,6279,
        5,100,0,0,6276,6277,3,708,354,0,6277,6278,5,868,0,0,6278,6280,1,
        0,0,0,6279,6276,1,0,0,0,6279,6280,1,0,0,0,6280,6281,1,0,0,0,6281,
        6283,3,708,354,0,6282,6275,1,0,0,0,6282,6283,1,0,0,0,6283,6376,1,
        0,0,0,6284,6285,5,157,0,0,6285,6286,5,262,0,0,6286,6287,5,866,0,
        0,6287,6288,5,850,0,0,6288,6289,5,867,0,0,6289,6376,7,98,0,0,6290,
        6291,5,157,0,0,6291,6294,3,562,281,0,6292,6293,7,95,0,0,6293,6295,
        3,624,312,0,6294,6292,1,0,0,0,6294,6295,1,0,0,0,6295,6297,1,0,0,
        0,6296,6298,3,558,279,0,6297,6296,1,0,0,0,6297,6298,1,0,0,0,6298,
        6376,1,0,0,0,6299,6300,5,157,0,0,6300,6301,5,132,0,0,6301,6302,5,
        336,0,0,6302,6376,3,698,349,0,6303,6304,5,157,0,0,6304,6305,5,409,
        0,0,6305,6306,5,336,0,0,6306,6376,3,628,314,0,6307,6308,5,157,0,
        0,6308,6315,5,414,0,0,6309,6310,5,65,0,0,6310,6313,3,652,326,0,6311,
        6312,5,188,0,0,6312,6314,3,650,325,0,6313,6311,1,0,0,0,6313,6314,
        1,0,0,0,6314,6316,1,0,0,0,6315,6309,1,0,0,0,6315,6316,1,0,0,0,6316,
        6376,1,0,0,0,6317,6319,5,157,0,0,6318,6320,5,392,0,0,6319,6318,1,
        0,0,0,6319,6320,1,0,0,0,6320,6321,1,0,0,0,6321,6322,7,99,0,0,6322,
        6323,7,95,0,0,6323,6326,3,648,324,0,6324,6325,7,95,0,0,6325,6327,
        3,624,312,0,6326,6324,1,0,0,0,6326,6327,1,0,0,0,6327,6330,1,0,0,
        0,6328,6329,5,192,0,0,6329,6331,3,800,400,0,6330,6328,1,0,0,0,6330,
        6331,1,0,0,0,6331,6376,1,0,0,0,6332,6333,5,157,0,0,6333,6334,5,516,
        0,0,6334,6337,5,752,0,0,6335,6336,7,95,0,0,6336,6338,3,624,312,0,
        6337,6335,1,0,0,0,6337,6338,1,0,0,0,6338,6340,1,0,0,0,6339,6341,
        3,558,279,0,6340,6339,1,0,0,0,6340,6341,1,0,0,0,6341,6376,1,0,0,
        0,6342,6343,5,157,0,0,6343,6352,5,545,0,0,6344,6349,3,564,282,0,
        6345,6346,5,868,0,0,6346,6348,3,564,282,0,6347,6345,1,0,0,0,6348,
        6351,1,0,0,0,6349,6347,1,0,0,0,6349,6350,1,0,0,0,6350,6353,1,0,0,
        0,6351,6349,1,0,0,0,6352,6344,1,0,0,0,6352,6353,1,0,0,0,6353,6357,
        1,0,0,0,6354,6355,5,65,0,0,6355,6356,5,548,0,0,6356,6358,3,708,354,
        0,6357,6354,1,0,0,0,6357,6358,1,0,0,0,6358,6365,1,0,0,0,6359,6360,
        5,100,0,0,6360,6363,3,708,354,0,6361,6362,5,509,0,0,6362,6364,3,
        708,354,0,6363,6361,1,0,0,0,6363,6364,1,0,0,0,6364,6366,1,0,0,0,
        6365,6359,1,0,0,0,6365,6366,1,0,0,0,6366,6376,1,0,0,0,6367,6368,
        5,157,0,0,6368,6369,7,63,0,0,6369,6371,5,645,0,0,6370,6372,3,384,
        192,0,6371,6370,1,0,0,0,6371,6372,1,0,0,0,6372,6376,1,0,0,0,6373,
        6374,5,157,0,0,6374,6376,5,564,0,0,6375,6191,1,0,0,0,6375,6194,1,
        0,0,0,6375,6217,1,0,0,0,6375,6222,1,0,0,0,6375,6239,1,0,0,0,6375,
        6246,1,0,0,0,6375,6250,1,0,0,0,6375,6254,1,0,0,0,6375,6258,1,0,0,
        0,6375,6262,1,0,0,0,6375,6266,1,0,0,0,6375,6271,1,0,0,0,6375,6273,
        1,0,0,0,6375,6284,1,0,0,0,6375,6290,1,0,0,0,6375,6299,1,0,0,0,6375,
        6303,1,0,0,0,6375,6307,1,0,0,0,6375,6317,1,0,0,0,6375,6332,1,0,0,
        0,6375,6342,1,0,0,0,6375,6367,1,0,0,0,6375,6373,1,0,0,0,6376,553,
        1,0,0,0,6377,6388,5,892,0,0,6378,6388,5,893,0,0,6379,6380,5,870,
        0,0,6380,6382,5,870,0,0,6381,6379,1,0,0,0,6381,6382,1,0,0,0,6382,
        6383,1,0,0,0,6383,6385,7,100,0,0,6384,6381,1,0,0,0,6384,6385,1,0,
        0,0,6385,6386,1,0,0,0,6386,6388,3,702,351,0,6387,6377,1,0,0,0,6387,
        6378,1,0,0,0,6387,6384,1,0,0,0,6388,555,1,0,0,0,6389,6390,5,26,0,
        0,6390,6404,5,155,0,0,6391,6404,5,823,0,0,6392,6404,5,824,0,0,6393,
        6404,5,40,0,0,6394,6404,5,153,0,0,6395,6396,5,409,0,0,6396,6404,
        5,645,0,0,6397,6398,5,132,0,0,6398,6404,5,645,0,0,6399,6401,7,61,
        0,0,6400,6399,1,0,0,0,6400,6401,1,0,0,0,6401,6402,1,0,0,0,6402,6404,
        7,101,0,0,6403,6389,1,0,0,0,6403,6391,1,0,0,0,6403,6392,1,0,0,0,
        6403,6393,1,0,0,0,6403,6394,1,0,0,0,6403,6395,1,0,0,0,6403,6397,
        1,0,0,0,6403,6400,1,0,0,0,6404,557,1,0,0,0,6405,6406,5,99,0,0,6406,
        6410,5,882,0,0,6407,6408,5,192,0,0,6408,6410,3,800,400,0,6409,6405,
        1,0,0,0,6409,6407,1,0,0,0,6410,559,1,0,0,0,6411,6413,5,647,0,0,6412,
        6411,1,0,0,0,6412,6413,1,0,0,0,6413,6414,1,0,0,0,6414,6429,5,381,
        0,0,6415,6416,5,453,0,0,6416,6429,5,645,0,0,6417,6429,5,536,0,0,
        6418,6429,5,734,0,0,6419,6421,5,408,0,0,6420,6419,1,0,0,0,6420,6421,
        1,0,0,0,6421,6422,1,0,0,0,6422,6429,5,544,0,0,6423,6429,5,546,0,
        0,6424,6425,5,598,0,0,6425,6429,5,422,0,0,6426,6429,5,312,0,0,6427,
        6429,5,356,0,0,6428,6412,1,0,0,0,6428,6415,1,0,0,0,6428,6417,1,0,
        0,0,6428,6418,1,0,0,0,6428,6420,1,0,0,0,6428,6423,1,0,0,0,6428,6424,
        1,0,0,0,6428,6426,1,0,0,0,6428,6427,1,0,0,0,6429,561,1,0,0,0,6430,
        6442,5,386,0,0,6431,6432,5,173,0,0,6432,6442,5,645,0,0,6433,6435,
        5,392,0,0,6434,6433,1,0,0,0,6434,6435,1,0,0,0,6435,6437,1,0,0,0,
        6436,6438,5,408,0,0,6437,6436,1,0,0,0,6437,6438,1,0,0,0,6438,6439,
        1,0,0,0,6439,6442,5,752,0,0,6440,6442,5,667,0,0,6441,6430,1,0,0,
        0,6441,6431,1,0,0,0,6441,6434,1,0,0,0,6441,6440,1,0,0,0,6442,563,
        1,0,0,0,6443,6456,5,7,0,0,6444,6445,5,320,0,0,6445,6456,5,437,0,
        0,6446,6447,5,355,0,0,6447,6456,5,656,0,0,6448,6456,5,358,0,0,6449,
        6456,5,439,0,0,6450,6456,5,802,0,0,6451,6452,5,521,0,0,6452,6456,
        5,397,0,0,6453,6456,5,605,0,0,6454,6456,5,655,0,0,6455,6443,1,0,
        0,0,6455,6444,1,0,0,0,6455,6446,1,0,0,0,6455,6448,1,0,0,0,6455,6449,
        1,0,0,0,6455,6450,1,0,0,0,6455,6451,1,0,0,0,6455,6453,1,0,0,0,6455,
        6454,1,0,0,0,6456,565,1,0,0,0,6457,6458,5,318,0,0,6458,6459,5,882,
        0,0,6459,567,1,0,0,0,6460,6461,5,324,0,0,6461,6479,5,82,0,0,6462,
        6467,3,588,294,0,6463,6464,5,868,0,0,6464,6466,3,588,294,0,6465,
        6463,1,0,0,0,6466,6469,1,0,0,0,6467,6465,1,0,0,0,6467,6468,1,0,0,
        0,6468,6480,1,0,0,0,6469,6467,1,0,0,0,6470,6471,3,648,324,0,6471,
        6472,5,130,0,0,6472,6475,5,866,0,0,6473,6476,3,666,333,0,6474,6476,
        5,7,0,0,6475,6473,1,0,0,0,6475,6474,1,0,0,0,6476,6477,1,0,0,0,6477,
        6478,5,867,0,0,6478,6480,1,0,0,0,6479,6462,1,0,0,0,6479,6470,1,0,
        0,0,6480,6481,1,0,0,0,6481,6482,5,80,0,0,6482,6483,3,624,312,0,6483,
        569,1,0,0,0,6484,6486,5,404,0,0,6485,6487,3,532,266,0,6486,6485,
        1,0,0,0,6486,6487,1,0,0,0,6487,6488,1,0,0,0,6488,6493,3,590,295,
        0,6489,6490,5,868,0,0,6490,6492,3,590,295,0,6491,6489,1,0,0,0,6492,
        6495,1,0,0,0,6493,6491,1,0,0,0,6493,6494,1,0,0,0,6494,571,1,0,0,
        0,6495,6493,1,0,0,0,6496,6498,5,94,0,0,6497,6499,7,102,0,0,6498,
        6497,1,0,0,0,6498,6499,1,0,0,0,6499,6500,1,0,0,0,6500,6501,3,800,
        400,0,6501,573,1,0,0,0,6502,6503,5,103,0,0,6503,6504,5,82,0,0,6504,
        6505,5,88,0,0,6505,6506,5,324,0,0,6506,6511,3,594,297,0,6507,6508,
        5,868,0,0,6508,6510,3,594,297,0,6509,6507,1,0,0,0,6510,6513,1,0,
        0,0,6511,6509,1,0,0,0,6511,6512,1,0,0,0,6512,575,1,0,0,0,6513,6511,
        1,0,0,0,6514,6515,5,575,0,0,6515,6520,3,578,289,0,6516,6517,5,868,
        0,0,6517,6519,3,578,289,0,6518,6516,1,0,0,0,6519,6522,1,0,0,0,6520,
        6518,1,0,0,0,6520,6521,1,0,0,0,6521,577,1,0,0,0,6522,6520,1,0,0,
        0,6523,6529,5,453,0,0,6524,6529,5,563,0,0,6525,6526,5,548,0,0,6526,
        6529,5,324,0,0,6527,6529,5,598,0,0,6528,6523,1,0,0,0,6528,6524,1,
        0,0,0,6528,6525,1,0,0,0,6528,6527,1,0,0,0,6529,579,1,0,0,0,6530,
        6531,5,575,0,0,6531,6536,5,531,0,0,6532,6534,3,754,377,0,6533,6532,
        1,0,0,0,6533,6534,1,0,0,0,6534,6535,1,0,0,0,6535,6537,3,702,351,
        0,6536,6533,1,0,0,0,6536,6537,1,0,0,0,6537,581,1,0,0,0,6538,6539,
        5,575,0,0,6539,6541,7,63,0,0,6540,6542,5,7,0,0,6541,6540,1,0,0,0,
        6541,6542,1,0,0,0,6542,6544,1,0,0,0,6543,6545,3,384,192,0,6544,6543,
        1,0,0,0,6544,6545,1,0,0,0,6545,583,1,0,0,0,6546,6547,5,576,0,0,6547,
        585,1,0,0,0,6548,6549,5,749,0,0,6549,587,1,0,0,0,6550,6556,3,648,
        324,0,6551,6552,7,18,0,0,6552,6553,5,866,0,0,6553,6554,3,636,318,
        0,6554,6555,5,867,0,0,6555,6557,1,0,0,0,6556,6551,1,0,0,0,6556,6557,
        1,0,0,0,6557,589,1,0,0,0,6558,6577,5,366,0,0,6559,6577,5,422,0,0,
        6560,6562,7,103,0,0,6561,6560,1,0,0,0,6561,6562,1,0,0,0,6562,6563,
        1,0,0,0,6563,6577,5,452,0,0,6564,6577,5,517,0,0,6565,6577,5,734,
        0,0,6566,6567,5,548,0,0,6567,6577,5,324,0,0,6568,6577,5,645,0,0,
        6569,6577,5,680,0,0,6570,6574,5,752,0,0,6571,6572,5,194,0,0,6572,
        6573,5,135,0,0,6573,6575,5,104,0,0,6574,6571,1,0,0,0,6574,6575,1,
        0,0,0,6575,6577,1,0,0,0,6576,6558,1,0,0,0,6576,6559,1,0,0,0,6576,
        6561,1,0,0,0,6576,6564,1,0,0,0,6576,6565,1,0,0,0,6576,6566,1,0,0,
        0,6576,6568,1,0,0,0,6576,6569,1,0,0,0,6576,6570,1,0,0,0,6577,6591,
        1,0,0,0,6578,6579,5,556,0,0,6579,6581,5,452,0,0,6580,6582,3,384,
        192,0,6581,6580,1,0,0,0,6581,6582,1,0,0,0,6582,6591,1,0,0,0,6583,
        6585,7,60,0,0,6584,6586,3,646,323,0,6585,6584,1,0,0,0,6585,6586,
        1,0,0,0,6586,6588,1,0,0,0,6587,6589,3,592,296,0,6588,6587,1,0,0,
        0,6588,6589,1,0,0,0,6589,6591,1,0,0,0,6590,6576,1,0,0,0,6590,6578,
        1,0,0,0,6590,6583,1,0,0,0,6591,591,1,0,0,0,6592,6593,5,194,0,0,6593,
        6594,5,135,0,0,6594,6598,5,104,0,0,6595,6596,5,65,0,0,6596,6598,
        5,391,0,0,6597,6592,1,0,0,0,6597,6595,1,0,0,0,6598,593,1,0,0,0,6599,
        6607,3,648,324,0,6600,6601,5,130,0,0,6601,6604,5,866,0,0,6602,6605,
        3,666,333,0,6603,6605,5,7,0,0,6604,6602,1,0,0,0,6604,6603,1,0,0,
        0,6605,6606,1,0,0,0,6606,6608,5,867,0,0,6607,6600,1,0,0,0,6607,6608,
        1,0,0,0,6608,6616,1,0,0,0,6609,6611,7,18,0,0,6610,6609,1,0,0,0,6610,
        6611,1,0,0,0,6611,6612,1,0,0,0,6612,6613,5,866,0,0,6613,6614,3,636,
        318,0,6614,6615,5,867,0,0,6615,6617,1,0,0,0,6616,6610,1,0,0,0,6616,
        6617,1,0,0,0,6617,6620,1,0,0,0,6618,6619,5,79,0,0,6619,6621,5,446,
        0,0,6620,6618,1,0,0,0,6620,6621,1,0,0,0,6621,595,1,0,0,0,6622,6623,
        7,104,0,0,6623,6626,3,648,324,0,6624,6627,3,658,329,0,6625,6627,
        5,882,0,0,6626,6624,1,0,0,0,6626,6625,1,0,0,0,6626,6627,1,0,0,0,
        6627,597,1,0,0,0,6628,6634,7,104,0,0,6629,6635,5,392,0,0,6630,6635,
        5,528,0,0,6631,6632,5,826,0,0,6632,6633,5,857,0,0,6633,6635,7,105,
        0,0,6634,6629,1,0,0,0,6634,6630,1,0,0,0,6634,6631,1,0,0,0,6634,6635,
        1,0,0,0,6635,6636,1,0,0,0,6636,6637,3,620,310,0,6637,599,1,0,0,0,
        6638,6639,7,104,0,0,6639,6643,5,10,0,0,6640,6641,5,826,0,0,6641,
        6642,5,857,0,0,6642,6644,5,666,0,0,6643,6640,1,0,0,0,6643,6644,1,
        0,0,0,6644,6645,1,0,0,0,6645,6646,3,204,102,0,6646,601,1,0,0,0,6647,
        6648,5,419,0,0,6648,6649,5,882,0,0,6649,603,1,0,0,0,6650,6651,5,
        187,0,0,6651,6652,3,624,312,0,6652,605,1,0,0,0,6653,6661,5,158,0,
        0,6654,6656,5,164,0,0,6655,6657,5,682,0,0,6656,6655,1,0,0,0,6656,
        6657,1,0,0,0,6657,6658,1,0,0,0,6658,6662,3,712,356,0,6659,6662,5,
        889,0,0,6660,6662,5,890,0,0,6661,6654,1,0,0,0,6661,6659,1,0,0,0,
        6661,6660,1,0,0,0,6662,6672,1,0,0,0,6663,6664,5,155,0,0,6664,6669,
        3,610,305,0,6665,6666,5,868,0,0,6666,6668,3,610,305,0,6667,6665,
        1,0,0,0,6668,6671,1,0,0,0,6669,6667,1,0,0,0,6669,6670,1,0,0,0,6670,
        6673,1,0,0,0,6671,6669,1,0,0,0,6672,6663,1,0,0,0,6672,6673,1,0,0,
        0,6673,607,1,0,0,0,6674,6682,5,145,0,0,6675,6677,5,164,0,0,6676,
        6678,5,682,0,0,6677,6676,1,0,0,0,6677,6678,1,0,0,0,6678,6679,1,0,
        0,0,6679,6683,3,712,356,0,6680,6683,5,889,0,0,6681,6683,5,890,0,
        0,6682,6675,1,0,0,0,6682,6680,1,0,0,0,6682,6681,1,0,0,0,6682,6683,
        1,0,0,0,6683,6693,1,0,0,0,6684,6685,5,155,0,0,6685,6690,3,610,305,
        0,6686,6687,5,868,0,0,6687,6689,3,610,305,0,6688,6686,1,0,0,0,6689,
        6692,1,0,0,0,6690,6688,1,0,0,0,6690,6691,1,0,0,0,6691,6694,1,0,0,
        0,6692,6690,1,0,0,0,6693,6684,1,0,0,0,6693,6694,1,0,0,0,6694,609,
        1,0,0,0,6695,6696,7,106,0,0,6696,6701,5,857,0,0,6697,6702,3,712,
        356,0,6698,6702,5,883,0,0,6699,6702,3,682,341,0,6700,6702,3,704,
        352,0,6701,6697,1,0,0,0,6701,6698,1,0,0,0,6701,6699,1,0,0,0,6701,
        6700,1,0,0,0,6702,611,1,0,0,0,6703,6705,5,194,0,0,6704,6706,5,552,
        0,0,6705,6704,1,0,0,0,6705,6706,1,0,0,0,6706,6707,1,0,0,0,6707,6712,
        3,48,24,0,6708,6709,5,868,0,0,6709,6711,3,48,24,0,6710,6708,1,0,
        0,0,6711,6714,1,0,0,0,6712,6710,1,0,0,0,6712,6713,1,0,0,0,6713,613,
        1,0,0,0,6714,6712,1,0,0,0,6715,6716,5,173,0,0,6716,6718,3,648,324,
        0,6717,6719,3,252,126,0,6718,6717,1,0,0,0,6718,6719,1,0,0,0,6719,
        6721,1,0,0,0,6720,6722,3,312,156,0,6721,6720,1,0,0,0,6721,6722,1,
        0,0,0,6722,615,1,0,0,0,6723,6725,5,72,0,0,6724,6726,7,107,0,0,6725,
        6724,1,0,0,0,6725,6726,1,0,0,0,6726,6727,1,0,0,0,6727,6759,5,48,
        0,0,6728,6729,3,554,277,0,6729,6730,5,857,0,0,6730,6738,7,108,0,
        0,6731,6732,5,868,0,0,6732,6733,3,554,277,0,6733,6734,5,857,0,0,
        6734,6735,7,108,0,0,6735,6737,1,0,0,0,6736,6731,1,0,0,0,6737,6740,
        1,0,0,0,6738,6736,1,0,0,0,6738,6739,1,0,0,0,6739,6760,1,0,0,0,6740,
        6738,1,0,0,0,6741,6744,5,30,0,0,6742,6745,3,708,354,0,6743,6745,
        3,554,277,0,6744,6742,1,0,0,0,6744,6743,1,0,0,0,6745,6746,1,0,0,
        0,6746,6747,3,554,277,0,6747,6748,5,857,0,0,6748,6756,3,618,309,
        0,6749,6750,5,868,0,0,6750,6751,3,554,277,0,6751,6752,5,857,0,0,
        6752,6753,3,618,309,0,6753,6755,1,0,0,0,6754,6749,1,0,0,0,6755,6758,
        1,0,0,0,6756,6754,1,0,0,0,6756,6757,1,0,0,0,6757,6760,1,0,0,0,6758,
        6756,1,0,0,0,6759,6728,1,0,0,0,6759,6741,1,0,0,0,6760,617,1,0,0,
        0,6761,6762,7,109,0,0,6762,619,1,0,0,0,6763,6769,3,204,102,0,6764,
        6769,3,180,90,0,6765,6769,3,186,93,0,6766,6769,3,202,101,0,6767,
        6769,3,214,107,0,6768,6763,1,0,0,0,6768,6764,1,0,0,0,6768,6765,1,
        0,0,0,6768,6766,1,0,0,0,6768,6767,1,0,0,0,6769,6774,1,0,0,0,6770,
        6771,5,65,0,0,6771,6772,5,349,0,0,6772,6774,3,702,351,0,6773,6768,
        1,0,0,0,6773,6770,1,0,0,0,6774,621,1,0,0,0,6775,6776,3,698,349,0,
        6776,623,1,0,0,0,6777,6778,3,698,349,0,6778,625,1,0,0,0,6779,6780,
        3,698,349,0,6780,627,1,0,0,0,6781,6782,3,698,349,0,6782,629,1,0,
        0,0,6783,6784,3,698,349,0,6784,631,1,0,0,0,6785,6786,3,698,349,0,
        6786,633,1,0,0,0,6787,6788,3,702,351,0,6788,635,1,0,0,0,6789,6794,
        3,638,319,0,6790,6791,5,868,0,0,6791,6793,3,638,319,0,6792,6790,
        1,0,0,0,6793,6796,1,0,0,0,6794,6792,1,0,0,0,6794,6795,1,0,0,0,6795,
        637,1,0,0,0,6796,6794,1,0,0,0,6797,6798,3,702,351,0,6798,639,1,0,
        0,0,6799,6800,3,702,351,0,6800,641,1,0,0,0,6801,6802,3,702,351,0,
        6802,643,1,0,0,0,6803,6804,3,698,349,0,6804,645,1,0,0,0,6805,6810,
        3,648,324,0,6806,6807,5,868,0,0,6807,6809,3,648,324,0,6808,6806,
        1,0,0,0,6809,6812,1,0,0,0,6810,6808,1,0,0,0,6810,6811,1,0,0,0,6811,
        647,1,0,0,0,6812,6810,1,0,0,0,6813,6814,3,698,349,0,6814,649,1,0,
        0,0,6815,6820,3,652,326,0,6816,6817,5,868,0,0,6817,6819,3,652,326,
        0,6818,6816,1,0,0,0,6819,6822,1,0,0,0,6820,6818,1,0,0,0,6820,6821,
        1,0,0,0,6821,651,1,0,0,0,6822,6820,1,0,0,0,6823,6826,3,680,340,0,
        6824,6826,3,702,351,0,6825,6823,1,0,0,0,6825,6824,1,0,0,0,6826,653,
        1,0,0,0,6827,6832,3,702,351,0,6828,6830,3,706,353,0,6829,6831,3,
        706,353,0,6830,6829,1,0,0,0,6830,6831,1,0,0,0,6831,6833,1,0,0,0,
        6832,6828,1,0,0,0,6832,6833,1,0,0,0,6833,6842,1,0,0,0,6834,6836,
        9,0,0,0,6835,6834,1,0,0,0,6835,6836,1,0,0,0,6836,6837,1,0,0,0,6837,
        6839,3,706,353,0,6838,6840,3,706,353,0,6839,6838,1,0,0,0,6839,6840,
        1,0,0,0,6840,6842,1,0,0,0,6841,6827,1,0,0,0,6841,6835,1,0,0,0,6842,
        655,1,0,0,0,6843,6848,3,658,329,0,6844,6845,5,868,0,0,6845,6847,
        3,658,329,0,6846,6844,1,0,0,0,6847,6850,1,0,0,0,6848,6846,1,0,0,
        0,6848,6849,1,0,0,0,6849,657,1,0,0,0,6850,6848,1,0,0,0,6851,6856,
        3,702,351,0,6852,6854,3,706,353,0,6853,6855,3,706,353,0,6854,6853,
        1,0,0,0,6854,6855,1,0,0,0,6855,6857,1,0,0,0,6856,6852,1,0,0,0,6856,
        6857,1,0,0,0,6857,6867,1,0,0,0,6858,6860,9,0,0,0,6859,6858,1,0,0,
        0,6859,6860,1,0,0,0,6860,6861,1,0,0,0,6861,6863,3,706,353,0,6862,
        6864,3,706,353,0,6863,6862,1,0,0,0,6863,6864,1,0,0,0,6864,6867,1,
        0,0,0,6865,6867,4,329,3,0,6866,6851,1,0,0,0,6866,6859,1,0,0,0,6866,
        6865,1,0,0,0,6867,659,1,0,0,0,6868,6869,3,702,351,0,6869,661,1,0,
        0,0,6870,6871,3,702,351,0,6871,663,1,0,0,0,6872,6873,3,702,351,0,
        6873,665,1,0,0,0,6874,6879,3,668,334,0,6875,6876,5,868,0,0,6876,
        6878,3,668,334,0,6877,6875,1,0,0,0,6878,6881,1,0,0,0,6879,6877,1,
        0,0,0,6879,6880,1,0,0,0,6880,667,1,0,0,0,6881,6879,1,0,0,0,6882,
        6883,3,702,351,0,6883,669,1,0,0,0,6884,6889,3,702,351,0,6885,6886,
        5,866,0,0,6886,6887,3,708,354,0,6887,6888,5,867,0,0,6888,6890,1,
        0,0,0,6889,6885,1,0,0,0,6889,6890,1,0,0,0,6890,6893,1,0,0,0,6891,
        6893,3,800,400,0,6892,6884,1,0,0,0,6892,6891,1,0,0,0,6893,6895,1,
        0,0,0,6894,6896,7,54,0,0,6895,6894,1,0,0,0,6895,6896,1,0,0,0,6896,
        671,1,0,0,0,6897,6898,3,674,337,0,6898,6899,5,878,0,0,6899,6900,
        3,708,354,0,6900,673,1,0,0,0,6901,6902,3,676,338,0,6902,6903,5,891,
        0,0,6903,675,1,0,0,0,6904,6909,5,882,0,0,6905,6909,5,889,0,0,6906,
        6909,5,704,0,0,6907,6909,3,830,415,0,6908,6904,1,0,0,0,6908,6905,
        1,0,0,0,6908,6906,1,0,0,0,6908,6907,1,0,0,0,6909,677,1,0,0,0,6910,
        6911,7,110,0,0,6911,679,1,0,0,0,6912,6914,3,676,338,0,6913,6915,
        3,678,339,0,6914,6913,1,0,0,0,6914,6915,1,0,0,0,6915,6918,1,0,0,
        0,6916,6918,3,56,28,0,6917,6912,1,0,0,0,6917,6916,1,0,0,0,6918,681,
        1,0,0,0,6919,6920,7,111,0,0,6920,683,1,0,0,0,6921,6926,5,228,0,0,
        6922,6926,3,820,410,0,6923,6926,5,882,0,0,6924,6926,5,879,0,0,6925,
        6921,1,0,0,0,6925,6922,1,0,0,0,6925,6923,1,0,0,0,6925,6924,1,0,0,
        0,6926,685,1,0,0,0,6927,6928,3,702,351,0,6928,687,1,0,0,0,6929,6933,
        3,690,345,0,6930,6933,5,889,0,0,6931,6933,5,882,0,0,6932,6929,1,
        0,0,0,6932,6930,1,0,0,0,6932,6931,1,0,0,0,6933,689,1,0,0,0,6934,
        6935,7,112,0,0,6935,691,1,0,0,0,6936,6937,3,708,354,0,6937,6938,
        5,854,0,0,6938,6939,3,708,354,0,6939,6940,5,854,0,0,6940,6941,3,
        708,354,0,6941,6942,5,854,0,0,6942,6943,3,708,354,0,6943,6944,5,
        854,0,0,6944,6950,3,708,354,0,6945,6946,5,878,0,0,6946,6947,3,708,
        354,0,6947,6948,5,854,0,0,6948,6949,3,708,354,0,6949,6951,1,0,0,
        0,6950,6945,1,0,0,0,6951,6952,1,0,0,0,6952,6950,1,0,0,0,6952,6953,
        1,0,0,0,6953,693,1,0,0,0,6954,6961,3,696,348,0,6955,6956,5,868,0,
        0,6956,6959,3,696,348,0,6957,6958,5,868,0,0,6958,6960,3,708,354,
        0,6959,6957,1,0,0,0,6959,6960,1,0,0,0,6960,6962,1,0,0,0,6961,6955,
        1,0,0,0,6961,6962,1,0,0,0,6962,695,1,0,0,0,6963,6971,5,882,0,0,6964,
        6971,5,887,0,0,6965,6967,5,884,0,0,6966,6965,1,0,0,0,6967,6968,1,
        0,0,0,6968,6966,1,0,0,0,6968,6969,1,0,0,0,6969,6971,1,0,0,0,6970,
        6963,1,0,0,0,6970,6964,1,0,0,0,6970,6966,1,0,0,0,6971,697,1,0,0,
        0,6972,6974,3,702,351,0,6973,6975,3,706,353,0,6974,6973,1,0,0,0,
        6974,6975,1,0,0,0,6975,699,1,0,0,0,6976,6981,3,702,351,0,6977,6978,
        5,868,0,0,6978,6980,3,702,351,0,6979,6977,1,0,0,0,6980,6983,1,0,
        0,0,6981,6979,1,0,0,0,6981,6982,1,0,0,0,6982,701,1,0,0,0,6983,6981,
        1,0,0,0,6984,6988,3,704,352,0,6985,6988,5,879,0,0,6986,6988,5,882,
        0,0,6987,6984,1,0,0,0,6987,6985,1,0,0,0,6987,6986,1,0,0,0,6988,703,
        1,0,0,0,6989,6999,5,889,0,0,6990,6999,3,820,410,0,6991,6999,3,822,
        411,0,6992,6999,3,690,345,0,6993,6999,3,824,412,0,6994,6999,3,826,
        413,0,6995,6999,3,828,414,0,6996,6999,3,830,415,0,6997,6999,3,792,
        396,0,6998,6989,1,0,0,0,6998,6990,1,0,0,0,6998,6991,1,0,0,0,6998,
        6992,1,0,0,0,6998,6993,1,0,0,0,6998,6994,1,0,0,0,6998,6995,1,0,0,
        0,6998,6996,1,0,0,0,6998,6997,1,0,0,0,6999,705,1,0,0,0,7000,7001,
        5,865,0,0,7001,7005,5,889,0,0,7002,7003,5,865,0,0,7003,7005,3,702,
        351,0,7004,7000,1,0,0,0,7004,7002,1,0,0,0,7005,707,1,0,0,0,7006,
        7007,7,113,0,0,7007,709,1,0,0,0,7008,7011,5,880,0,0,7009,7011,3,
        708,354,0,7010,7008,1,0,0,0,7010,7009,1,0,0,0,7011,711,1,0,0,0,7012,
        7014,5,888,0,0,7013,7012,1,0,0,0,7013,7014,1,0,0,0,7014,7015,1,0,
        0,0,7015,7018,5,882,0,0,7016,7018,5,881,0,0,7017,7013,1,0,0,0,7017,
        7016,1,0,0,0,7018,7020,1,0,0,0,7019,7021,5,882,0,0,7020,7019,1,0,
        0,0,7021,7022,1,0,0,0,7022,7020,1,0,0,0,7022,7023,1,0,0,0,7023,7036,
        1,0,0,0,7024,7026,5,888,0,0,7025,7024,1,0,0,0,7025,7026,1,0,0,0,
        7026,7027,1,0,0,0,7027,7030,5,882,0,0,7028,7030,5,881,0,0,7029,7025,
        1,0,0,0,7029,7028,1,0,0,0,7030,7033,1,0,0,0,7031,7032,5,28,0,0,7032,
        7034,3,686,343,0,7033,7031,1,0,0,0,7033,7034,1,0,0,0,7034,7036,1,
        0,0,0,7035,7017,1,0,0,0,7035,7029,1,0,0,0,7036,713,1,0,0,0,7037,
        7038,7,114,0,0,7038,715,1,0,0,0,7039,7041,5,888,0,0,7040,7039,1,
        0,0,0,7040,7041,1,0,0,0,7041,7042,1,0,0,0,7042,7043,5,884,0,0,7043,
        717,1,0,0,0,7044,7046,5,114,0,0,7045,7044,1,0,0,0,7045,7046,1,0,
        0,0,7046,7047,1,0,0,0,7047,7048,7,115,0,0,7048,719,1,0,0,0,7049,
        7062,3,712,356,0,7050,7062,3,708,354,0,7051,7052,5,854,0,0,7052,
        7062,3,708,354,0,7053,7062,3,716,358,0,7054,7062,3,714,357,0,7055,
        7062,5,885,0,0,7056,7062,5,887,0,0,7057,7059,5,114,0,0,7058,7057,
        1,0,0,0,7058,7059,1,0,0,0,7059,7060,1,0,0,0,7060,7062,7,115,0,0,
        7061,7049,1,0,0,0,7061,7050,1,0,0,0,7061,7051,1,0,0,0,7061,7053,
        1,0,0,0,7061,7054,1,0,0,0,7061,7055,1,0,0,0,7061,7056,1,0,0,0,7061,
        7058,1,0,0,0,7062,721,1,0,0,0,7063,7065,7,116,0,0,7064,7066,5,240,
        0,0,7065,7064,1,0,0,0,7065,7066,1,0,0,0,7066,7068,1,0,0,0,7067,7069,
        3,728,364,0,7068,7067,1,0,0,0,7068,7069,1,0,0,0,7069,7071,1,0,0,
        0,7070,7072,5,228,0,0,7071,7070,1,0,0,0,7071,7072,1,0,0,0,7072,7076,
        1,0,0,0,7073,7074,3,54,27,0,7074,7075,3,684,342,0,7075,7077,1,0,
        0,0,7076,7073,1,0,0,0,7076,7077,1,0,0,0,7077,7081,1,0,0,0,7078,7079,
        5,28,0,0,7079,7082,3,686,343,0,7080,7082,5,228,0,0,7081,7078,1,0,
        0,0,7081,7080,1,0,0,0,7081,7082,1,0,0,0,7082,7190,1,0,0,0,7083,7084,
        5,227,0,0,7084,7085,7,117,0,0,7085,7087,5,240,0,0,7086,7088,3,728,
        364,0,7087,7086,1,0,0,0,7087,7088,1,0,0,0,7088,7090,1,0,0,0,7089,
        7091,5,228,0,0,7090,7089,1,0,0,0,7090,7091,1,0,0,0,7091,7190,1,0,
        0,0,7092,7093,5,227,0,0,7093,7095,7,118,0,0,7094,7096,3,728,364,
        0,7095,7094,1,0,0,0,7095,7096,1,0,0,0,7096,7098,1,0,0,0,7097,7099,
        5,228,0,0,7098,7097,1,0,0,0,7098,7099,1,0,0,0,7099,7190,1,0,0,0,
        7100,7101,5,498,0,0,7101,7103,5,225,0,0,7102,7104,3,728,364,0,7103,
        7102,1,0,0,0,7103,7104,1,0,0,0,7104,7106,1,0,0,0,7105,7107,5,228,
        0,0,7106,7105,1,0,0,0,7106,7107,1,0,0,0,7107,7190,1,0,0,0,7108,7110,
        7,119,0,0,7109,7111,3,728,364,0,7110,7109,1,0,0,0,7110,7111,1,0,
        0,0,7111,7115,1,0,0,0,7112,7114,7,120,0,0,7113,7112,1,0,0,0,7114,
        7117,1,0,0,0,7115,7113,1,0,0,0,7115,7116,1,0,0,0,7116,7190,1,0,0,
        0,7117,7115,1,0,0,0,7118,7120,5,210,0,0,7119,7121,3,730,365,0,7120,
        7119,1,0,0,0,7120,7121,1,0,0,0,7121,7125,1,0,0,0,7122,7124,7,120,
        0,0,7123,7122,1,0,0,0,7124,7127,1,0,0,0,7125,7123,1,0,0,0,7125,7126,
        1,0,0,0,7126,7190,1,0,0,0,7127,7125,1,0,0,0,7128,7130,5,211,0,0,
        7129,7131,5,212,0,0,7130,7129,1,0,0,0,7130,7131,1,0,0,0,7131,7133,
        1,0,0,0,7132,7134,3,730,365,0,7133,7132,1,0,0,0,7133,7134,1,0,0,
        0,7134,7138,1,0,0,0,7135,7137,7,120,0,0,7136,7135,1,0,0,0,7137,7140,
        1,0,0,0,7138,7136,1,0,0,0,7138,7139,1,0,0,0,7139,7190,1,0,0,0,7140,
        7138,1,0,0,0,7141,7143,7,121,0,0,7142,7144,3,732,366,0,7143,7142,
        1,0,0,0,7143,7144,1,0,0,0,7144,7148,1,0,0,0,7145,7147,7,120,0,0,
        7146,7145,1,0,0,0,7147,7150,1,0,0,0,7148,7146,1,0,0,0,7148,7149,
        1,0,0,0,7149,7190,1,0,0,0,7150,7148,1,0,0,0,7151,7190,7,122,0,0,
        7152,7154,7,123,0,0,7153,7155,3,728,364,0,7154,7153,1,0,0,0,7154,
        7155,1,0,0,0,7155,7190,1,0,0,0,7156,7157,7,124,0,0,7157,7159,3,724,
        362,0,7158,7160,5,228,0,0,7159,7158,1,0,0,0,7159,7160,1,0,0,0,7160,
        7164,1,0,0,0,7161,7162,3,54,27,0,7162,7163,3,684,342,0,7163,7165,
        1,0,0,0,7164,7161,1,0,0,0,7164,7165,1,0,0,0,7165,7190,1,0,0,0,7166,
        7169,7,125,0,0,7167,7168,5,834,0,0,7168,7170,3,708,354,0,7169,7167,
        1,0,0,0,7169,7170,1,0,0,0,7170,7190,1,0,0,0,7171,7173,5,233,0,0,
        7172,7174,5,225,0,0,7173,7172,1,0,0,0,7173,7174,1,0,0,0,7174,7176,
        1,0,0,0,7175,7177,5,228,0,0,7176,7175,1,0,0,0,7176,7177,1,0,0,0,
        7177,7181,1,0,0,0,7178,7179,3,54,27,0,7179,7180,3,684,342,0,7180,
        7182,1,0,0,0,7181,7178,1,0,0,0,7181,7182,1,0,0,0,7182,7185,1,0,0,
        0,7183,7184,5,28,0,0,7184,7186,3,686,343,0,7185,7183,1,0,0,0,7185,
        7186,1,0,0,0,7186,7190,1,0,0,0,7187,7188,5,233,0,0,7188,7190,5,229,
        0,0,7189,7063,1,0,0,0,7189,7083,1,0,0,0,7189,7092,1,0,0,0,7189,7100,
        1,0,0,0,7189,7108,1,0,0,0,7189,7118,1,0,0,0,7189,7128,1,0,0,0,7189,
        7141,1,0,0,0,7189,7151,1,0,0,0,7189,7152,1,0,0,0,7189,7156,1,0,0,
        0,7189,7166,1,0,0,0,7189,7171,1,0,0,0,7189,7187,1,0,0,0,7190,723,
        1,0,0,0,7191,7192,5,866,0,0,7192,7197,5,882,0,0,7193,7194,5,868,
        0,0,7194,7196,5,882,0,0,7195,7193,1,0,0,0,7196,7199,1,0,0,0,7197,
        7195,1,0,0,0,7197,7198,1,0,0,0,7198,7200,1,0,0,0,7199,7197,1,0,0,
        0,7200,7201,5,867,0,0,7201,725,1,0,0,0,7202,7204,7,126,0,0,7203,
        7205,3,728,364,0,7204,7203,1,0,0,0,7204,7205,1,0,0,0,7205,7225,1,
        0,0,0,7206,7208,5,224,0,0,7207,7209,3,728,364,0,7208,7207,1,0,0,
        0,7208,7209,1,0,0,0,7209,7213,1,0,0,0,7210,7211,3,54,27,0,7211,7212,
        3,684,342,0,7212,7214,1,0,0,0,7213,7210,1,0,0,0,7213,7214,1,0,0,
        0,7214,7225,1,0,0,0,7215,7225,7,127,0,0,7216,7218,7,128,0,0,7217,
        7219,3,732,366,0,7218,7217,1,0,0,0,7218,7219,1,0,0,0,7219,7225,1,
        0,0,0,7220,7222,7,129,0,0,7221,7223,7,130,0,0,7222,7221,1,0,0,0,
        7222,7223,1,0,0,0,7223,7225,1,0,0,0,7224,7202,1,0,0,0,7224,7206,
        1,0,0,0,7224,7215,1,0,0,0,7224,7216,1,0,0,0,7224,7220,1,0,0,0,7225,
        7227,1,0,0,0,7226,7228,5,12,0,0,7227,7226,1,0,0,0,7227,7228,1,0,
        0,0,7228,727,1,0,0,0,7229,7230,5,866,0,0,7230,7231,3,708,354,0,7231,
        7232,5,867,0,0,7232,729,1,0,0,0,7233,7234,5,866,0,0,7234,7235,3,
        708,354,0,7235,7236,5,868,0,0,7236,7237,3,708,354,0,7237,7238,5,
        867,0,0,7238,731,1,0,0,0,7239,7240,5,866,0,0,7240,7243,3,708,354,
        0,7241,7242,5,868,0,0,7242,7244,3,708,354,0,7243,7241,1,0,0,0,7243,
        7244,1,0,0,0,7244,7245,1,0,0,0,7245,7246,5,867,0,0,7246,733,1,0,
        0,0,7247,7248,5,866,0,0,7248,7253,3,670,335,0,7249,7250,5,868,0,
        0,7250,7252,3,670,335,0,7251,7249,1,0,0,0,7252,7255,1,0,0,0,7253,
        7251,1,0,0,0,7253,7254,1,0,0,0,7254,7256,1,0,0,0,7255,7253,1,0,0,
        0,7256,7257,5,867,0,0,7257,735,1,0,0,0,7258,7263,3,800,400,0,7259,
        7260,5,868,0,0,7260,7262,3,800,400,0,7261,7259,1,0,0,0,7262,7265,
        1,0,0,0,7263,7261,1,0,0,0,7263,7264,1,0,0,0,7264,737,1,0,0,0,7265,
        7263,1,0,0,0,7266,7267,7,131,0,0,7267,7272,3,740,370,0,7268,7269,
        5,868,0,0,7269,7271,3,740,370,0,7270,7268,1,0,0,0,7271,7274,1,0,
        0,0,7272,7270,1,0,0,0,7272,7273,1,0,0,0,7273,739,1,0,0,0,7274,7272,
        1,0,0,0,7275,7276,5,866,0,0,7276,7281,3,742,371,0,7277,7278,5,868,
        0,0,7278,7280,3,742,371,0,7279,7277,1,0,0,0,7280,7283,1,0,0,0,7281,
        7279,1,0,0,0,7281,7282,1,0,0,0,7282,7284,1,0,0,0,7283,7281,1,0,0,
        0,7284,7285,5,867,0,0,7285,741,1,0,0,0,7286,7289,3,800,400,0,7287,
        7289,5,42,0,0,7288,7286,1,0,0,0,7288,7287,1,0,0,0,7289,743,1,0,0,
        0,7290,7295,3,720,360,0,7291,7292,5,868,0,0,7292,7294,3,720,360,
        0,7293,7291,1,0,0,0,7294,7297,1,0,0,0,7295,7293,1,0,0,0,7295,7296,
        1,0,0,0,7296,745,1,0,0,0,7297,7295,1,0,0,0,7298,7303,5,882,0,0,7299,
        7300,5,868,0,0,7300,7302,5,882,0,0,7301,7299,1,0,0,0,7302,7305,1,
        0,0,0,7303,7301,1,0,0,0,7303,7304,1,0,0,0,7304,747,1,0,0,0,7305,
        7303,1,0,0,0,7306,7311,5,892,0,0,7307,7308,5,868,0,0,7308,7310,5,
        892,0,0,7309,7307,1,0,0,0,7310,7313,1,0,0,0,7311,7309,1,0,0,0,7311,
        7312,1,0,0,0,7312,749,1,0,0,0,7313,7311,1,0,0,0,7314,7341,5,116,
        0,0,7315,7316,5,24,0,0,7316,7317,5,866,0,0,7317,7318,3,800,400,0,
        7318,7319,5,13,0,0,7319,7320,3,726,363,0,7320,7321,5,867,0,0,7321,
        7341,1,0,0,0,7322,7324,3,806,403,0,7323,7322,1,0,0,0,7323,7324,1,
        0,0,0,7324,7325,1,0,0,0,7325,7341,3,720,360,0,7326,7330,3,752,376,
        0,7327,7328,5,119,0,0,7328,7329,5,185,0,0,7329,7331,3,752,376,0,
        7330,7327,1,0,0,0,7330,7331,1,0,0,0,7331,7341,1,0,0,0,7332,7333,
        5,866,0,0,7333,7334,3,800,400,0,7334,7335,5,867,0,0,7335,7341,1,
        0,0,0,7336,7337,5,866,0,0,7337,7338,3,698,349,0,7338,7339,5,867,
        0,0,7339,7341,1,0,0,0,7340,7314,1,0,0,0,7340,7315,1,0,0,0,7340,7323,
        1,0,0,0,7340,7326,1,0,0,0,7340,7332,1,0,0,0,7340,7336,1,0,0,0,7341,
        751,1,0,0,0,7342,7348,7,132,0,0,7343,7345,5,866,0,0,7344,7346,3,
        708,354,0,7345,7344,1,0,0,0,7345,7346,1,0,0,0,7346,7347,1,0,0,0,
        7347,7349,5,867,0,0,7348,7343,1,0,0,0,7348,7349,1,0,0,0,7349,7357,
        1,0,0,0,7350,7351,5,295,0,0,7351,7353,5,866,0,0,7352,7354,3,708,
        354,0,7353,7352,1,0,0,0,7353,7354,1,0,0,0,7354,7355,1,0,0,0,7355,
        7357,5,867,0,0,7356,7342,1,0,0,0,7356,7350,1,0,0,0,7357,753,1,0,
        0,0,7358,7359,5,78,0,0,7359,7360,5,60,0,0,7360,755,1,0,0,0,7361,
        7362,5,78,0,0,7362,7363,5,114,0,0,7363,7364,5,60,0,0,7364,757,1,
        0,0,0,7365,7366,5,124,0,0,7366,7367,5,143,0,0,7367,759,1,0,0,0,7368,
        7391,3,762,381,0,7369,7391,3,770,385,0,7370,7391,3,772,386,0,7371,
        7378,3,792,396,0,7372,7373,5,866,0,0,7373,7379,5,867,0,0,7374,7375,
        5,866,0,0,7375,7376,3,796,398,0,7376,7377,5,867,0,0,7377,7379,1,
        0,0,0,7378,7372,1,0,0,0,7378,7374,1,0,0,0,7379,7391,1,0,0,0,7380,
        7387,3,628,314,0,7381,7382,5,866,0,0,7382,7388,5,867,0,0,7383,7384,
        5,866,0,0,7384,7385,3,796,398,0,7385,7386,5,867,0,0,7386,7388,1,
        0,0,0,7387,7381,1,0,0,0,7387,7383,1,0,0,0,7388,7391,1,0,0,0,7389,
        7391,3,794,397,0,7390,7368,1,0,0,0,7390,7369,1,0,0,0,7390,7370,1,
        0,0,0,7390,7371,1,0,0,0,7390,7380,1,0,0,0,7390,7389,1,0,0,0,7391,
        761,1,0,0,0,7392,7395,7,133,0,0,7393,7394,5,866,0,0,7394,7396,5,
        867,0,0,7395,7393,1,0,0,0,7395,7396,1,0,0,0,7396,7572,1,0,0,0,7397,
        7572,3,56,28,0,7398,7399,5,33,0,0,7399,7400,5,866,0,0,7400,7401,
        3,800,400,0,7401,7402,5,868,0,0,7402,7403,3,726,363,0,7403,7404,
        5,867,0,0,7404,7572,1,0,0,0,7405,7406,5,33,0,0,7406,7407,5,866,0,
        0,7407,7408,3,800,400,0,7408,7409,5,188,0,0,7409,7410,3,684,342,
        0,7410,7411,5,867,0,0,7411,7572,1,0,0,0,7412,7413,5,24,0,0,7413,
        7414,5,866,0,0,7414,7415,3,800,400,0,7415,7416,5,13,0,0,7416,7417,
        3,726,363,0,7417,7418,5,867,0,0,7418,7572,1,0,0,0,7419,7420,5,189,
        0,0,7420,7421,5,866,0,0,7421,7422,3,658,329,0,7422,7423,5,867,0,
        0,7423,7572,1,0,0,0,7424,7425,5,23,0,0,7425,7427,3,800,400,0,7426,
        7428,3,764,382,0,7427,7426,1,0,0,0,7428,7429,1,0,0,0,7429,7427,1,
        0,0,0,7429,7430,1,0,0,0,7430,7433,1,0,0,0,7431,7432,5,53,0,0,7432,
        7434,3,798,399,0,7433,7431,1,0,0,0,7433,7434,1,0,0,0,7434,7435,1,
        0,0,0,7435,7436,5,378,0,0,7436,7572,1,0,0,0,7437,7439,5,23,0,0,7438,
        7440,3,764,382,0,7439,7438,1,0,0,0,7440,7441,1,0,0,0,7441,7439,1,
        0,0,0,7441,7442,1,0,0,0,7442,7445,1,0,0,0,7443,7444,5,53,0,0,7444,
        7446,3,798,399,0,7445,7443,1,0,0,0,7445,7446,1,0,0,0,7446,7447,1,
        0,0,0,7447,7448,5,378,0,0,7448,7572,1,0,0,0,7449,7450,5,224,0,0,
        7450,7451,5,866,0,0,7451,7454,3,796,398,0,7452,7453,5,188,0,0,7453,
        7455,3,684,342,0,7454,7452,1,0,0,0,7454,7455,1,0,0,0,7455,7456,1,
        0,0,0,7456,7457,5,867,0,0,7457,7572,1,0,0,0,7458,7459,5,296,0,0,
        7459,7462,5,866,0,0,7460,7463,3,712,356,0,7461,7463,3,800,400,0,
        7462,7460,1,0,0,0,7462,7461,1,0,0,0,7463,7464,1,0,0,0,7464,7467,
        5,80,0,0,7465,7468,3,712,356,0,7466,7468,3,800,400,0,7467,7465,1,
        0,0,0,7467,7466,1,0,0,0,7468,7469,1,0,0,0,7469,7470,5,867,0,0,7470,
        7572,1,0,0,0,7471,7472,7,134,0,0,7472,7475,5,866,0,0,7473,7476,3,
        712,356,0,7474,7476,3,800,400,0,7475,7473,1,0,0,0,7475,7474,1,0,
        0,0,7476,7477,1,0,0,0,7477,7480,5,68,0,0,7478,7481,3,708,354,0,7479,
        7481,3,800,400,0,7480,7478,1,0,0,0,7480,7479,1,0,0,0,7481,7487,1,
        0,0,0,7482,7485,5,65,0,0,7483,7486,3,708,354,0,7484,7486,3,800,400,
        0,7485,7483,1,0,0,0,7485,7484,1,0,0,0,7486,7488,1,0,0,0,7487,7482,
        1,0,0,0,7487,7488,1,0,0,0,7488,7489,1,0,0,0,7489,7490,5,867,0,0,
        7490,7572,1,0,0,0,7491,7492,5,300,0,0,7492,7493,5,866,0,0,7493,7496,
        7,135,0,0,7494,7497,3,712,356,0,7495,7497,3,800,400,0,7496,7494,
        1,0,0,0,7496,7495,1,0,0,0,7496,7497,1,0,0,0,7497,7498,1,0,0,0,7498,
        7501,5,68,0,0,7499,7502,3,712,356,0,7500,7502,3,800,400,0,7501,7499,
        1,0,0,0,7501,7500,1,0,0,0,7502,7503,1,0,0,0,7503,7504,5,867,0,0,
        7504,7572,1,0,0,0,7505,7506,5,300,0,0,7506,7509,5,866,0,0,7507,7510,
        3,712,356,0,7508,7510,3,800,400,0,7509,7507,1,0,0,0,7509,7508,1,
        0,0,0,7510,7511,1,0,0,0,7511,7514,5,68,0,0,7512,7515,3,712,356,0,
        7513,7515,3,800,400,0,7514,7512,1,0,0,0,7514,7513,1,0,0,0,7515,7516,
        1,0,0,0,7516,7517,5,867,0,0,7517,7572,1,0,0,0,7518,7519,5,840,0,
        0,7519,7522,5,866,0,0,7520,7523,3,712,356,0,7521,7523,3,800,400,
        0,7522,7520,1,0,0,0,7522,7521,1,0,0,0,7523,7530,1,0,0,0,7524,7525,
        5,13,0,0,7525,7526,7,136,0,0,7526,7527,5,866,0,0,7527,7528,3,708,
        354,0,7528,7529,5,867,0,0,7529,7531,1,0,0,0,7530,7524,1,0,0,0,7530,
        7531,1,0,0,0,7531,7533,1,0,0,0,7532,7534,3,766,383,0,7533,7532,1,
        0,0,0,7533,7534,1,0,0,0,7534,7535,1,0,0,0,7535,7536,5,867,0,0,7536,
        7572,1,0,0,0,7537,7538,5,293,0,0,7538,7539,5,866,0,0,7539,7540,3,
        66,33,0,7540,7543,5,68,0,0,7541,7544,3,712,356,0,7542,7544,3,800,
        400,0,7543,7541,1,0,0,0,7543,7542,1,0,0,0,7544,7545,1,0,0,0,7545,
        7546,5,867,0,0,7546,7572,1,0,0,0,7547,7548,5,827,0,0,7548,7549,5,
        866,0,0,7549,7550,7,137,0,0,7550,7551,5,868,0,0,7551,7552,3,712,
        356,0,7552,7553,5,867,0,0,7553,7572,1,0,0,0,7554,7555,5,254,0,0,
        7555,7556,5,866,0,0,7556,7557,3,800,400,0,7557,7558,5,868,0,0,7558,
        7561,3,800,400,0,7559,7560,5,579,0,0,7560,7562,3,726,363,0,7561,
        7559,1,0,0,0,7561,7562,1,0,0,0,7562,7564,1,0,0,0,7563,7565,3,286,
        143,0,7564,7563,1,0,0,0,7564,7565,1,0,0,0,7565,7567,1,0,0,0,7566,
        7568,3,288,144,0,7567,7566,1,0,0,0,7567,7568,1,0,0,0,7568,7569,1,
        0,0,0,7569,7570,5,867,0,0,7570,7572,1,0,0,0,7571,7392,1,0,0,0,7571,
        7397,1,0,0,0,7571,7398,1,0,0,0,7571,7405,1,0,0,0,7571,7412,1,0,0,
        0,7571,7419,1,0,0,0,7571,7424,1,0,0,0,7571,7437,1,0,0,0,7571,7449,
        1,0,0,0,7571,7458,1,0,0,0,7571,7471,1,0,0,0,7571,7491,1,0,0,0,7571,
        7505,1,0,0,0,7571,7518,1,0,0,0,7571,7537,1,0,0,0,7571,7547,1,0,0,
        0,7571,7554,1,0,0,0,7572,763,1,0,0,0,7573,7574,5,191,0,0,7574,7575,
        3,798,399,0,7575,7576,5,175,0,0,7576,7577,3,798,399,0,7577,765,1,
        0,0,0,7578,7579,5,448,0,0,7579,7584,3,768,384,0,7580,7581,5,868,
        0,0,7581,7583,3,768,384,0,7582,7580,1,0,0,0,7583,7586,1,0,0,0,7584,
        7582,1,0,0,0,7584,7585,1,0,0,0,7585,7593,1,0,0,0,7586,7584,1,0,0,
        0,7587,7588,5,448,0,0,7588,7589,3,708,354,0,7589,7590,5,854,0,0,
        7590,7591,3,708,354,0,7591,7593,1,0,0,0,7592,7578,1,0,0,0,7592,7587,
        1,0,0,0,7593,767,1,0,0,0,7594,7596,3,708,354,0,7595,7597,7,138,0,
        0,7596,7595,1,0,0,0,7596,7597,1,0,0,0,7597,769,1,0,0,0,7598,7599,
        7,139,0,0,7599,7601,5,866,0,0,7600,7602,7,44,0,0,7601,7600,1,0,0,
        0,7601,7602,1,0,0,0,7602,7603,1,0,0,0,7603,7604,3,798,399,0,7604,
        7606,5,867,0,0,7605,7607,3,774,387,0,7606,7605,1,0,0,0,7606,7607,
        1,0,0,0,7607,7658,1,0,0,0,7608,7609,5,262,0,0,7609,7617,5,866,0,
        0,7610,7618,5,850,0,0,7611,7613,5,7,0,0,7612,7611,1,0,0,0,7612,7613,
        1,0,0,0,7613,7614,1,0,0,0,7614,7618,3,798,399,0,7615,7616,5,49,0,
        0,7616,7618,3,796,398,0,7617,7610,1,0,0,0,7617,7612,1,0,0,0,7617,
        7615,1,0,0,0,7618,7619,1,0,0,0,7619,7621,5,867,0,0,7620,7622,3,774,
        387,0,7621,7620,1,0,0,0,7621,7622,1,0,0,0,7622,7658,1,0,0,0,7623,
        7624,7,140,0,0,7624,7626,5,866,0,0,7625,7627,5,7,0,0,7626,7625,1,
        0,0,0,7626,7627,1,0,0,0,7627,7628,1,0,0,0,7628,7629,3,798,399,0,
        7629,7631,5,867,0,0,7630,7632,3,774,387,0,7631,7630,1,0,0,0,7631,
        7632,1,0,0,0,7632,7658,1,0,0,0,7633,7634,5,266,0,0,7634,7636,5,866,
        0,0,7635,7637,5,49,0,0,7636,7635,1,0,0,0,7636,7637,1,0,0,0,7637,
        7638,1,0,0,0,7638,7649,3,796,398,0,7639,7640,5,125,0,0,7640,7641,
        5,20,0,0,7641,7646,3,254,127,0,7642,7643,5,868,0,0,7643,7645,3,254,
        127,0,7644,7642,1,0,0,0,7645,7648,1,0,0,0,7646,7644,1,0,0,0,7646,
        7647,1,0,0,0,7647,7650,1,0,0,0,7648,7646,1,0,0,0,7649,7639,1,0,0,
        0,7649,7650,1,0,0,0,7650,7653,1,0,0,0,7651,7652,5,156,0,0,7652,7654,
        5,882,0,0,7653,7651,1,0,0,0,7653,7654,1,0,0,0,7654,7655,1,0,0,0,
        7655,7656,5,867,0,0,7656,7658,1,0,0,0,7657,7598,1,0,0,0,7657,7608,
        1,0,0,0,7657,7623,1,0,0,0,7657,7633,1,0,0,0,7658,771,1,0,0,0,7659,
        7660,7,141,0,0,7660,7661,5,866,0,0,7661,7664,3,800,400,0,7662,7663,
        5,868,0,0,7663,7665,3,708,354,0,7664,7662,1,0,0,0,7664,7665,1,0,
        0,0,7665,7668,1,0,0,0,7666,7667,5,868,0,0,7667,7669,3,708,354,0,
        7668,7666,1,0,0,0,7668,7669,1,0,0,0,7669,7670,1,0,0,0,7670,7671,
        5,867,0,0,7671,7672,3,774,387,0,7672,7698,1,0,0,0,7673,7674,7,142,
        0,0,7674,7675,5,866,0,0,7675,7676,3,800,400,0,7676,7677,5,867,0,
        0,7677,7678,3,774,387,0,7678,7698,1,0,0,0,7679,7680,7,143,0,0,7680,
        7681,5,866,0,0,7681,7682,5,867,0,0,7682,7698,3,774,387,0,7683,7684,
        5,273,0,0,7684,7685,5,866,0,0,7685,7686,3,800,400,0,7686,7687,5,
        868,0,0,7687,7688,3,708,354,0,7688,7689,5,867,0,0,7689,7690,3,774,
        387,0,7690,7698,1,0,0,0,7691,7692,5,272,0,0,7692,7693,5,866,0,0,
        7693,7694,3,708,354,0,7694,7695,5,867,0,0,7695,7696,3,774,387,0,
        7696,7698,1,0,0,0,7697,7659,1,0,0,0,7697,7673,1,0,0,0,7697,7679,
        1,0,0,0,7697,7683,1,0,0,0,7697,7691,1,0,0,0,7698,773,1,0,0,0,7699,
        7705,5,129,0,0,7700,7701,5,866,0,0,7701,7702,3,776,388,0,7702,7703,
        5,867,0,0,7703,7706,1,0,0,0,7704,7706,3,778,389,0,7705,7700,1,0,
        0,0,7705,7704,1,0,0,0,7706,775,1,0,0,0,7707,7709,3,778,389,0,7708,
        7707,1,0,0,0,7708,7709,1,0,0,0,7709,7711,1,0,0,0,7710,7712,3,790,
        395,0,7711,7710,1,0,0,0,7711,7712,1,0,0,0,7712,7714,1,0,0,0,7713,
        7715,3,252,126,0,7714,7713,1,0,0,0,7714,7715,1,0,0,0,7715,7717,1,
        0,0,0,7716,7718,3,780,390,0,7717,7716,1,0,0,0,7717,7718,1,0,0,0,
        7718,777,1,0,0,0,7719,7720,3,702,351,0,7720,779,1,0,0,0,7721,7722,
        3,782,391,0,7722,7723,3,784,392,0,7723,781,1,0,0,0,7724,7725,7,144,
        0,0,7725,783,1,0,0,0,7726,7729,3,788,394,0,7727,7729,3,786,393,0,
        7728,7726,1,0,0,0,7728,7727,1,0,0,0,7729,785,1,0,0,0,7730,7731,5,
        17,0,0,7731,7732,3,788,394,0,7732,7733,5,11,0,0,7733,7734,3,788,
        394,0,7734,787,1,0,0,0,7735,7736,5,36,0,0,7736,7743,5,586,0,0,7737,
        7738,5,669,0,0,7738,7743,7,145,0,0,7739,7740,3,800,400,0,7740,7741,
        7,145,0,0,7741,7743,1,0,0,0,7742,7735,1,0,0,0,7742,7737,1,0,0,0,
        7742,7739,1,0,0,0,7743,789,1,0,0,0,7744,7745,5,130,0,0,7745,7746,
        5,20,0,0,7746,7751,3,800,400,0,7747,7748,5,868,0,0,7748,7750,3,800,
        400,0,7749,7747,1,0,0,0,7750,7753,1,0,0,0,7751,7749,1,0,0,0,7751,
        7752,1,0,0,0,7752,791,1,0,0,0,7753,7751,1,0,0,0,7754,7779,3,832,
        416,0,7755,7779,5,757,0,0,7756,7779,5,289,0,0,7757,7779,5,285,0,
        0,7758,7779,5,286,0,0,7759,7779,5,287,0,0,7760,7779,5,290,0,0,7761,
        7779,5,291,0,0,7762,7779,5,292,0,0,7763,7779,5,78,0,0,7764,7779,
        5,86,0,0,7765,7779,5,288,0,0,7766,7779,5,294,0,0,7767,7779,5,488,
        0,0,7768,7779,5,295,0,0,7769,7779,5,142,0,0,7770,7779,5,143,0,0,
        7771,7779,5,297,0,0,7772,7779,5,298,0,0,7773,7779,5,299,0,0,7774,
        7779,5,300,0,0,7775,7779,5,301,0,0,7776,7779,5,302,0,0,7777,7779,
        5,303,0,0,7778,7754,1,0,0,0,7778,7755,1,0,0,0,7778,7756,1,0,0,0,
        7778,7757,1,0,0,0,7778,7758,1,0,0,0,7778,7759,1,0,0,0,7778,7760,
        1,0,0,0,7778,7761,1,0,0,0,7778,7762,1,0,0,0,7778,7763,1,0,0,0,7778,
        7764,1,0,0,0,7778,7765,1,0,0,0,7778,7766,1,0,0,0,7778,7767,1,0,0,
        0,7778,7768,1,0,0,0,7778,7769,1,0,0,0,7778,7770,1,0,0,0,7778,7771,
        1,0,0,0,7778,7772,1,0,0,0,7778,7773,1,0,0,0,7778,7774,1,0,0,0,7778,
        7775,1,0,0,0,7778,7776,1,0,0,0,7778,7777,1,0,0,0,7779,793,1,0,0,
        0,7780,7781,7,146,0,0,7781,7782,5,866,0,0,7782,7783,3,798,399,0,
        7783,7784,5,867,0,0,7784,795,1,0,0,0,7785,7790,3,798,399,0,7786,
        7787,5,868,0,0,7787,7789,3,798,399,0,7788,7786,1,0,0,0,7789,7792,
        1,0,0,0,7790,7788,1,0,0,0,7790,7791,1,0,0,0,7791,797,1,0,0,0,7792,
        7790,1,0,0,0,7793,7797,3,720,360,0,7794,7797,3,760,380,0,7795,7797,
        3,800,400,0,7796,7793,1,0,0,0,7796,7794,1,0,0,0,7796,7795,1,0,0,
        0,7797,799,1,0,0,0,7798,7799,6,400,-1,0,7799,7800,7,147,0,0,7800,
        7810,3,800,400,4,7801,7802,3,802,401,0,7802,7804,5,89,0,0,7803,7805,
        5,114,0,0,7804,7803,1,0,0,0,7804,7805,1,0,0,0,7805,7806,1,0,0,0,
        7806,7807,7,148,0,0,7807,7810,1,0,0,0,7808,7810,3,802,401,0,7809,
        7798,1,0,0,0,7809,7801,1,0,0,0,7809,7808,1,0,0,0,7810,7817,1,0,0,
        0,7811,7812,10,3,0,0,7812,7813,3,812,406,0,7813,7814,3,800,400,4,
        7814,7816,1,0,0,0,7815,7811,1,0,0,0,7816,7819,1,0,0,0,7817,7815,
        1,0,0,0,7817,7818,1,0,0,0,7818,801,1,0,0,0,7819,7817,1,0,0,0,7820,
        7821,6,401,-1,0,7821,7822,3,804,402,0,7822,7886,1,0,0,0,7823,7825,
        10,6,0,0,7824,7826,5,114,0,0,7825,7824,1,0,0,0,7825,7826,1,0,0,0,
        7826,7827,1,0,0,0,7827,7828,5,17,0,0,7828,7829,3,802,401,0,7829,
        7830,5,11,0,0,7830,7831,3,802,401,7,7831,7885,1,0,0,0,7832,7833,
        10,5,0,0,7833,7834,5,604,0,0,7834,7835,5,99,0,0,7835,7885,3,802,
        401,6,7836,7838,10,3,0,0,7837,7839,5,114,0,0,7838,7837,1,0,0,0,7838,
        7839,1,0,0,0,7839,7840,1,0,0,0,7840,7841,7,149,0,0,7841,7885,3,802,
        401,4,7842,7844,10,9,0,0,7843,7845,5,114,0,0,7844,7843,1,0,0,0,7844,
        7845,1,0,0,0,7845,7846,1,0,0,0,7846,7847,5,80,0,0,7847,7850,5,866,
        0,0,7848,7851,3,204,102,0,7849,7851,3,736,368,0,7850,7848,1,0,0,
        0,7850,7849,1,0,0,0,7851,7852,1,0,0,0,7852,7853,5,867,0,0,7853,7885,
        1,0,0,0,7854,7855,10,8,0,0,7855,7856,5,89,0,0,7856,7885,3,718,359,
        0,7857,7858,10,7,0,0,7858,7865,3,808,404,0,7859,7860,7,150,0,0,7860,
        7861,5,866,0,0,7861,7862,3,204,102,0,7862,7863,5,867,0,0,7863,7866,
        1,0,0,0,7864,7866,3,802,401,0,7865,7859,1,0,0,0,7865,7864,1,0,0,
        0,7866,7885,1,0,0,0,7867,7869,10,4,0,0,7868,7870,5,114,0,0,7869,
        7868,1,0,0,0,7869,7870,1,0,0,0,7870,7871,1,0,0,0,7871,7872,5,99,
        0,0,7872,7875,3,802,401,0,7873,7874,5,384,0,0,7874,7876,5,882,0,
        0,7875,7873,1,0,0,0,7875,7876,1,0,0,0,7876,7885,1,0,0,0,7877,7878,
        10,2,0,0,7878,7879,5,485,0,0,7879,7880,5,510,0,0,7880,7881,5,866,
        0,0,7881,7882,3,802,401,0,7882,7883,5,867,0,0,7883,7885,1,0,0,0,
        7884,7823,1,0,0,0,7884,7832,1,0,0,0,7884,7836,1,0,0,0,7884,7842,
        1,0,0,0,7884,7854,1,0,0,0,7884,7857,1,0,0,0,7884,7867,1,0,0,0,7884,
        7877,1,0,0,0,7885,7888,1,0,0,0,7886,7884,1,0,0,0,7886,7887,1,0,0,
        0,7887,803,1,0,0,0,7888,7886,1,0,0,0,7889,7890,6,402,-1,0,7890,7938,
        3,720,360,0,7891,7938,3,760,380,0,7892,7938,3,682,341,0,7893,7894,
        3,806,403,0,7894,7895,3,804,402,12,7895,7938,1,0,0,0,7896,7897,5,
        228,0,0,7897,7938,3,804,402,11,7898,7899,5,892,0,0,7899,7900,5,841,
        0,0,7900,7938,3,804,402,10,7901,7902,5,866,0,0,7902,7907,3,800,400,
        0,7903,7904,5,868,0,0,7904,7906,3,800,400,0,7905,7903,1,0,0,0,7906,
        7909,1,0,0,0,7907,7905,1,0,0,0,7907,7908,1,0,0,0,7908,7910,1,0,0,
        0,7909,7907,1,0,0,0,7910,7911,5,867,0,0,7911,7938,1,0,0,0,7912,7913,
        5,586,0,0,7913,7914,5,866,0,0,7914,7917,3,800,400,0,7915,7916,5,
        868,0,0,7916,7918,3,800,400,0,7917,7915,1,0,0,0,7918,7919,1,0,0,
        0,7919,7917,1,0,0,0,7919,7920,1,0,0,0,7920,7921,1,0,0,0,7921,7922,
        5,867,0,0,7922,7938,1,0,0,0,7923,7924,5,60,0,0,7924,7925,5,866,0,
        0,7925,7926,3,204,102,0,7926,7927,5,867,0,0,7927,7938,1,0,0,0,7928,
        7929,5,866,0,0,7929,7930,3,204,102,0,7930,7931,5,867,0,0,7931,7938,
        1,0,0,0,7932,7933,5,87,0,0,7933,7934,3,800,400,0,7934,7935,3,66,
        33,0,7935,7938,1,0,0,0,7936,7938,3,658,329,0,7937,7889,1,0,0,0,7937,
        7891,1,0,0,0,7937,7892,1,0,0,0,7937,7893,1,0,0,0,7937,7896,1,0,0,
        0,7937,7898,1,0,0,0,7937,7901,1,0,0,0,7937,7912,1,0,0,0,7937,7923,
        1,0,0,0,7937,7928,1,0,0,0,7937,7932,1,0,0,0,7937,7936,1,0,0,0,7938,
        7956,1,0,0,0,7939,7940,10,4,0,0,7940,7941,3,818,409,0,7941,7942,
        3,804,402,5,7942,7955,1,0,0,0,7943,7944,10,3,0,0,7944,7945,3,814,
        407,0,7945,7946,3,804,402,4,7946,7955,1,0,0,0,7947,7948,10,2,0,0,
        7948,7949,3,816,408,0,7949,7950,3,804,402,3,7950,7955,1,0,0,0,7951,
        7952,10,14,0,0,7952,7953,5,28,0,0,7953,7955,3,686,343,0,7954,7939,
        1,0,0,0,7954,7943,1,0,0,0,7954,7947,1,0,0,0,7954,7951,1,0,0,0,7955,
        7958,1,0,0,0,7956,7954,1,0,0,0,7956,7957,1,0,0,0,7957,805,1,0,0,
        0,7958,7956,1,0,0,0,7959,7960,7,151,0,0,7960,807,1,0,0,0,7961,7962,
        5,859,0,0,7962,7970,5,858,0,0,7963,7964,5,860,0,0,7964,7970,5,857,
        0,0,7965,7966,5,859,0,0,7966,7967,5,857,0,0,7967,7970,5,858,0,0,
        7968,7970,3,810,405,0,7969,7961,1,0,0,0,7969,7963,1,0,0,0,7969,7965,
        1,0,0,0,7969,7968,1,0,0,0,7970,809,1,0,0,0,7971,7972,5,859,0,0,7972,
        7979,5,857,0,0,7973,7974,5,858,0,0,7974,7979,5,857,0,0,7975,7979,
        5,857,0,0,7976,7979,5,858,0,0,7977,7979,5,859,0,0,7978,7971,1,0,
        0,0,7978,7973,1,0,0,0,7978,7975,1,0,0,0,7978,7976,1,0,0,0,7978,7977,
        1,0,0,0,7979,811,1,0,0,0,7980,7988,5,11,0,0,7981,7982,5,863,0,0,
        7982,7988,5,863,0,0,7983,7988,5,196,0,0,7984,7988,5,124,0,0,7985,
        7986,5,862,0,0,7986,7988,5,862,0,0,7987,7980,1,0,0,0,7987,7981,1,
        0,0,0,7987,7983,1,0,0,0,7987,7984,1,0,0,0,7987,7985,1,0,0,0,7988,
        813,1,0,0,0,7989,7990,5,859,0,0,7990,7997,5,859,0,0,7991,7992,5,
        858,0,0,7992,7997,5,858,0,0,7993,7997,5,863,0,0,7994,7997,5,864,
        0,0,7995,7997,5,862,0,0,7996,7989,1,0,0,0,7996,7991,1,0,0,0,7996,
        7993,1,0,0,0,7996,7994,1,0,0,0,7996,7995,1,0,0,0,7997,815,1,0,0,
        0,7998,7999,7,152,0,0,7999,817,1,0,0,0,8000,8001,5,854,0,0,8001,
        8006,5,858,0,0,8002,8003,5,854,0,0,8003,8004,5,858,0,0,8004,8006,
        5,858,0,0,8005,8000,1,0,0,0,8005,8002,1,0,0,0,8006,819,1,0,0,0,8007,
        8008,7,153,0,0,8008,821,1,0,0,0,8009,8010,7,154,0,0,8010,823,1,0,
        0,0,8011,8012,7,155,0,0,8012,825,1,0,0,0,8013,8014,7,156,0,0,8014,
        827,1,0,0,0,8015,8016,7,157,0,0,8016,829,1,0,0,0,8017,8018,7,158,
        0,0,8018,831,1,0,0,0,8019,8020,7,159,0,0,8020,833,1,0,0,0,1154,837,
        844,847,856,899,918,929,945,950,962,997,1007,1012,1018,1023,1027,
        1036,1039,1042,1046,1053,1056,1061,1069,1074,1079,1082,1084,1096,
        1099,1103,1106,1110,1113,1117,1120,1123,1127,1130,1134,1140,1144,
        1149,1155,1162,1170,1188,1195,1199,1203,1207,1212,1215,1218,1221,
        1224,1230,1234,1244,1248,1252,1258,1263,1266,1269,1271,1275,1282,
        1286,1289,1294,1298,1301,1305,1308,1312,1325,1328,1332,1335,1339,
        1342,1346,1349,1353,1356,1359,1363,1366,1370,1376,1380,1392,1398,
        1409,1414,1422,1426,1431,1434,1439,1449,1454,1459,1465,1470,1474,
        1476,1479,1483,1487,1490,1494,1498,1502,1508,1511,1518,1523,1529,
        1536,1542,1550,1553,1560,1563,1565,1571,1577,1594,1601,1608,1620,
        1625,1628,1631,1641,1654,1659,1675,1683,1693,1696,1702,1707,1710,
        1716,1720,1725,1731,1735,1739,1742,1745,1751,1755,1760,1771,1774,
        1781,1784,1788,1794,1806,1809,1814,1827,1834,1840,1845,1849,1852,
        1860,1868,1870,1880,1884,1887,1891,1896,1901,1906,1910,1914,1918,
        1922,1926,1930,1935,1940,1945,1951,1956,1961,1966,1971,1976,1982,
        1987,1992,1997,2002,2007,2012,2017,2024,2029,2034,2039,2043,2048,
        2056,2061,2067,2079,2086,2088,2096,2101,2104,2112,2118,2122,2135,
        2147,2149,2152,2160,2166,2172,2185,2192,2201,2206,2217,2226,2231,
        2243,2250,2259,2264,2276,2283,2292,2297,2304,2313,2318,2320,2325,
        2333,2342,2346,2349,2353,2358,2364,2370,2375,2380,2385,2390,2393,
        2398,2403,2413,2417,2424,2429,2432,2437,2440,2444,2448,2456,2475,
        2478,2481,2485,2495,2508,2521,2524,2530,2533,2537,2546,2549,2552,
        2557,2561,2564,2568,2572,2575,2579,2582,2586,2589,2595,2598,2603,
        2611,2617,2621,2625,2630,2635,2642,2646,2657,2665,2668,2674,2680,
        2683,2689,2695,2697,2702,2708,2714,2716,2720,2723,2726,2732,2738,
        2740,2745,2752,2761,2764,2768,2773,2783,2792,2800,2803,2811,2814,
        2821,2826,2834,2850,2855,2862,2881,2887,2897,2909,2916,2923,2938,
        2951,2957,2963,2969,2975,2981,2987,2992,2999,3006,3013,3018,3021,
        3023,3032,3039,3046,3053,3062,3068,3072,3076,3080,3086,3089,3094,
        3101,3108,3112,3117,3127,3135,3141,3150,3159,3168,3171,3175,3184,
        3188,3191,3194,3200,3203,3206,3210,3213,3216,3219,3230,3233,3238,
        3244,3249,3254,3257,3261,3266,3269,3274,3284,3289,3295,3297,3303,
        3305,3311,3319,3324,3332,3335,3340,3343,3348,3356,3362,3366,3368,
        3374,3382,3387,3395,3398,3403,3406,3410,3413,3416,3420,3423,3431,
        3437,3441,3447,3452,3456,3458,3464,3468,3471,3474,3477,3483,3488,
        3491,3494,3497,3500,3502,3505,3509,3512,3515,3523,3529,3532,3534,
        3543,3548,3555,3558,3561,3565,3569,3575,3579,3586,3590,3593,3596,
        3601,3608,3618,3627,3636,3646,3649,3653,3659,3663,3666,3669,3674,
        3677,3684,3688,3691,3695,3699,3702,3705,3710,3716,3720,3730,3736,
        3740,3746,3750,3756,3759,3771,3775,3779,3787,3791,3805,3810,3813,
        3817,3820,3828,3833,3836,3839,3843,3846,3855,3860,3869,3874,3881,
        3888,3896,3902,3910,3913,3916,3923,3926,3929,3936,3939,3943,3949,
        3959,3963,3972,3975,3979,3985,3993,3998,4002,4008,4014,4017,4019,
        4023,4032,4042,4048,4053,4057,4060,4063,4066,4069,4072,4076,4080,
        4088,4092,4095,4097,4110,4113,4120,4130,4133,4138,4140,4144,4152,
        4158,4167,4180,4184,4190,4195,4199,4202,4206,4209,4217,4220,4222,
        4230,4242,4248,4250,4256,4258,4260,4266,4274,4282,4286,4290,4299,
        4304,4324,4329,4335,4342,4347,4356,4359,4363,4367,4371,4374,4377,
        4380,4384,4388,4391,4394,4397,4404,4408,4423,4436,4444,4454,4458,
        4461,4467,4470,4473,4482,4491,4501,4505,4515,4519,4530,4534,4543,
        4552,4555,4559,4564,4568,4577,4580,4583,4590,4596,4602,4628,4631,
        4634,4653,4655,4678,4681,4684,4703,4705,4719,4732,4769,4774,4809,
        4823,4830,4834,4840,4848,4850,4861,4871,4878,4884,4892,4897,4905,
        4913,4921,4929,4935,4940,4945,4950,4956,4958,4969,4974,4981,4983,
        4997,5003,5008,5013,5019,5026,5034,5042,5047,5053,5056,5064,5071,
        5080,5083,5100,5108,5116,5120,5127,5133,5141,5146,5153,5161,5168,
        5173,5176,5178,5184,5186,5190,5192,5197,5204,5209,5213,5218,5222,
        5228,5234,5239,5242,5244,5250,5252,5256,5258,5263,5268,5275,5284,
        5289,5298,5302,5308,5313,5316,5318,5324,5326,5329,5336,5338,5343,
        5350,5359,5365,5367,5374,5377,5389,5395,5403,5406,5410,5413,5417,
        5419,5430,5433,5437,5440,5443,5450,5462,5465,5472,5478,5488,5493,
        5500,5505,5511,5515,5519,5527,5531,5535,5541,5543,5555,5560,5566,
        5572,5576,5581,5583,5607,5611,5614,5623,5627,5636,5640,5644,5650,
        5652,5661,5671,5698,5702,5707,5714,5717,5723,5733,5743,5753,5759,
        5768,5774,5781,5783,5791,5797,5801,5818,5828,5832,5836,5846,5851,
        5923,5941,5949,5955,5967,5971,5982,5986,5995,6003,6010,6014,6021,
        6026,6029,6032,6043,6047,6051,6066,6075,6078,6092,6110,6123,6126,
        6130,6133,6135,6142,6149,6153,6160,6167,6170,6186,6189,6199,6203,
        6209,6212,6215,6220,6224,6227,6234,6237,6243,6279,6282,6294,6297,
        6313,6315,6319,6326,6330,6337,6340,6349,6352,6357,6363,6365,6371,
        6375,6381,6384,6387,6400,6403,6409,6412,6420,6428,6434,6437,6441,
        6455,6467,6475,6479,6486,6493,6498,6511,6520,6528,6533,6536,6541,
        6544,6556,6561,6574,6576,6581,6585,6588,6590,6597,6604,6607,6610,
        6616,6620,6626,6634,6643,6656,6661,6669,6672,6677,6682,6690,6693,
        6701,6705,6712,6718,6721,6725,6738,6744,6756,6759,6768,6773,6794,
        6810,6820,6825,6830,6832,6835,6839,6841,6848,6854,6856,6859,6863,
        6866,6879,6889,6892,6895,6908,6914,6917,6925,6932,6952,6959,6961,
        6968,6970,6974,6981,6987,6998,7004,7010,7013,7017,7022,7025,7029,
        7033,7035,7040,7045,7058,7061,7065,7068,7071,7076,7081,7087,7090,
        7095,7098,7103,7106,7110,7115,7120,7125,7130,7133,7138,7143,7148,
        7154,7159,7164,7169,7173,7176,7181,7185,7189,7197,7204,7208,7213,
        7218,7222,7224,7227,7243,7253,7263,7272,7281,7288,7295,7303,7311,
        7323,7330,7340,7345,7348,7353,7356,7378,7387,7390,7395,7429,7433,
        7441,7445,7454,7462,7467,7475,7480,7485,7487,7496,7501,7509,7514,
        7522,7530,7533,7543,7561,7564,7567,7571,7584,7592,7596,7601,7606,
        7612,7617,7621,7626,7631,7636,7646,7649,7653,7657,7664,7668,7697,
        7705,7708,7711,7714,7717,7728,7742,7751,7778,7790,7796,7804,7809,
        7817,7825,7838,7844,7850,7865,7869,7875,7884,7886,7907,7919,7937,
        7954,7956,7969,7978,7987,7996,8005
    ];

    private static __ATN: antlr.ATN;
    public static get _ATN(): antlr.ATN {
        if (!MySqlParser.__ATN) {
            MySqlParser.__ATN = new antlr.ATNDeserializer().deserialize(MySqlParser._serializedATN);
        }

        return MySqlParser.__ATN;
    }


    private static readonly vocabulary = new antlr.Vocabulary(MySqlParser.literalNames, MySqlParser.symbolicNames, []);

    public override get vocabulary(): antlr.Vocabulary {
        return MySqlParser.vocabulary;
    }

    private static readonly decisionsToDFA = MySqlParser._ATN.decisionToState.map( (ds: antlr.DecisionState, index: number) => new antlr.DFA(ds, index) );
}

export class ProgramContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public EOF(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EOF, 0)!;
    }
    public singleStatement(): SingleStatementContext[];
    public singleStatement(i: number): SingleStatementContext | null;
    public singleStatement(i?: number): SingleStatementContext[] | SingleStatementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SingleStatementContext);
        }

        return this.getRuleContext(i, SingleStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_program;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterProgram) {
             listener.enterProgram(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitProgram) {
             listener.exitProgram(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitProgram) {
            return visitor.visitProgram(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SingleStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public sqlStatement(): SqlStatementContext | null {
        return this.getRuleContext(0, SqlStatementContext);
    }
    public SEMI(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.SEMI, 0);
    }
    public emptyStatement_(): EmptyStatement_Context | null {
        return this.getRuleContext(0, EmptyStatement_Context);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_singleStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSingleStatement) {
             listener.enterSingleStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSingleStatement) {
             listener.exitSingleStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSingleStatement) {
            return visitor.visitSingleStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SqlStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public ddlStatement(): DdlStatementContext | null {
        return this.getRuleContext(0, DdlStatementContext);
    }
    public dmlStatement(): DmlStatementContext | null {
        return this.getRuleContext(0, DmlStatementContext);
    }
    public transactionStatement(): TransactionStatementContext | null {
        return this.getRuleContext(0, TransactionStatementContext);
    }
    public replicationStatement(): ReplicationStatementContext | null {
        return this.getRuleContext(0, ReplicationStatementContext);
    }
    public preparedStatement(): PreparedStatementContext | null {
        return this.getRuleContext(0, PreparedStatementContext);
    }
    public administrationStatement(): AdministrationStatementContext | null {
        return this.getRuleContext(0, AdministrationStatementContext);
    }
    public utilityStatement(): UtilityStatementContext | null {
        return this.getRuleContext(0, UtilityStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_sqlStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSqlStatement) {
             listener.enterSqlStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSqlStatement) {
             listener.exitSqlStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSqlStatement) {
            return visitor.visitSqlStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class EmptyStatement_Context extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(MySqlParser.SEMI, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_emptyStatement_;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterEmptyStatement_) {
             listener.enterEmptyStatement_(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitEmptyStatement_) {
             listener.exitEmptyStatement_(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitEmptyStatement_) {
            return visitor.visitEmptyStatement_(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DdlStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public createDatabase(): CreateDatabaseContext | null {
        return this.getRuleContext(0, CreateDatabaseContext);
    }
    public createEvent(): CreateEventContext | null {
        return this.getRuleContext(0, CreateEventContext);
    }
    public createIndex(): CreateIndexContext | null {
        return this.getRuleContext(0, CreateIndexContext);
    }
    public createLogfileGroup(): CreateLogfileGroupContext | null {
        return this.getRuleContext(0, CreateLogfileGroupContext);
    }
    public createProcedure(): CreateProcedureContext | null {
        return this.getRuleContext(0, CreateProcedureContext);
    }
    public createFunction(): CreateFunctionContext | null {
        return this.getRuleContext(0, CreateFunctionContext);
    }
    public createServer(): CreateServerContext | null {
        return this.getRuleContext(0, CreateServerContext);
    }
    public createTable(): CreateTableContext | null {
        return this.getRuleContext(0, CreateTableContext);
    }
    public createTablespaceInnodb(): CreateTablespaceInnodbContext | null {
        return this.getRuleContext(0, CreateTablespaceInnodbContext);
    }
    public createTablespaceNdb(): CreateTablespaceNdbContext | null {
        return this.getRuleContext(0, CreateTablespaceNdbContext);
    }
    public createTrigger(): CreateTriggerContext | null {
        return this.getRuleContext(0, CreateTriggerContext);
    }
    public createView(): CreateViewContext | null {
        return this.getRuleContext(0, CreateViewContext);
    }
    public createRole(): CreateRoleContext | null {
        return this.getRuleContext(0, CreateRoleContext);
    }
    public alterDatabase(): AlterDatabaseContext | null {
        return this.getRuleContext(0, AlterDatabaseContext);
    }
    public alterEvent(): AlterEventContext | null {
        return this.getRuleContext(0, AlterEventContext);
    }
    public alterFunction(): AlterFunctionContext | null {
        return this.getRuleContext(0, AlterFunctionContext);
    }
    public alterInstance(): AlterInstanceContext | null {
        return this.getRuleContext(0, AlterInstanceContext);
    }
    public alterLogfileGroup(): AlterLogfileGroupContext | null {
        return this.getRuleContext(0, AlterLogfileGroupContext);
    }
    public alterProcedure(): AlterProcedureContext | null {
        return this.getRuleContext(0, AlterProcedureContext);
    }
    public alterServer(): AlterServerContext | null {
        return this.getRuleContext(0, AlterServerContext);
    }
    public alterTable(): AlterTableContext | null {
        return this.getRuleContext(0, AlterTableContext);
    }
    public alterTablespace(): AlterTablespaceContext | null {
        return this.getRuleContext(0, AlterTablespaceContext);
    }
    public alterView(): AlterViewContext | null {
        return this.getRuleContext(0, AlterViewContext);
    }
    public dropDatabase(): DropDatabaseContext | null {
        return this.getRuleContext(0, DropDatabaseContext);
    }
    public dropEvent(): DropEventContext | null {
        return this.getRuleContext(0, DropEventContext);
    }
    public dropIndex(): DropIndexContext | null {
        return this.getRuleContext(0, DropIndexContext);
    }
    public dropLogfileGroup(): DropLogfileGroupContext | null {
        return this.getRuleContext(0, DropLogfileGroupContext);
    }
    public dropProcedure(): DropProcedureContext | null {
        return this.getRuleContext(0, DropProcedureContext);
    }
    public dropFunction(): DropFunctionContext | null {
        return this.getRuleContext(0, DropFunctionContext);
    }
    public dropServer(): DropServerContext | null {
        return this.getRuleContext(0, DropServerContext);
    }
    public dropSpatial(): DropSpatialContext | null {
        return this.getRuleContext(0, DropSpatialContext);
    }
    public dropTable(): DropTableContext | null {
        return this.getRuleContext(0, DropTableContext);
    }
    public dropTablespace(): DropTablespaceContext | null {
        return this.getRuleContext(0, DropTablespaceContext);
    }
    public dropTrigger(): DropTriggerContext | null {
        return this.getRuleContext(0, DropTriggerContext);
    }
    public dropView(): DropViewContext | null {
        return this.getRuleContext(0, DropViewContext);
    }
    public dropRole(): DropRoleContext | null {
        return this.getRuleContext(0, DropRoleContext);
    }
    public setRole(): SetRoleContext | null {
        return this.getRuleContext(0, SetRoleContext);
    }
    public renameTable(): RenameTableContext | null {
        return this.getRuleContext(0, RenameTableContext);
    }
    public truncateTable(): TruncateTableContext | null {
        return this.getRuleContext(0, TruncateTableContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_ddlStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDdlStatement) {
             listener.enterDdlStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDdlStatement) {
             listener.exitDdlStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDdlStatement) {
            return visitor.visitDdlStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DmlStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public selectStatement(): SelectStatementContext | null {
        return this.getRuleContext(0, SelectStatementContext);
    }
    public setOperations(): SetOperationsContext | null {
        return this.getRuleContext(0, SetOperationsContext);
    }
    public insertStatement(): InsertStatementContext | null {
        return this.getRuleContext(0, InsertStatementContext);
    }
    public updateStatement(): UpdateStatementContext | null {
        return this.getRuleContext(0, UpdateStatementContext);
    }
    public deleteStatement(): DeleteStatementContext | null {
        return this.getRuleContext(0, DeleteStatementContext);
    }
    public replaceStatement(): ReplaceStatementContext | null {
        return this.getRuleContext(0, ReplaceStatementContext);
    }
    public callStatement(): CallStatementContext | null {
        return this.getRuleContext(0, CallStatementContext);
    }
    public interSectStatement(): InterSectStatementContext | null {
        return this.getRuleContext(0, InterSectStatementContext);
    }
    public loadDataStatement(): LoadDataStatementContext | null {
        return this.getRuleContext(0, LoadDataStatementContext);
    }
    public loadXmlStatement(): LoadXmlStatementContext | null {
        return this.getRuleContext(0, LoadXmlStatementContext);
    }
    public parenthesizedQuery(): ParenthesizedQueryContext | null {
        return this.getRuleContext(0, ParenthesizedQueryContext);
    }
    public doStatement(): DoStatementContext | null {
        return this.getRuleContext(0, DoStatementContext);
    }
    public handlerStatement(): HandlerStatementContext | null {
        return this.getRuleContext(0, HandlerStatementContext);
    }
    public importTableStatement(): ImportTableStatementContext | null {
        return this.getRuleContext(0, ImportTableStatementContext);
    }
    public valuesStatement(): ValuesStatementContext | null {
        return this.getRuleContext(0, ValuesStatementContext);
    }
    public withStatement(): WithStatementContext | null {
        return this.getRuleContext(0, WithStatementContext);
    }
    public tableStatement(): TableStatementContext | null {
        return this.getRuleContext(0, TableStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dmlStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDmlStatement) {
             listener.enterDmlStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDmlStatement) {
             listener.exitDmlStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDmlStatement) {
            return visitor.visitDmlStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TransactionStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public startTransaction(): StartTransactionContext | null {
        return this.getRuleContext(0, StartTransactionContext);
    }
    public beginWork(): BeginWorkContext | null {
        return this.getRuleContext(0, BeginWorkContext);
    }
    public commitWork(): CommitWorkContext | null {
        return this.getRuleContext(0, CommitWorkContext);
    }
    public rollbackWork(): RollbackWorkContext | null {
        return this.getRuleContext(0, RollbackWorkContext);
    }
    public savepointStatement(): SavepointStatementContext | null {
        return this.getRuleContext(0, SavepointStatementContext);
    }
    public rollbackStatement(): RollbackStatementContext | null {
        return this.getRuleContext(0, RollbackStatementContext);
    }
    public releaseStatement(): ReleaseStatementContext | null {
        return this.getRuleContext(0, ReleaseStatementContext);
    }
    public lockTables(): LockTablesContext | null {
        return this.getRuleContext(0, LockTablesContext);
    }
    public unlockTables(): UnlockTablesContext | null {
        return this.getRuleContext(0, UnlockTablesContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_transactionStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTransactionStatement) {
             listener.enterTransactionStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTransactionStatement) {
             listener.exitTransactionStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransactionStatement) {
            return visitor.visitTransactionStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReplicationStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public changeMaster(): ChangeMasterContext | null {
        return this.getRuleContext(0, ChangeMasterContext);
    }
    public changeReplicationFilter(): ChangeReplicationFilterContext | null {
        return this.getRuleContext(0, ChangeReplicationFilterContext);
    }
    public changeReplicationSource(): ChangeReplicationSourceContext | null {
        return this.getRuleContext(0, ChangeReplicationSourceContext);
    }
    public purgeBinaryLogs(): PurgeBinaryLogsContext | null {
        return this.getRuleContext(0, PurgeBinaryLogsContext);
    }
    public startSlaveOrReplica(): StartSlaveOrReplicaContext | null {
        return this.getRuleContext(0, StartSlaveOrReplicaContext);
    }
    public stopSlaveOrReplica(): StopSlaveOrReplicaContext | null {
        return this.getRuleContext(0, StopSlaveOrReplicaContext);
    }
    public startGroupReplication(): StartGroupReplicationContext | null {
        return this.getRuleContext(0, StartGroupReplicationContext);
    }
    public stopGroupReplication(): StopGroupReplicationContext | null {
        return this.getRuleContext(0, StopGroupReplicationContext);
    }
    public xaStartTransaction(): XaStartTransactionContext | null {
        return this.getRuleContext(0, XaStartTransactionContext);
    }
    public xaEndTransaction(): XaEndTransactionContext | null {
        return this.getRuleContext(0, XaEndTransactionContext);
    }
    public xaPrepareStatement(): XaPrepareStatementContext | null {
        return this.getRuleContext(0, XaPrepareStatementContext);
    }
    public xaCommitWork(): XaCommitWorkContext | null {
        return this.getRuleContext(0, XaCommitWorkContext);
    }
    public xaRollbackWork(): XaRollbackWorkContext | null {
        return this.getRuleContext(0, XaRollbackWorkContext);
    }
    public xaRecoverWork(): XaRecoverWorkContext | null {
        return this.getRuleContext(0, XaRecoverWorkContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_replicationStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterReplicationStatement) {
             listener.enterReplicationStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitReplicationStatement) {
             listener.exitReplicationStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitReplicationStatement) {
            return visitor.visitReplicationStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PreparedStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public prepareStatement(): PrepareStatementContext | null {
        return this.getRuleContext(0, PrepareStatementContext);
    }
    public executeStatement(): ExecuteStatementContext | null {
        return this.getRuleContext(0, ExecuteStatementContext);
    }
    public deallocatePrepare(): DeallocatePrepareContext | null {
        return this.getRuleContext(0, DeallocatePrepareContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_preparedStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPreparedStatement) {
             listener.enterPreparedStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPreparedStatement) {
             listener.exitPreparedStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPreparedStatement) {
            return visitor.visitPreparedStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CompoundStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public blockStatement(): BlockStatementContext | null {
        return this.getRuleContext(0, BlockStatementContext);
    }
    public caseStatement(): CaseStatementContext | null {
        return this.getRuleContext(0, CaseStatementContext);
    }
    public ifStatement(): IfStatementContext | null {
        return this.getRuleContext(0, IfStatementContext);
    }
    public leaveStatement(): LeaveStatementContext | null {
        return this.getRuleContext(0, LeaveStatementContext);
    }
    public loopStatement(): LoopStatementContext | null {
        return this.getRuleContext(0, LoopStatementContext);
    }
    public repeatStatement(): RepeatStatementContext | null {
        return this.getRuleContext(0, RepeatStatementContext);
    }
    public whileStatement(): WhileStatementContext | null {
        return this.getRuleContext(0, WhileStatementContext);
    }
    public iterateStatement(): IterateStatementContext | null {
        return this.getRuleContext(0, IterateStatementContext);
    }
    public returnStatement(): ReturnStatementContext | null {
        return this.getRuleContext(0, ReturnStatementContext);
    }
    public cursorStatement(): CursorStatementContext | null {
        return this.getRuleContext(0, CursorStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_compoundStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCompoundStatement) {
             listener.enterCompoundStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCompoundStatement) {
             listener.exitCompoundStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCompoundStatement) {
            return visitor.visitCompoundStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AdministrationStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public alterUser(): AlterUserContext | null {
        return this.getRuleContext(0, AlterUserContext);
    }
    public createUser(): CreateUserContext | null {
        return this.getRuleContext(0, CreateUserContext);
    }
    public dropUser(): DropUserContext | null {
        return this.getRuleContext(0, DropUserContext);
    }
    public grantStatement(): GrantStatementContext | null {
        return this.getRuleContext(0, GrantStatementContext);
    }
    public grantProxy(): GrantProxyContext | null {
        return this.getRuleContext(0, GrantProxyContext);
    }
    public renameUser(): RenameUserContext | null {
        return this.getRuleContext(0, RenameUserContext);
    }
    public revokeStatement(): RevokeStatementContext | null {
        return this.getRuleContext(0, RevokeStatementContext);
    }
    public alterResourceGroup(): AlterResourceGroupContext | null {
        return this.getRuleContext(0, AlterResourceGroupContext);
    }
    public createResourceGroup(): CreateResourceGroupContext | null {
        return this.getRuleContext(0, CreateResourceGroupContext);
    }
    public dropResourceGroup(): DropResourceGroupContext | null {
        return this.getRuleContext(0, DropResourceGroupContext);
    }
    public setResourceGroup(): SetResourceGroupContext | null {
        return this.getRuleContext(0, SetResourceGroupContext);
    }
    public analyzeTable(): AnalyzeTableContext | null {
        return this.getRuleContext(0, AnalyzeTableContext);
    }
    public checkTable(): CheckTableContext | null {
        return this.getRuleContext(0, CheckTableContext);
    }
    public checksumTable(): ChecksumTableContext | null {
        return this.getRuleContext(0, ChecksumTableContext);
    }
    public optimizeTable(): OptimizeTableContext | null {
        return this.getRuleContext(0, OptimizeTableContext);
    }
    public repairTable(): RepairTableContext | null {
        return this.getRuleContext(0, RepairTableContext);
    }
    public installComponent(): InstallComponentContext | null {
        return this.getRuleContext(0, InstallComponentContext);
    }
    public uninstallComponent(): UninstallComponentContext | null {
        return this.getRuleContext(0, UninstallComponentContext);
    }
    public installPlugin(): InstallPluginContext | null {
        return this.getRuleContext(0, InstallPluginContext);
    }
    public uninstallPlugin(): UninstallPluginContext | null {
        return this.getRuleContext(0, UninstallPluginContext);
    }
    public cloneStatement(): CloneStatementContext | null {
        return this.getRuleContext(0, CloneStatementContext);
    }
    public setStatement(): SetStatementContext | null {
        return this.getRuleContext(0, SetStatementContext);
    }
    public showStatement(): ShowStatementContext | null {
        return this.getRuleContext(0, ShowStatementContext);
    }
    public binlogStatement(): BinlogStatementContext | null {
        return this.getRuleContext(0, BinlogStatementContext);
    }
    public cacheIndexStatement(): CacheIndexStatementContext | null {
        return this.getRuleContext(0, CacheIndexStatementContext);
    }
    public flushStatement(): FlushStatementContext | null {
        return this.getRuleContext(0, FlushStatementContext);
    }
    public killStatement(): KillStatementContext | null {
        return this.getRuleContext(0, KillStatementContext);
    }
    public loadIndexIntoCache(): LoadIndexIntoCacheContext | null {
        return this.getRuleContext(0, LoadIndexIntoCacheContext);
    }
    public resetStatement(): ResetStatementContext | null {
        return this.getRuleContext(0, ResetStatementContext);
    }
    public resetPersist(): ResetPersistContext | null {
        return this.getRuleContext(0, ResetPersistContext);
    }
    public resetAllChannel(): ResetAllChannelContext | null {
        return this.getRuleContext(0, ResetAllChannelContext);
    }
    public reStartStatement(): ReStartStatementContext | null {
        return this.getRuleContext(0, ReStartStatementContext);
    }
    public shutdownStatement(): ShutdownStatementContext | null {
        return this.getRuleContext(0, ShutdownStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_administrationStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAdministrationStatement) {
             listener.enterAdministrationStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAdministrationStatement) {
             listener.exitAdministrationStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAdministrationStatement) {
            return visitor.visitAdministrationStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UtilityStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public fullDescribeStatement(): FullDescribeStatementContext | null {
        return this.getRuleContext(0, FullDescribeStatementContext);
    }
    public simpleDescribeStatement(): SimpleDescribeStatementContext | null {
        return this.getRuleContext(0, SimpleDescribeStatementContext);
    }
    public analyzeDescribeStatement(): AnalyzeDescribeStatementContext | null {
        return this.getRuleContext(0, AnalyzeDescribeStatementContext);
    }
    public helpStatement(): HelpStatementContext | null {
        return this.getRuleContext(0, HelpStatementContext);
    }
    public useStatement(): UseStatementContext | null {
        return this.getRuleContext(0, UseStatementContext);
    }
    public signalStatement(): SignalStatementContext | null {
        return this.getRuleContext(0, SignalStatementContext);
    }
    public resignalStatement(): ResignalStatementContext | null {
        return this.getRuleContext(0, ResignalStatementContext);
    }
    public diagnosticsStatement(): DiagnosticsStatementContext | null {
        return this.getRuleContext(0, DiagnosticsStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_utilityStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUtilityStatement) {
             listener.enterUtilityStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUtilityStatement) {
             listener.exitUtilityStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUtilityStatement) {
            return visitor.visitUtilityStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateDatabaseContext extends antlr.ParserRuleContext {
    public _dbFormat?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public databaseNameCreate(): DatabaseNameCreateContext {
        return this.getRuleContext(0, DatabaseNameCreateContext)!;
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATABASE, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEMA, 0);
    }
    public ifNotExists(): IfNotExistsContext | null {
        return this.getRuleContext(0, IfNotExistsContext);
    }
    public createDatabaseOption(): CreateDatabaseOptionContext[];
    public createDatabaseOption(i: number): CreateDatabaseOptionContext | null;
    public createDatabaseOption(i?: number): CreateDatabaseOptionContext[] | CreateDatabaseOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(CreateDatabaseOptionContext);
        }

        return this.getRuleContext(i, CreateDatabaseOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createDatabase;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateDatabase) {
             listener.enterCreateDatabase(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateDatabase) {
             listener.exitCreateDatabase(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateDatabase) {
            return visitor.visitCreateDatabase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateEventContext extends antlr.ParserRuleContext {
    public _event_name?: FullIdContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_EVENT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EVENT, 0)!;
    }
    public KW_ON(): antlr.TerminalNode[];
    public KW_ON(i: number): antlr.TerminalNode | null;
    public KW_ON(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ON);
    	} else {
    		return this.getToken(MySqlParser.KW_ON, i);
    	}
    }
    public KW_SCHEDULE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SCHEDULE, 0)!;
    }
    public scheduleExpression(): ScheduleExpressionContext {
        return this.getRuleContext(0, ScheduleExpressionContext)!;
    }
    public KW_DO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DO, 0)!;
    }
    public routineBody(): RoutineBodyContext {
        return this.getRuleContext(0, RoutineBodyContext)!;
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public ownerStatement(): OwnerStatementContext | null {
        return this.getRuleContext(0, OwnerStatementContext);
    }
    public ifNotExists(): IfNotExistsContext | null {
        return this.getRuleContext(0, IfNotExistsContext);
    }
    public KW_COMPLETION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMPLETION, 0);
    }
    public KW_PRESERVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRESERVE, 0);
    }
    public enableType(): EnableTypeContext | null {
        return this.getRuleContext(0, EnableTypeContext);
    }
    public KW_COMMENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMMENT, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createEvent;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateEvent) {
             listener.enterCreateEvent(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateEvent) {
             listener.exitCreateEvent(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateEvent) {
            return visitor.visitCreateEvent(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateIndexContext extends antlr.ParserRuleContext {
    public _intimeAction?: Token | null;
    public _indexCategory?: Token | null;
    public _algType?: Token | null;
    public _lockType?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_INDEX(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INDEX, 0)!;
    }
    public indexNameCreate(): IndexNameCreateContext {
        return this.getRuleContext(0, IndexNameCreateContext)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ON, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public indexColumnNames(): IndexColumnNamesContext {
        return this.getRuleContext(0, IndexColumnNamesContext)!;
    }
    public indexType(): IndexTypeContext | null {
        return this.getRuleContext(0, IndexTypeContext);
    }
    public indexOption(): IndexOptionContext[];
    public indexOption(i: number): IndexOptionContext | null;
    public indexOption(i?: number): IndexOptionContext[] | IndexOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IndexOptionContext);
        }

        return this.getRuleContext(i, IndexOptionContext);
    }
    public KW_ALGORITHM(): antlr.TerminalNode[];
    public KW_ALGORITHM(i: number): antlr.TerminalNode | null;
    public KW_ALGORITHM(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ALGORITHM);
    	} else {
    		return this.getToken(MySqlParser.KW_ALGORITHM, i);
    	}
    }
    public KW_LOCK(): antlr.TerminalNode[];
    public KW_LOCK(i: number): antlr.TerminalNode | null;
    public KW_LOCK(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_LOCK);
    	} else {
    		return this.getToken(MySqlParser.KW_LOCK, i);
    	}
    }
    public KW_ONLINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ONLINE, 0);
    }
    public KW_OFFLINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OFFLINE, 0);
    }
    public KW_UNIQUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNIQUE, 0);
    }
    public KW_FULLTEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FULLTEXT, 0);
    }
    public KW_SPATIAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SPATIAL, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode[];
    public KW_DEFAULT(i: number): antlr.TerminalNode | null;
    public KW_DEFAULT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_DEFAULT);
    	} else {
    		return this.getToken(MySqlParser.KW_DEFAULT, i);
    	}
    }
    public KW_INPLACE(): antlr.TerminalNode[];
    public KW_INPLACE(i: number): antlr.TerminalNode | null;
    public KW_INPLACE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_INPLACE);
    	} else {
    		return this.getToken(MySqlParser.KW_INPLACE, i);
    	}
    }
    public KW_COPY(): antlr.TerminalNode[];
    public KW_COPY(i: number): antlr.TerminalNode | null;
    public KW_COPY(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_COPY);
    	} else {
    		return this.getToken(MySqlParser.KW_COPY, i);
    	}
    }
    public KW_NONE(): antlr.TerminalNode[];
    public KW_NONE(i: number): antlr.TerminalNode | null;
    public KW_NONE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_NONE);
    	} else {
    		return this.getToken(MySqlParser.KW_NONE, i);
    	}
    }
    public KW_SHARED(): antlr.TerminalNode[];
    public KW_SHARED(i: number): antlr.TerminalNode | null;
    public KW_SHARED(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_SHARED);
    	} else {
    		return this.getToken(MySqlParser.KW_SHARED, i);
    	}
    }
    public KW_EXCLUSIVE(): antlr.TerminalNode[];
    public KW_EXCLUSIVE(i: number): antlr.TerminalNode | null;
    public KW_EXCLUSIVE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_EXCLUSIVE);
    	} else {
    		return this.getToken(MySqlParser.KW_EXCLUSIVE, i);
    	}
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createIndex;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateIndex) {
             listener.enterCreateIndex(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateIndex) {
             listener.exitCreateIndex(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateIndex) {
            return visitor.visitCreateIndex(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateLogfileGroupContext extends antlr.ParserRuleContext {
    public _logfileGroupName?: UidContext;
    public _undoFile?: Token | null;
    public _initSize?: FileSizeLiteralContext;
    public _undoSize?: FileSizeLiteralContext;
    public _redoSize?: FileSizeLiteralContext;
    public _nodegroup?: UidContext;
    public _comment?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_LOGFILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LOGFILE, 0)!;
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GROUP, 0)!;
    }
    public KW_ADD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ADD, 0)!;
    }
    public KW_UNDOFILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UNDOFILE, 0)!;
    }
    public KW_ENGINE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ENGINE, 0)!;
    }
    public engineName(): EngineNameContext {
        return this.getRuleContext(0, EngineNameContext)!;
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public STRING_LITERAL(): antlr.TerminalNode[];
    public STRING_LITERAL(i: number): antlr.TerminalNode | null;
    public STRING_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STRING_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.STRING_LITERAL, i);
    	}
    }
    public KW_INITIAL_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INITIAL_SIZE, 0);
    }
    public KW_UNDO_BUFFER_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNDO_BUFFER_SIZE, 0);
    }
    public KW_REDO_BUFFER_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REDO_BUFFER_SIZE, 0);
    }
    public KW_NODEGROUP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NODEGROUP, 0);
    }
    public KW_WAIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WAIT, 0);
    }
    public KW_COMMENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMMENT, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public fileSizeLiteral(): FileSizeLiteralContext[];
    public fileSizeLiteral(i: number): FileSizeLiteralContext | null;
    public fileSizeLiteral(i?: number): FileSizeLiteralContext[] | FileSizeLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FileSizeLiteralContext);
        }

        return this.getRuleContext(i, FileSizeLiteralContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createLogfileGroup;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateLogfileGroup) {
             listener.enterCreateLogfileGroup(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateLogfileGroup) {
             listener.exitCreateLogfileGroup(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateLogfileGroup) {
            return visitor.visitCreateLogfileGroup(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateProcedureContext extends antlr.ParserRuleContext {
    public _sp_name?: FullIdContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_PROCEDURE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PROCEDURE, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public routineBody(): RoutineBodyContext {
        return this.getRuleContext(0, RoutineBodyContext)!;
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public ownerStatement(): OwnerStatementContext | null {
        return this.getRuleContext(0, OwnerStatementContext);
    }
    public ifNotExists(): IfNotExistsContext | null {
        return this.getRuleContext(0, IfNotExistsContext);
    }
    public procedureParameter(): ProcedureParameterContext[];
    public procedureParameter(i: number): ProcedureParameterContext | null;
    public procedureParameter(i?: number): ProcedureParameterContext[] | ProcedureParameterContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ProcedureParameterContext);
        }

        return this.getRuleContext(i, ProcedureParameterContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public routineOption(): RoutineOptionContext[];
    public routineOption(i: number): RoutineOptionContext | null;
    public routineOption(i?: number): RoutineOptionContext[] | RoutineOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(RoutineOptionContext);
        }

        return this.getRuleContext(i, RoutineOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createProcedure;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateProcedure) {
             listener.enterCreateProcedure(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateProcedure) {
             listener.exitCreateProcedure(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateProcedure) {
            return visitor.visitCreateProcedure(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateRoleContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_ROLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ROLE, 0)!;
    }
    public userOrRoleNames(): UserOrRoleNamesContext {
        return this.getRuleContext(0, UserOrRoleNamesContext)!;
    }
    public ifNotExists(): IfNotExistsContext | null {
        return this.getRuleContext(0, IfNotExistsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createRole;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateRole) {
             listener.enterCreateRole(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateRole) {
             listener.exitCreateRole(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateRole) {
            return visitor.visitCreateRole(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateServerContext extends antlr.ParserRuleContext {
    public _servername?: UidContext;
    public _wrapperName?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_SERVER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SERVER, 0)!;
    }
    public KW_FOREIGN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FOREIGN, 0)!;
    }
    public KW_DATA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DATA, 0)!;
    }
    public KW_WRAPPER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_WRAPPER, 0)!;
    }
    public KW_OPTIONS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_OPTIONS, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public serverOption(): ServerOptionContext[];
    public serverOption(i: number): ServerOptionContext | null;
    public serverOption(i?: number): ServerOptionContext[] | ServerOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ServerOptionContext);
        }

        return this.getRuleContext(i, ServerOptionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public KW_MYSQL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MYSQL, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createServer;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateServer) {
             listener.enterCreateServer(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateServer) {
             listener.exitCreateServer(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateServer) {
            return visitor.visitCreateServer(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateTableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createTable;
    }
    public override copyFrom(ctx: CreateTableContext): void {
        super.copyFrom(ctx);
    }
}
export class CopyCreateTableContext extends CreateTableContext {
    public constructor(ctx: CreateTableContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableNameCreate(): TableNameCreateContext {
        return this.getRuleContext(0, TableNameCreateContext)!;
    }
    public KW_LIKE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LIKE, 0);
    }
    public tableName(): TableNameContext | null {
        return this.getRuleContext(0, TableNameContext);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public KW_TEMPORARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TEMPORARY, 0);
    }
    public ifNotExists(): IfNotExistsContext | null {
        return this.getRuleContext(0, IfNotExistsContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCopyCreateTable) {
             listener.enterCopyCreateTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCopyCreateTable) {
             listener.exitCopyCreateTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCopyCreateTable) {
            return visitor.visitCopyCreateTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ColumnCreateTableContext extends CreateTableContext {
    public constructor(ctx: CreateTableContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableNameCreate(): TableNameCreateContext {
        return this.getRuleContext(0, TableNameCreateContext)!;
    }
    public createDefinitions(): CreateDefinitionsContext {
        return this.getRuleContext(0, CreateDefinitionsContext)!;
    }
    public KW_TEMPORARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TEMPORARY, 0);
    }
    public ifNotExists(): IfNotExistsContext | null {
        return this.getRuleContext(0, IfNotExistsContext);
    }
    public tableOption(): TableOptionContext[];
    public tableOption(i: number): TableOptionContext | null;
    public tableOption(i?: number): TableOptionContext[] | TableOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TableOptionContext);
        }

        return this.getRuleContext(i, TableOptionContext);
    }
    public partitionDefinitions(): PartitionDefinitionsContext | null {
        return this.getRuleContext(0, PartitionDefinitionsContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterColumnCreateTable) {
             listener.enterColumnCreateTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitColumnCreateTable) {
             listener.exitColumnCreateTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumnCreateTable) {
            return visitor.visitColumnCreateTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class QueryCreateTableContext extends CreateTableContext {
    public _tb?: TableNameCreateContext;
    public _col?: CreateDefinitionsContext;
    public constructor(ctx: CreateTableContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public selectStatement(): SelectStatementContext {
        return this.getRuleContext(0, SelectStatementContext)!;
    }
    public tableNameCreate(): TableNameCreateContext {
        return this.getRuleContext(0, TableNameCreateContext)!;
    }
    public KW_TEMPORARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TEMPORARY, 0);
    }
    public ifNotExists(): IfNotExistsContext | null {
        return this.getRuleContext(0, IfNotExistsContext);
    }
    public tableOption(): TableOptionContext[];
    public tableOption(i: number): TableOptionContext | null;
    public tableOption(i?: number): TableOptionContext[] | TableOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TableOptionContext);
        }

        return this.getRuleContext(i, TableOptionContext);
    }
    public partitionDefinitions(): PartitionDefinitionsContext | null {
        return this.getRuleContext(0, PartitionDefinitionsContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public createDefinitions(): CreateDefinitionsContext | null {
        return this.getRuleContext(0, CreateDefinitionsContext);
    }
    public KW_IGNORE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IGNORE, 0);
    }
    public KW_REPLACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLACE, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterQueryCreateTable) {
             listener.enterQueryCreateTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitQueryCreateTable) {
             listener.exitQueryCreateTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitQueryCreateTable) {
            return visitor.visitQueryCreateTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateTablespaceInnodbContext extends antlr.ParserRuleContext {
    public _datafile?: Token | null;
    public _autoextendSize?: FileSizeLiteralContext;
    public _fileBlockSize?: FileSizeLiteralContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_TABLESPACE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLESPACE, 0)!;
    }
    public tablespaceNameCreate(): TablespaceNameCreateContext {
        return this.getRuleContext(0, TablespaceNameCreateContext)!;
    }
    public KW_UNDO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNDO, 0);
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ADD, 0);
    }
    public KW_DATAFILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATAFILE, 0);
    }
    public KW_AUTOEXTEND_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUTOEXTEND_SIZE, 0);
    }
    public KW_FILE_BLOCK_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FILE_BLOCK_SIZE, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public KW_ENGINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENGINE, 0);
    }
    public engineName(): EngineNameContext | null {
        return this.getRuleContext(0, EngineNameContext);
    }
    public KW_ENGINE_ATTRIBUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENGINE_ATTRIBUTE, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode[];
    public STRING_LITERAL(i: number): antlr.TerminalNode | null;
    public STRING_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STRING_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.STRING_LITERAL, i);
    	}
    }
    public fileSizeLiteral(): FileSizeLiteralContext[];
    public fileSizeLiteral(i: number): FileSizeLiteralContext | null;
    public fileSizeLiteral(i?: number): FileSizeLiteralContext[] | FileSizeLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FileSizeLiteralContext);
        }

        return this.getRuleContext(i, FileSizeLiteralContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createTablespaceInnodb;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateTablespaceInnodb) {
             listener.enterCreateTablespaceInnodb(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateTablespaceInnodb) {
             listener.exitCreateTablespaceInnodb(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateTablespaceInnodb) {
            return visitor.visitCreateTablespaceInnodb(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateTablespaceNdbContext extends antlr.ParserRuleContext {
    public _datafile?: Token | null;
    public _logfileGroupName?: UidContext;
    public _extentSize?: FileSizeLiteralContext;
    public _initialSize?: FileSizeLiteralContext;
    public _autoextendSize?: FileSizeLiteralContext;
    public _maxSize?: FileSizeLiteralContext;
    public _nodegroup?: UidContext;
    public _comment?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_TABLESPACE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLESPACE, 0)!;
    }
    public tablespaceNameCreate(): TablespaceNameCreateContext {
        return this.getRuleContext(0, TablespaceNameCreateContext)!;
    }
    public KW_ADD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ADD, 0)!;
    }
    public KW_DATAFILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DATAFILE, 0)!;
    }
    public KW_USE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_USE, 0)!;
    }
    public KW_LOGFILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LOGFILE, 0)!;
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GROUP, 0)!;
    }
    public KW_ENGINE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ENGINE, 0)!;
    }
    public engineName(): EngineNameContext {
        return this.getRuleContext(0, EngineNameContext)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode[];
    public STRING_LITERAL(i: number): antlr.TerminalNode | null;
    public STRING_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STRING_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.STRING_LITERAL, i);
    	}
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public KW_UNDO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNDO, 0);
    }
    public KW_EXTENT_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXTENT_SIZE, 0);
    }
    public KW_INITIAL_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INITIAL_SIZE, 0);
    }
    public KW_AUTOEXTEND_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUTOEXTEND_SIZE, 0);
    }
    public KW_MAX_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX_SIZE, 0);
    }
    public KW_NODEGROUP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NODEGROUP, 0);
    }
    public KW_WAIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WAIT, 0);
    }
    public KW_COMMENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMMENT, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public fileSizeLiteral(): FileSizeLiteralContext[];
    public fileSizeLiteral(i: number): FileSizeLiteralContext | null;
    public fileSizeLiteral(i?: number): FileSizeLiteralContext[] | FileSizeLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FileSizeLiteralContext);
        }

        return this.getRuleContext(i, FileSizeLiteralContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createTablespaceNdb;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateTablespaceNdb) {
             listener.enterCreateTablespaceNdb(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateTablespaceNdb) {
             listener.exitCreateTablespaceNdb(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateTablespaceNdb) {
            return visitor.visitCreateTablespaceNdb(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateTriggerContext extends antlr.ParserRuleContext {
    public _trigger_name?: FullIdContext;
    public _triggerTime?: Token | null;
    public _triggerEvent?: Token | null;
    public _triggerPlace?: Token | null;
    public _other_trigger_name?: FullIdContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_TRIGGER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TRIGGER, 0)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ON, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FOR, 0)!;
    }
    public KW_EACH(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EACH, 0)!;
    }
    public KW_ROW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ROW, 0)!;
    }
    public routineBody(): RoutineBodyContext {
        return this.getRuleContext(0, RoutineBodyContext)!;
    }
    public fullId(): FullIdContext[];
    public fullId(i: number): FullIdContext | null;
    public fullId(i?: number): FullIdContext[] | FullIdContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FullIdContext);
        }

        return this.getRuleContext(i, FullIdContext);
    }
    public KW_BEFORE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BEFORE, 0);
    }
    public KW_AFTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AFTER, 0);
    }
    public KW_INSERT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INSERT, 0);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UPDATE, 0);
    }
    public KW_DELETE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DELETE, 0);
    }
    public ownerStatement(): OwnerStatementContext | null {
        return this.getRuleContext(0, OwnerStatementContext);
    }
    public ifNotExists(): IfNotExistsContext | null {
        return this.getRuleContext(0, IfNotExistsContext);
    }
    public KW_FOLLOWS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOLLOWS, 0);
    }
    public KW_PRECEDES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRECEDES, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createTrigger;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateTrigger) {
             listener.enterCreateTrigger(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateTrigger) {
             listener.exitCreateTrigger(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateTrigger) {
            return visitor.visitCreateTrigger(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class WithClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_WITH, 0)!;
    }
    public commonTableExpressions(): CommonTableExpressionsContext {
        return this.getRuleContext(0, CommonTableExpressionsContext)!;
    }
    public KW_RECURSIVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RECURSIVE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_withClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterWithClause) {
             listener.enterWithClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitWithClause) {
             listener.exitWithClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitWithClause) {
            return visitor.visitWithClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CommonTableExpressionsContext extends antlr.ParserRuleContext {
    public _cteName?: UidContext;
    public _cteColumnName?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AS, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode[];
    public LR_BRACKET(i: number): antlr.TerminalNode | null;
    public LR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.LR_BRACKET, i);
    	}
    }
    public dmlStatement(): DmlStatementContext {
        return this.getRuleContext(0, DmlStatementContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode[];
    public RR_BRACKET(i: number): antlr.TerminalNode | null;
    public RR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.RR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.RR_BRACKET, i);
    	}
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public commonTableExpressions(): CommonTableExpressionsContext | null {
        return this.getRuleContext(0, CommonTableExpressionsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_commonTableExpressions;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCommonTableExpressions) {
             listener.enterCommonTableExpressions(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCommonTableExpressions) {
             listener.exitCommonTableExpressions(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCommonTableExpressions) {
            return visitor.visitCommonTableExpressions(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateViewContext extends antlr.ParserRuleContext {
    public _algType?: Token | null;
    public _secContext?: Token | null;
    public _checkOption?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_VIEW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VIEW, 0)!;
    }
    public viewNameCreate(): ViewNameCreateContext {
        return this.getRuleContext(0, ViewNameCreateContext)!;
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AS, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode[];
    public LR_BRACKET(i: number): antlr.TerminalNode | null;
    public LR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.LR_BRACKET, i);
    	}
    }
    public selectStatement(): SelectStatementContext | null {
        return this.getRuleContext(0, SelectStatementContext);
    }
    public RR_BRACKET(): antlr.TerminalNode[];
    public RR_BRACKET(i: number): antlr.TerminalNode | null;
    public RR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.RR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.RR_BRACKET, i);
    	}
    }
    public orReplace(): OrReplaceContext | null {
        return this.getRuleContext(0, OrReplaceContext);
    }
    public KW_ALGORITHM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALGORITHM, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public ownerStatement(): OwnerStatementContext | null {
        return this.getRuleContext(0, OwnerStatementContext);
    }
    public KW_SQL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL, 0);
    }
    public KW_SECURITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SECURITY, 0);
    }
    public columnNameCreate(): ColumnNameCreateContext[];
    public columnNameCreate(i: number): ColumnNameCreateContext | null;
    public columnNameCreate(i?: number): ColumnNameCreateContext[] | ColumnNameCreateContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ColumnNameCreateContext);
        }

        return this.getRuleContext(i, ColumnNameCreateContext);
    }
    public KW_UNDEFINED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNDEFINED, 0);
    }
    public KW_MERGE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MERGE, 0);
    }
    public KW_TEMPTABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TEMPTABLE, 0);
    }
    public KW_DEFINER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFINER, 0);
    }
    public KW_INVOKER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INVOKER, 0);
    }
    public withClause(): WithClauseContext | null {
        return this.getRuleContext(0, WithClauseContext);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public KW_CHECK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHECK, 0);
    }
    public KW_OPTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OPTION, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_CASCADED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CASCADED, 0);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCAL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createView;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateView) {
             listener.enterCreateView(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateView) {
             listener.exitCreateView(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateView) {
            return visitor.visitCreateView(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateDatabaseOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public charSet(): CharSetContext | null {
        return this.getRuleContext(0, CharSetContext);
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode[];
    public KW_DEFAULT(i: number): antlr.TerminalNode | null;
    public KW_DEFAULT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_DEFAULT);
    	} else {
    		return this.getToken(MySqlParser.KW_DEFAULT, i);
    	}
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public KW_COLLATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLLATE, 0);
    }
    public collationName(): CollationNameContext | null {
        return this.getRuleContext(0, CollationNameContext);
    }
    public KW_ENCRYPTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENCRYPTION, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_READ(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_READ, 0);
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ONLY, 0);
    }
    public ZERO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ZERO_DECIMAL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createDatabaseOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateDatabaseOption) {
             listener.enterCreateDatabaseOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateDatabaseOption) {
             listener.exitCreateDatabaseOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateDatabaseOption) {
            return visitor.visitCreateDatabaseOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CharSetContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHARACTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARACTER, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET, 0);
    }
    public KW_CHARSET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARSET, 0);
    }
    public KW_CHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHAR, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_charSet;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCharSet) {
             listener.enterCharSet(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCharSet) {
             listener.exitCharSet(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCharSet) {
            return visitor.visitCharSet(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CurrentUserExpressionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CURRENT_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT_USER, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USER, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_currentUserExpression;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCurrentUserExpression) {
             listener.enterCurrentUserExpression(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCurrentUserExpression) {
             listener.exitCurrentUserExpression(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCurrentUserExpression) {
            return visitor.visitCurrentUserExpression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OwnerStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DEFINER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DEFINER, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public userName(): UserNameContext | null {
        return this.getRuleContext(0, UserNameContext);
    }
    public currentUserExpression(): CurrentUserExpressionContext | null {
        return this.getRuleContext(0, CurrentUserExpressionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_ownerStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterOwnerStatement) {
             listener.enterOwnerStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitOwnerStatement) {
             listener.exitOwnerStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitOwnerStatement) {
            return visitor.visitOwnerStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ScheduleExpressionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_scheduleExpression;
    }
    public override copyFrom(ctx: ScheduleExpressionContext): void {
        super.copyFrom(ctx);
    }
}
export class PreciseScheduleContext extends ScheduleExpressionContext {
    public constructor(ctx: ScheduleExpressionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_AT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AT, 0)!;
    }
    public timestampValue(): TimestampValueContext {
        return this.getRuleContext(0, TimestampValueContext)!;
    }
    public intervalExpr(): IntervalExprContext[];
    public intervalExpr(i: number): IntervalExprContext | null;
    public intervalExpr(i?: number): IntervalExprContext[] | IntervalExprContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IntervalExprContext);
        }

        return this.getRuleContext(i, IntervalExprContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPreciseSchedule) {
             listener.enterPreciseSchedule(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPreciseSchedule) {
             listener.exitPreciseSchedule(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPreciseSchedule) {
            return visitor.visitPreciseSchedule(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class IntervalScheduleContext extends ScheduleExpressionContext {
    public _startTimestamp?: TimestampValueContext;
    public _intervalExpr?: IntervalExprContext;
    public _startIntervals: IntervalExprContext[] = [];
    public _endTimestamp?: TimestampValueContext;
    public _endIntervals: IntervalExprContext[] = [];
    public constructor(ctx: ScheduleExpressionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_EVERY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EVERY, 0)!;
    }
    public intervalType(): IntervalTypeContext {
        return this.getRuleContext(0, IntervalTypeContext)!;
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public KW_STARTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STARTS, 0);
    }
    public KW_ENDS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENDS, 0);
    }
    public timestampValue(): TimestampValueContext[];
    public timestampValue(i: number): TimestampValueContext | null;
    public timestampValue(i?: number): TimestampValueContext[] | TimestampValueContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TimestampValueContext);
        }

        return this.getRuleContext(i, TimestampValueContext);
    }
    public intervalExpr(): IntervalExprContext[];
    public intervalExpr(i: number): IntervalExprContext | null;
    public intervalExpr(i?: number): IntervalExprContext[] | IntervalExprContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IntervalExprContext);
        }

        return this.getRuleContext(i, IntervalExprContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIntervalSchedule) {
             listener.enterIntervalSchedule(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIntervalSchedule) {
             listener.exitIntervalSchedule(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIntervalSchedule) {
            return visitor.visitIntervalSchedule(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TimestampValueContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CURRENT_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT_TIMESTAMP, 0);
    }
    public stringLiteral(): StringLiteralContext | null {
        return this.getRuleContext(0, StringLiteralContext);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_timestampValue;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTimestampValue) {
             listener.enterTimestampValue(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTimestampValue) {
             listener.exitTimestampValue(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTimestampValue) {
            return visitor.visitTimestampValue(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IntervalExprContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public PLUS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.PLUS, 0)!;
    }
    public KW_INTERVAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INTERVAL, 0)!;
    }
    public intervalType(): IntervalTypeContext {
        return this.getRuleContext(0, IntervalTypeContext)!;
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_intervalExpr;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIntervalExpr) {
             listener.enterIntervalExpr(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIntervalExpr) {
             listener.exitIntervalExpr(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIntervalExpr) {
            return visitor.visitIntervalExpr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IntervalTypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public intervalTypeBase(): IntervalTypeBaseContext | null {
        return this.getRuleContext(0, IntervalTypeBaseContext);
    }
    public KW_YEAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_YEAR, 0);
    }
    public KW_YEAR_MONTH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_YEAR_MONTH, 0);
    }
    public KW_DAY_HOUR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DAY_HOUR, 0);
    }
    public KW_DAY_MINUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DAY_MINUTE, 0);
    }
    public KW_DAY_SECOND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DAY_SECOND, 0);
    }
    public KW_HOUR_MINUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HOUR_MINUTE, 0);
    }
    public KW_HOUR_SECOND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HOUR_SECOND, 0);
    }
    public KW_MINUTE_SECOND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MINUTE_SECOND, 0);
    }
    public KW_SECOND_MICROSECOND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SECOND_MICROSECOND, 0);
    }
    public KW_MINUTE_MICROSECOND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MINUTE_MICROSECOND, 0);
    }
    public KW_HOUR_MICROSECOND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HOUR_MICROSECOND, 0);
    }
    public KW_DAY_MICROSECOND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DAY_MICROSECOND, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_intervalType;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIntervalType) {
             listener.enterIntervalType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIntervalType) {
             listener.exitIntervalType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIntervalType) {
            return visitor.visitIntervalType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class EnableTypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ENABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENABLE, 0);
    }
    public KW_DISABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISABLE, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ON, 0);
    }
    public KW_SLAVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SLAVE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_enableType;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterEnableType) {
             listener.enterEnableType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitEnableType) {
             listener.exitEnableType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitEnableType) {
            return visitor.visitEnableType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IndexTypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_USING, 0)!;
    }
    public KW_BTREE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BTREE, 0);
    }
    public KW_HASH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HASH, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_indexType;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIndexType) {
             listener.enterIndexType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIndexType) {
             listener.exitIndexType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndexType) {
            return visitor.visitIndexType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IndexOptionContext extends antlr.ParserRuleContext {
    public _parserName?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_KEY_BLOCK_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY_BLOCK_SIZE, 0);
    }
    public fileSizeLiteral(): FileSizeLiteralContext | null {
        return this.getRuleContext(0, FileSizeLiteralContext);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public indexType(): IndexTypeContext | null {
        return this.getRuleContext(0, IndexTypeContext);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public KW_PARSER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARSER, 0);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_COMMENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMMENT, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_VISIBLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VISIBLE, 0);
    }
    public KW_INVISIBLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INVISIBLE, 0);
    }
    public KW_ENGINE_ATTRIBUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENGINE_ATTRIBUTE, 0);
    }
    public KW_SECONDARY_ENGINE_ATTRIBUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_indexOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIndexOption) {
             listener.enterIndexOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIndexOption) {
             listener.exitIndexOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndexOption) {
            return visitor.visitIndexOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ProcedureParameterContext extends antlr.ParserRuleContext {
    public _direction?: Token | null;
    public _paramName?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public dataType(): DataTypeContext {
        return this.getRuleContext(0, DataTypeContext)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IN, 0);
    }
    public KW_OUT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OUT, 0);
    }
    public KW_INOUT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INOUT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_procedureParameter;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterProcedureParameter) {
             listener.enterProcedureParameter(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitProcedureParameter) {
             listener.exitProcedureParameter(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitProcedureParameter) {
            return visitor.visitProcedureParameter(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RoutineOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_routineOption;
    }
    public override copyFrom(ctx: RoutineOptionContext): void {
        super.copyFrom(ctx);
    }
}
export class RoutineBehaviorContext extends RoutineOptionContext {
    public constructor(ctx: RoutineOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DETERMINISTIC(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DETERMINISTIC, 0)!;
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRoutineBehavior) {
             listener.enterRoutineBehavior(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRoutineBehavior) {
             listener.exitRoutineBehavior(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoutineBehavior) {
            return visitor.visitRoutineBehavior(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class RoutineLanguageContext extends RoutineOptionContext {
    public constructor(ctx: RoutineOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_LANGUAGE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LANGUAGE, 0)!;
    }
    public KW_SQL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SQL, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRoutineLanguage) {
             listener.enterRoutineLanguage(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRoutineLanguage) {
             listener.exitRoutineLanguage(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoutineLanguage) {
            return visitor.visitRoutineLanguage(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class RoutineCommentContext extends RoutineOptionContext {
    public constructor(ctx: RoutineOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_COMMENT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COMMENT, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRoutineComment) {
             listener.enterRoutineComment(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRoutineComment) {
             listener.exitRoutineComment(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoutineComment) {
            return visitor.visitRoutineComment(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class RoutineSecurityContext extends RoutineOptionContext {
    public _context?: Token | null;
    public constructor(ctx: RoutineOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SQL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SQL, 0)!;
    }
    public KW_SECURITY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SECURITY, 0)!;
    }
    public KW_DEFINER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFINER, 0);
    }
    public KW_INVOKER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INVOKER, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRoutineSecurity) {
             listener.enterRoutineSecurity(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRoutineSecurity) {
             listener.exitRoutineSecurity(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoutineSecurity) {
            return visitor.visitRoutineSecurity(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class RoutineDataContext extends RoutineOptionContext {
    public constructor(ctx: RoutineOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CONTAINS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONTAINS, 0);
    }
    public KW_SQL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL, 0);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NO, 0);
    }
    public KW_READS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_READS, 0);
    }
    public KW_DATA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATA, 0);
    }
    public KW_MODIFIES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MODIFIES, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRoutineData) {
             listener.enterRoutineData(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRoutineData) {
             listener.exitRoutineData(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoutineData) {
            return visitor.visitRoutineData(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ServerOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_HOST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HOST, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATABASE, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USER, 0);
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD, 0);
    }
    public KW_SOCKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOCKET, 0);
    }
    public KW_OWNER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OWNER, 0);
    }
    public KW_PORT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PORT, 0);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_serverOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterServerOption) {
             listener.enterServerOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitServerOption) {
             listener.exitServerOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitServerOption) {
            return visitor.visitServerOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateDefinitionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public createDefinition(): CreateDefinitionContext[];
    public createDefinition(i: number): CreateDefinitionContext | null;
    public createDefinition(i?: number): CreateDefinitionContext[] | CreateDefinitionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(CreateDefinitionContext);
        }

        return this.getRuleContext(i, CreateDefinitionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createDefinitions;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateDefinitions) {
             listener.enterCreateDefinitions(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateDefinitions) {
             listener.exitCreateDefinitions(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateDefinitions) {
            return visitor.visitCreateDefinitions(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateDefinitionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public columnNameCreate(): ColumnNameCreateContext | null {
        return this.getRuleContext(0, ColumnNameCreateContext);
    }
    public columnDefinition(): ColumnDefinitionContext | null {
        return this.getRuleContext(0, ColumnDefinitionContext);
    }
    public indexColumnNames(): IndexColumnNamesContext | null {
        return this.getRuleContext(0, IndexColumnNamesContext);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEX, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY, 0);
    }
    public indexName(): IndexNameContext | null {
        return this.getRuleContext(0, IndexNameContext);
    }
    public indexType(): IndexTypeContext | null {
        return this.getRuleContext(0, IndexTypeContext);
    }
    public indexOption(): IndexOptionContext[];
    public indexOption(i: number): IndexOptionContext | null;
    public indexOption(i?: number): IndexOptionContext[] | IndexOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IndexOptionContext);
        }

        return this.getRuleContext(i, IndexOptionContext);
    }
    public KW_FULLTEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FULLTEXT, 0);
    }
    public KW_SPATIAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SPATIAL, 0);
    }
    public KW_PRIMARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRIMARY, 0);
    }
    public constraintSymbol(): ConstraintSymbolContext | null {
        return this.getRuleContext(0, ConstraintSymbolContext);
    }
    public KW_UNIQUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNIQUE, 0);
    }
    public KW_FOREIGN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOREIGN, 0);
    }
    public referenceDefinition(): ReferenceDefinitionContext | null {
        return this.getRuleContext(0, ReferenceDefinitionContext);
    }
    public KW_CHECK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHECK, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public checkConstraintDefinition(): CheckConstraintDefinitionContext | null {
        return this.getRuleContext(0, CheckConstraintDefinitionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createDefinition;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateDefinition) {
             listener.enterCreateDefinition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateDefinition) {
             listener.exitCreateDefinition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateDefinition) {
            return visitor.visitCreateDefinition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CheckConstraintDefinitionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHECK(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CHECK, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public constraintSymbol(): ConstraintSymbolContext | null {
        return this.getRuleContext(0, ConstraintSymbolContext);
    }
    public KW_ENFORCED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENFORCED, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_checkConstraintDefinition;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCheckConstraintDefinition) {
             listener.enterCheckConstraintDefinition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCheckConstraintDefinition) {
             listener.exitCheckConstraintDefinition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCheckConstraintDefinition) {
            return visitor.visitCheckConstraintDefinition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConstraintSymbolContext extends antlr.ParserRuleContext {
    public _symbol_?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CONSTRAINT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CONSTRAINT, 0)!;
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_constraintSymbol;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterConstraintSymbol) {
             listener.enterConstraintSymbol(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitConstraintSymbol) {
             listener.exitConstraintSymbol(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstraintSymbol) {
            return visitor.visitConstraintSymbol(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ColumnDefinitionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public dataType(): DataTypeContext {
        return this.getRuleContext(0, DataTypeContext)!;
    }
    public columnConstraint(): ColumnConstraintContext[];
    public columnConstraint(i: number): ColumnConstraintContext | null;
    public columnConstraint(i?: number): ColumnConstraintContext[] | ColumnConstraintContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ColumnConstraintContext);
        }

        return this.getRuleContext(i, ColumnConstraintContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_columnDefinition;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterColumnDefinition) {
             listener.enterColumnDefinition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitColumnDefinition) {
             listener.exitColumnDefinition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumnDefinition) {
            return visitor.visitColumnDefinition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ColumnConstraintContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_columnConstraint;
    }
    public override copyFrom(ctx: ColumnConstraintContext): void {
        super.copyFrom(ctx);
    }
}
export class StorageColumnConstraintContext extends ColumnConstraintContext {
    public _storageval?: Token | null;
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_STORAGE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_STORAGE, 0)!;
    }
    public KW_DISK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISK, 0);
    }
    public KW_MEMORY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MEMORY, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterStorageColumnConstraint) {
             listener.enterStorageColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitStorageColumnConstraint) {
             listener.exitStorageColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitStorageColumnConstraint) {
            return visitor.visitStorageColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class VisibilityColumnConstraintContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_VISIBLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VISIBLE, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterVisibilityColumnConstraint) {
             listener.enterVisibilityColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitVisibilityColumnConstraint) {
             listener.exitVisibilityColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitVisibilityColumnConstraint) {
            return visitor.visitVisibilityColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AutoIncrementColumnConstraintContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_AUTO_INCREMENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUTO_INCREMENT, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ON, 0);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UPDATE, 0);
    }
    public currentTimestamp(): CurrentTimestampContext | null {
        return this.getRuleContext(0, CurrentTimestampContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAutoIncrementColumnConstraint) {
             listener.enterAutoIncrementColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAutoIncrementColumnConstraint) {
             listener.exitAutoIncrementColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAutoIncrementColumnConstraint) {
            return visitor.visitAutoIncrementColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class CommentColumnConstraintContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_COMMENT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COMMENT, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCommentColumnConstraint) {
             listener.enterCommentColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCommentColumnConstraint) {
             listener.exitCommentColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCommentColumnConstraint) {
            return visitor.visitCommentColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class CheckExprContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public checkConstraintDefinition(): CheckConstraintDefinitionContext {
        return this.getRuleContext(0, CheckConstraintDefinitionContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCheckExpr) {
             listener.enterCheckExpr(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCheckExpr) {
             listener.exitCheckExpr(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCheckExpr) {
            return visitor.visitCheckExpr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class UniqueKeyColumnConstraintContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_UNIQUE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UNIQUE, 0)!;
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUniqueKeyColumnConstraint) {
             listener.enterUniqueKeyColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUniqueKeyColumnConstraint) {
             listener.exitUniqueKeyColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUniqueKeyColumnConstraint) {
            return visitor.visitUniqueKeyColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SerialDefaultColumnConstraintContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SERIAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SERIAL, 0)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DEFAULT, 0)!;
    }
    public KW_VALUE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VALUE, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSerialDefaultColumnConstraint) {
             listener.enterSerialDefaultColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSerialDefaultColumnConstraint) {
             listener.exitSerialDefaultColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSerialDefaultColumnConstraint) {
            return visitor.visitSerialDefaultColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class GeneratedColumnConstraintContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AS, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_GENERATED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GENERATED, 0);
    }
    public KW_ALWAYS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALWAYS, 0);
    }
    public KW_VIRTUAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VIRTUAL, 0);
    }
    public KW_STORED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STORED, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterGeneratedColumnConstraint) {
             listener.enterGeneratedColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitGeneratedColumnConstraint) {
             listener.exitGeneratedColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitGeneratedColumnConstraint) {
            return visitor.visitGeneratedColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class FormatColumnConstraintContext extends ColumnConstraintContext {
    public _colformat?: Token | null;
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_COLUMN_FORMAT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COLUMN_FORMAT, 0)!;
    }
    public KW_FIXED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIXED, 0);
    }
    public KW_DYNAMIC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DYNAMIC, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFormatColumnConstraint) {
             listener.enterFormatColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFormatColumnConstraint) {
             listener.exitFormatColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFormatColumnConstraint) {
            return visitor.visitFormatColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class CollateColumnConstraintContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_COLLATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COLLATE, 0)!;
    }
    public collationName(): CollationNameContext {
        return this.getRuleContext(0, CollationNameContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCollateColumnConstraint) {
             listener.enterCollateColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCollateColumnConstraint) {
             listener.exitCollateColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCollateColumnConstraint) {
            return visitor.visitCollateColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PrimaryKeyColumnConstraintContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_KEY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_KEY, 0)!;
    }
    public KW_PRIMARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRIMARY, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPrimaryKeyColumnConstraint) {
             listener.enterPrimaryKeyColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPrimaryKeyColumnConstraint) {
             listener.exitPrimaryKeyColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPrimaryKeyColumnConstraint) {
            return visitor.visitPrimaryKeyColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class NullColumnConstraintContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public nullNotnull(): NullNotnullContext {
        return this.getRuleContext(0, NullNotnullContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterNullColumnConstraint) {
             listener.enterNullColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitNullColumnConstraint) {
             listener.exitNullColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitNullColumnConstraint) {
            return visitor.visitNullColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class DefaultColumnConstraintContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DEFAULT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DEFAULT, 0)!;
    }
    public defaultValue(): DefaultValueContext {
        return this.getRuleContext(0, DefaultValueContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDefaultColumnConstraint) {
             listener.enterDefaultColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDefaultColumnConstraint) {
             listener.exitDefaultColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefaultColumnConstraint) {
            return visitor.visitDefaultColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ReferenceColumnConstraintContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public referenceDefinition(): ReferenceDefinitionContext {
        return this.getRuleContext(0, ReferenceDefinitionContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterReferenceColumnConstraint) {
             listener.enterReferenceColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitReferenceColumnConstraint) {
             listener.exitReferenceColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitReferenceColumnConstraint) {
            return visitor.visitReferenceColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class InvisibilityColumnConstraintContext extends ColumnConstraintContext {
    public constructor(ctx: ColumnConstraintContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_INVISIBLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INVISIBLE, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterInvisibilityColumnConstraint) {
             listener.enterInvisibilityColumnConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitInvisibilityColumnConstraint) {
             listener.exitInvisibilityColumnConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitInvisibilityColumnConstraint) {
            return visitor.visitInvisibilityColumnConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReferenceDefinitionContext extends antlr.ParserRuleContext {
    public _matchType?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REFERENCES(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REFERENCES, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public indexColumnNames(): IndexColumnNamesContext | null {
        return this.getRuleContext(0, IndexColumnNamesContext);
    }
    public KW_MATCH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MATCH, 0);
    }
    public referenceAction(): ReferenceActionContext | null {
        return this.getRuleContext(0, ReferenceActionContext);
    }
    public KW_FULL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FULL, 0);
    }
    public KW_PARTIAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTIAL, 0);
    }
    public KW_SIMPLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SIMPLE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_referenceDefinition;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterReferenceDefinition) {
             listener.enterReferenceDefinition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitReferenceDefinition) {
             listener.exitReferenceDefinition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitReferenceDefinition) {
            return visitor.visitReferenceDefinition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReferenceActionContext extends antlr.ParserRuleContext {
    public _onDelete?: ReferenceControlTypeContext;
    public _onUpdate?: ReferenceControlTypeContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ON(): antlr.TerminalNode[];
    public KW_ON(i: number): antlr.TerminalNode | null;
    public KW_ON(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ON);
    	} else {
    		return this.getToken(MySqlParser.KW_ON, i);
    	}
    }
    public KW_DELETE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DELETE, 0);
    }
    public referenceControlType(): ReferenceControlTypeContext[];
    public referenceControlType(i: number): ReferenceControlTypeContext | null;
    public referenceControlType(i?: number): ReferenceControlTypeContext[] | ReferenceControlTypeContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ReferenceControlTypeContext);
        }

        return this.getRuleContext(i, ReferenceControlTypeContext);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UPDATE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_referenceAction;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterReferenceAction) {
             listener.enterReferenceAction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitReferenceAction) {
             listener.exitReferenceAction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitReferenceAction) {
            return visitor.visitReferenceAction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReferenceControlTypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RESTRICT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RESTRICT, 0);
    }
    public KW_CASCADE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CASCADE, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET, 0);
    }
    public KW_NULL_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NULL_LITERAL, 0);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NO, 0);
    }
    public KW_ACTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ACTION, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_referenceControlType;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterReferenceControlType) {
             listener.enterReferenceControlType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitReferenceControlType) {
             listener.exitReferenceControlType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitReferenceControlType) {
            return visitor.visitReferenceControlType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tableOption;
    }
    public override copyFrom(ctx: TableOptionContext): void {
        super.copyFrom(ctx);
    }
}
export class TableOptionEngineContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ENGINE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ENGINE, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public engineName(): EngineNameContext | null {
        return this.getRuleContext(0, EngineNameContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionEngine) {
             listener.enterTableOptionEngine(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionEngine) {
             listener.exitTableOptionEngine(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionEngine) {
            return visitor.visitTableOptionEngine(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionMaxRowsContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_MAX_ROWS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_MAX_ROWS, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionMaxRows) {
             listener.enterTableOptionMaxRows(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionMaxRows) {
             listener.exitTableOptionMaxRows(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionMaxRows) {
            return visitor.visitTableOptionMaxRows(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionCollateContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_COLLATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COLLATE, 0)!;
    }
    public collationName(): CollationNameContext {
        return this.getRuleContext(0, CollationNameContext)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionCollate) {
             listener.enterTableOptionCollate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionCollate) {
             listener.exitTableOptionCollate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionCollate) {
            return visitor.visitTableOptionCollate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionPersistentContext extends TableOptionContext {
    public _extBoolValue?: Token | null;
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_STATS_PERSISTENT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_STATS_PERSISTENT, 0)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public ZERO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ZERO_DECIMAL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionPersistent) {
             listener.enterTableOptionPersistent(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionPersistent) {
             listener.exitTableOptionPersistent(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionPersistent) {
            return visitor.visitTableOptionPersistent(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionTablespaceContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_TABLESPACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLESPACE, 0);
    }
    public tablespaceName(): TablespaceNameContext | null {
        return this.getRuleContext(0, TablespaceNameContext);
    }
    public tablespaceStorage(): TablespaceStorageContext | null {
        return this.getRuleContext(0, TablespaceStorageContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionTablespace) {
             listener.enterTableOptionTablespace(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionTablespace) {
             listener.exitTableOptionTablespace(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionTablespace) {
            return visitor.visitTableOptionTablespace(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionAutoextendSizeContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_AUTOEXTEND_SIZE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AUTOEXTEND_SIZE, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionAutoextendSize) {
             listener.enterTableOptionAutoextendSize(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionAutoextendSize) {
             listener.exitTableOptionAutoextendSize(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionAutoextendSize) {
            return visitor.visitTableOptionAutoextendSize(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionPageCompressedContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_PAGE_COMPRESSED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PAGE_COMPRESSED, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public ZERO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ZERO_DECIMAL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionPageCompressed) {
             listener.enterTableOptionPageCompressed(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionPageCompressed) {
             listener.exitTableOptionPageCompressed(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionPageCompressed) {
            return visitor.visitTableOptionPageCompressed(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionStartTransactionContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_START(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_START, 0)!;
    }
    public KW_TRANSACTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TRANSACTION, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionStartTransaction) {
             listener.enterTableOptionStartTransaction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionStartTransaction) {
             listener.exitTableOptionStartTransaction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionStartTransaction) {
            return visitor.visitTableOptionStartTransaction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionPackKeysContext extends TableOptionContext {
    public _extBoolValue?: Token | null;
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_PACK_KEYS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PACK_KEYS, 0)!;
    }
    public ZERO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ZERO_DECIMAL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionPackKeys) {
             listener.enterTableOptionPackKeys(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionPackKeys) {
             listener.exitTableOptionPackKeys(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionPackKeys) {
            return visitor.visitTableOptionPackKeys(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionPasswordContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_PASSWORD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PASSWORD, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionPassword) {
             listener.enterTableOptionPassword(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionPassword) {
             listener.exitTableOptionPassword(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionPassword) {
            return visitor.visitTableOptionPassword(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionUnionContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_UNION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UNION, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public tableNames(): TableNamesContext {
        return this.getRuleContext(0, TableNamesContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionUnion) {
             listener.enterTableOptionUnion(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionUnion) {
             listener.exitTableOptionUnion(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionUnion) {
            return visitor.visitTableOptionUnion(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionSamplePageContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_STATS_SAMPLE_PAGES(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_STATS_SAMPLE_PAGES, 0)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionSamplePage) {
             listener.enterTableOptionSamplePage(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionSamplePage) {
             listener.exitTableOptionSamplePage(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionSamplePage) {
            return visitor.visitTableOptionSamplePage(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionCharsetContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public charSet(): CharSetContext {
        return this.getRuleContext(0, CharSetContext)!;
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode[];
    public KW_DEFAULT(i: number): antlr.TerminalNode | null;
    public KW_DEFAULT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_DEFAULT);
    	} else {
    		return this.getToken(MySqlParser.KW_DEFAULT, i);
    	}
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionCharset) {
             listener.enterTableOptionCharset(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionCharset) {
             listener.exitTableOptionCharset(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionCharset) {
            return visitor.visitTableOptionCharset(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionIndexDirectoryContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_INDEX(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INDEX, 0)!;
    }
    public KW_DIRECTORY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DIRECTORY, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionIndexDirectory) {
             listener.enterTableOptionIndexDirectory(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionIndexDirectory) {
             listener.exitTableOptionIndexDirectory(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionIndexDirectory) {
            return visitor.visitTableOptionIndexDirectory(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionTableTypeContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_TABLE_TYPE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE_TYPE, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public tableType(): TableTypeContext {
        return this.getRuleContext(0, TableTypeContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionTableType) {
             listener.enterTableOptionTableType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionTableType) {
             listener.exitTableOptionTableType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionTableType) {
            return visitor.visitTableOptionTableType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionKeyBlockSizeContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_KEY_BLOCK_SIZE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_KEY_BLOCK_SIZE, 0)!;
    }
    public fileSizeLiteral(): FileSizeLiteralContext {
        return this.getRuleContext(0, FileSizeLiteralContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionKeyBlockSize) {
             listener.enterTableOptionKeyBlockSize(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionKeyBlockSize) {
             listener.exitTableOptionKeyBlockSize(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionKeyBlockSize) {
            return visitor.visitTableOptionKeyBlockSize(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionEncryptionContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ENCRYPTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ENCRYPTION, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionEncryption) {
             listener.enterTableOptionEncryption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionEncryption) {
             listener.exitTableOptionEncryption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionEncryption) {
            return visitor.visitTableOptionEncryption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionDataDirectoryContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DIRECTORY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DIRECTORY, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public KW_DATA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATA, 0);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEX, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionDataDirectory) {
             listener.enterTableOptionDataDirectory(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionDataDirectory) {
             listener.exitTableOptionDataDirectory(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionDataDirectory) {
            return visitor.visitTableOptionDataDirectory(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionRecalculationContext extends TableOptionContext {
    public _extBoolValue?: Token | null;
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_STATS_AUTO_RECALC(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_STATS_AUTO_RECALC, 0)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public ZERO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ZERO_DECIMAL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionRecalculation) {
             listener.enterTableOptionRecalculation(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionRecalculation) {
             listener.exitTableOptionRecalculation(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionRecalculation) {
            return visitor.visitTableOptionRecalculation(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionAutoIncrementContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_AUTO_INCREMENT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AUTO_INCREMENT, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionAutoIncrement) {
             listener.enterTableOptionAutoIncrement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionAutoIncrement) {
             listener.exitTableOptionAutoIncrement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionAutoIncrement) {
            return visitor.visitTableOptionAutoIncrement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionEncryptionKeyIdContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ENCRYPTION_KEY_ID(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ENCRYPTION_KEY_ID, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionEncryptionKeyId) {
             listener.enterTableOptionEncryptionKeyId(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionEncryptionKeyId) {
             listener.exitTableOptionEncryptionKeyId(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionEncryptionKeyId) {
            return visitor.visitTableOptionEncryptionKeyId(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionChecksumContext extends TableOptionContext {
    public _boolValue?: Token | null;
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CHECKSUM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHECKSUM, 0);
    }
    public KW_PAGE_CHECKSUM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PAGE_CHECKSUM, 0);
    }
    public ZERO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ZERO_DECIMAL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionChecksum) {
             listener.enterTableOptionChecksum(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionChecksum) {
             listener.exitTableOptionChecksum(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionChecksum) {
            return visitor.visitTableOptionChecksum(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionDelayContext extends TableOptionContext {
    public _boolValue?: Token | null;
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DELAY_KEY_WRITE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DELAY_KEY_WRITE, 0)!;
    }
    public ZERO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ZERO_DECIMAL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionDelay) {
             listener.enterTableOptionDelay(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionDelay) {
             listener.exitTableOptionDelay(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionDelay) {
            return visitor.visitTableOptionDelay(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionConnectionContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CONNECTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CONNECTION, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionConnection) {
             listener.enterTableOptionConnection(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionConnection) {
             listener.exitTableOptionConnection(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionConnection) {
            return visitor.visitTableOptionConnection(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionTransactionalContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_TRANSACTIONAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TRANSACTIONAL, 0)!;
    }
    public ZERO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ZERO_DECIMAL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionTransactional) {
             listener.enterTableOptionTransactional(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionTransactional) {
             listener.exitTableOptionTransactional(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionTransactional) {
            return visitor.visitTableOptionTransactional(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionPageCompressionLevelContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public KW_PAGE_COMPRESSION_LEVEL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PAGE_COMPRESSION_LEVEL, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionPageCompressionLevel) {
             listener.enterTableOptionPageCompressionLevel(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionPageCompressionLevel) {
             listener.exitTableOptionPageCompressionLevel(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionPageCompressionLevel) {
            return visitor.visitTableOptionPageCompressionLevel(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionSecondaryEngineAttributeContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SECONDARY_ENGINE_ATTRIBUTE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionSecondaryEngineAttribute) {
             listener.enterTableOptionSecondaryEngineAttribute(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionSecondaryEngineAttribute) {
             listener.exitTableOptionSecondaryEngineAttribute(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionSecondaryEngineAttribute) {
            return visitor.visitTableOptionSecondaryEngineAttribute(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionCommentContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_COMMENT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COMMENT, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionComment) {
             listener.enterTableOptionComment(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionComment) {
             listener.exitTableOptionComment(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionComment) {
            return visitor.visitTableOptionComment(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionAverageContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_AVG_ROW_LENGTH(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AVG_ROW_LENGTH, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionAverage) {
             listener.enterTableOptionAverage(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionAverage) {
             listener.exitTableOptionAverage(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionAverage) {
            return visitor.visitTableOptionAverage(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionRowFormatContext extends TableOptionContext {
    public _rowFormat?: Token | null;
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ROW_FORMAT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ROW_FORMAT, 0)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public KW_DYNAMIC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DYNAMIC, 0);
    }
    public KW_FIXED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIXED, 0);
    }
    public KW_COMPRESSED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMPRESSED, 0);
    }
    public KW_REDUNDANT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REDUNDANT, 0);
    }
    public KW_COMPACT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMPACT, 0);
    }
    public ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ID, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionRowFormat) {
             listener.enterTableOptionRowFormat(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionRowFormat) {
             listener.exitTableOptionRowFormat(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionRowFormat) {
            return visitor.visitTableOptionRowFormat(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionCompressionContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_COMPRESSION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COMPRESSION, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ID, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionCompression) {
             listener.enterTableOptionCompression(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionCompression) {
             listener.exitTableOptionCompression(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionCompression) {
            return visitor.visitTableOptionCompression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionInsertMethodContext extends TableOptionContext {
    public _insertMethod?: Token | null;
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_INSERT_METHOD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INSERT_METHOD, 0)!;
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NO, 0);
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIRST, 0);
    }
    public KW_LAST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LAST, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionInsertMethod) {
             listener.enterTableOptionInsertMethod(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionInsertMethod) {
             listener.exitTableOptionInsertMethod(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionInsertMethod) {
            return visitor.visitTableOptionInsertMethod(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionEngineAttributeContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ENGINE_ATTRIBUTE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ENGINE_ATTRIBUTE, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionEngineAttribute) {
             listener.enterTableOptionEngineAttribute(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionEngineAttribute) {
             listener.exitTableOptionEngineAttribute(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionEngineAttribute) {
            return visitor.visitTableOptionEngineAttribute(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableOptionMinRowsContext extends TableOptionContext {
    public constructor(ctx: TableOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_MIN_ROWS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_MIN_ROWS, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableOptionMinRows) {
             listener.enterTableOptionMinRows(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableOptionMinRows) {
             listener.exitTableOptionMinRows(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableOptionMinRows) {
            return visitor.visitTableOptionMinRows(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableTypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_MYSQL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MYSQL, 0);
    }
    public KW_ODBC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ODBC, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tableType;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableType) {
             listener.enterTableType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableType) {
             listener.exitTableType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableType) {
            return visitor.visitTableType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TablespaceStorageContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_STORAGE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_STORAGE, 0)!;
    }
    public KW_DISK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISK, 0);
    }
    public KW_MEMORY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MEMORY, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tablespaceStorage;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTablespaceStorage) {
             listener.enterTablespaceStorage(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTablespaceStorage) {
             listener.exitTablespaceStorage(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablespaceStorage) {
            return visitor.visitTablespaceStorage(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PartitionDefinitionsContext extends antlr.ParserRuleContext {
    public _count?: DecimalLiteralContext;
    public _subCount?: DecimalLiteralContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public KW_BY(): antlr.TerminalNode[];
    public KW_BY(i: number): antlr.TerminalNode | null;
    public KW_BY(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_BY);
    	} else {
    		return this.getToken(MySqlParser.KW_BY, i);
    	}
    }
    public partitionFunctionDefinition(): PartitionFunctionDefinitionContext {
        return this.getRuleContext(0, PartitionFunctionDefinitionContext)!;
    }
    public KW_PARTITIONS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTITIONS, 0);
    }
    public KW_SUBPARTITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBPARTITION, 0);
    }
    public subpartitionFunctionDefinition(): SubpartitionFunctionDefinitionContext | null {
        return this.getRuleContext(0, SubpartitionFunctionDefinitionContext);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public partitionDefinition(): PartitionDefinitionContext[];
    public partitionDefinition(i: number): PartitionDefinitionContext | null;
    public partitionDefinition(i?: number): PartitionDefinitionContext[] | PartitionDefinitionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionDefinitionContext);
        }

        return this.getRuleContext(i, PartitionDefinitionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public decimalLiteral(): DecimalLiteralContext[];
    public decimalLiteral(i: number): DecimalLiteralContext | null;
    public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DecimalLiteralContext);
        }

        return this.getRuleContext(i, DecimalLiteralContext);
    }
    public KW_SUBPARTITIONS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBPARTITIONS, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_partitionDefinitions;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionDefinitions) {
             listener.enterPartitionDefinitions(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionDefinitions) {
             listener.exitPartitionDefinitions(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionDefinitions) {
            return visitor.visitPartitionDefinitions(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PartitionFunctionDefinitionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_partitionFunctionDefinition;
    }
    public override copyFrom(ctx: PartitionFunctionDefinitionContext): void {
        super.copyFrom(ctx);
    }
}
export class PartitionFunctionKeyContext extends PartitionFunctionDefinitionContext {
    public _algType?: Token | null;
    public constructor(ctx: PartitionFunctionDefinitionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_KEY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_KEY, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_LINEAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LINEAR, 0);
    }
    public KW_ALGORITHM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALGORITHM, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public columnNames(): ColumnNamesContext | null {
        return this.getRuleContext(0, ColumnNamesContext);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public TWO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.TWO_DECIMAL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionFunctionKey) {
             listener.enterPartitionFunctionKey(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionFunctionKey) {
             listener.exitPartitionFunctionKey(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionFunctionKey) {
            return visitor.visitPartitionFunctionKey(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionFunctionHashContext extends PartitionFunctionDefinitionContext {
    public constructor(ctx: PartitionFunctionDefinitionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_HASH(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_HASH, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_LINEAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LINEAR, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionFunctionHash) {
             listener.enterPartitionFunctionHash(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionFunctionHash) {
             listener.exitPartitionFunctionHash(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionFunctionHash) {
            return visitor.visitPartitionFunctionHash(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionFunctionListContext extends PartitionFunctionDefinitionContext {
    public constructor(ctx: PartitionFunctionDefinitionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_LIST(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LIST, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public KW_COLUMNS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMNS, 0);
    }
    public columnNames(): ColumnNamesContext | null {
        return this.getRuleContext(0, ColumnNamesContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionFunctionList) {
             listener.enterPartitionFunctionList(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionFunctionList) {
             listener.exitPartitionFunctionList(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionFunctionList) {
            return visitor.visitPartitionFunctionList(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionFunctionRangeContext extends PartitionFunctionDefinitionContext {
    public constructor(ctx: PartitionFunctionDefinitionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_RANGE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RANGE, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public KW_COLUMNS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMNS, 0);
    }
    public columnNames(): ColumnNamesContext | null {
        return this.getRuleContext(0, ColumnNamesContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionFunctionRange) {
             listener.enterPartitionFunctionRange(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionFunctionRange) {
             listener.exitPartitionFunctionRange(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionFunctionRange) {
            return visitor.visitPartitionFunctionRange(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SubpartitionFunctionDefinitionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_subpartitionFunctionDefinition;
    }
    public override copyFrom(ctx: SubpartitionFunctionDefinitionContext): void {
        super.copyFrom(ctx);
    }
}
export class SubPartitionFunctionHashContext extends SubpartitionFunctionDefinitionContext {
    public constructor(ctx: SubpartitionFunctionDefinitionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_HASH(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_HASH, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_LINEAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LINEAR, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSubPartitionFunctionHash) {
             listener.enterSubPartitionFunctionHash(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSubPartitionFunctionHash) {
             listener.exitSubPartitionFunctionHash(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSubPartitionFunctionHash) {
            return visitor.visitSubPartitionFunctionHash(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SubPartitionFunctionKeyContext extends SubpartitionFunctionDefinitionContext {
    public _algType?: Token | null;
    public constructor(ctx: SubpartitionFunctionDefinitionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_KEY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_KEY, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public columnNames(): ColumnNamesContext {
        return this.getRuleContext(0, ColumnNamesContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_LINEAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LINEAR, 0);
    }
    public KW_ALGORITHM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALGORITHM, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public TWO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.TWO_DECIMAL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSubPartitionFunctionKey) {
             listener.enterSubPartitionFunctionKey(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSubPartitionFunctionKey) {
             listener.exitSubPartitionFunctionKey(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSubPartitionFunctionKey) {
            return visitor.visitSubPartitionFunctionKey(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PartitionDefinitionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_partitionDefinition;
    }
    public override copyFrom(ctx: PartitionDefinitionContext): void {
        super.copyFrom(ctx);
    }
}
export class PartitionComparisonContext extends PartitionDefinitionContext {
    public constructor(ctx: PartitionDefinitionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionName(): PartitionNameContext {
        return this.getRuleContext(0, PartitionNameContext)!;
    }
    public KW_VALUES(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VALUES, 0)!;
    }
    public KW_LESS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LESS, 0)!;
    }
    public KW_THAN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_THAN, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode[];
    public LR_BRACKET(i: number): antlr.TerminalNode | null;
    public LR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.LR_BRACKET, i);
    	}
    }
    public partitionDefinerAtom(): PartitionDefinerAtomContext[];
    public partitionDefinerAtom(i: number): PartitionDefinerAtomContext | null;
    public partitionDefinerAtom(i?: number): PartitionDefinerAtomContext[] | PartitionDefinerAtomContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionDefinerAtomContext);
        }

        return this.getRuleContext(i, PartitionDefinerAtomContext);
    }
    public RR_BRACKET(): antlr.TerminalNode[];
    public RR_BRACKET(i: number): antlr.TerminalNode | null;
    public RR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.RR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.RR_BRACKET, i);
    	}
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public partitionOption(): PartitionOptionContext[];
    public partitionOption(i: number): PartitionOptionContext | null;
    public partitionOption(i?: number): PartitionOptionContext[] | PartitionOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionOptionContext);
        }

        return this.getRuleContext(i, PartitionOptionContext);
    }
    public subpartitionDefinition(): SubpartitionDefinitionContext[];
    public subpartitionDefinition(i: number): SubpartitionDefinitionContext | null;
    public subpartitionDefinition(i?: number): SubpartitionDefinitionContext[] | SubpartitionDefinitionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SubpartitionDefinitionContext);
        }

        return this.getRuleContext(i, SubpartitionDefinitionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionComparison) {
             listener.enterPartitionComparison(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionComparison) {
             listener.exitPartitionComparison(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionComparison) {
            return visitor.visitPartitionComparison(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionListAtomContext extends PartitionDefinitionContext {
    public constructor(ctx: PartitionDefinitionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionName(): PartitionNameContext {
        return this.getRuleContext(0, PartitionNameContext)!;
    }
    public KW_VALUES(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VALUES, 0)!;
    }
    public KW_IN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IN, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode[];
    public LR_BRACKET(i: number): antlr.TerminalNode | null;
    public LR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.LR_BRACKET, i);
    	}
    }
    public partitionDefinerAtom(): PartitionDefinerAtomContext[];
    public partitionDefinerAtom(i: number): PartitionDefinerAtomContext | null;
    public partitionDefinerAtom(i?: number): PartitionDefinerAtomContext[] | PartitionDefinerAtomContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionDefinerAtomContext);
        }

        return this.getRuleContext(i, PartitionDefinerAtomContext);
    }
    public RR_BRACKET(): antlr.TerminalNode[];
    public RR_BRACKET(i: number): antlr.TerminalNode | null;
    public RR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.RR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.RR_BRACKET, i);
    	}
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public partitionOption(): PartitionOptionContext[];
    public partitionOption(i: number): PartitionOptionContext | null;
    public partitionOption(i?: number): PartitionOptionContext[] | PartitionOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionOptionContext);
        }

        return this.getRuleContext(i, PartitionOptionContext);
    }
    public subpartitionDefinition(): SubpartitionDefinitionContext[];
    public subpartitionDefinition(i: number): SubpartitionDefinitionContext | null;
    public subpartitionDefinition(i?: number): SubpartitionDefinitionContext[] | SubpartitionDefinitionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SubpartitionDefinitionContext);
        }

        return this.getRuleContext(i, SubpartitionDefinitionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionListAtom) {
             listener.enterPartitionListAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionListAtom) {
             listener.exitPartitionListAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionListAtom) {
            return visitor.visitPartitionListAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionListVectorContext extends PartitionDefinitionContext {
    public constructor(ctx: PartitionDefinitionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionName(): PartitionNameContext {
        return this.getRuleContext(0, PartitionNameContext)!;
    }
    public KW_VALUES(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VALUES, 0)!;
    }
    public KW_IN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IN, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode[];
    public LR_BRACKET(i: number): antlr.TerminalNode | null;
    public LR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.LR_BRACKET, i);
    	}
    }
    public partitionDefinerVector(): PartitionDefinerVectorContext[];
    public partitionDefinerVector(i: number): PartitionDefinerVectorContext | null;
    public partitionDefinerVector(i?: number): PartitionDefinerVectorContext[] | PartitionDefinerVectorContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionDefinerVectorContext);
        }

        return this.getRuleContext(i, PartitionDefinerVectorContext);
    }
    public RR_BRACKET(): antlr.TerminalNode[];
    public RR_BRACKET(i: number): antlr.TerminalNode | null;
    public RR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.RR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.RR_BRACKET, i);
    	}
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public partitionOption(): PartitionOptionContext[];
    public partitionOption(i: number): PartitionOptionContext | null;
    public partitionOption(i?: number): PartitionOptionContext[] | PartitionOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionOptionContext);
        }

        return this.getRuleContext(i, PartitionOptionContext);
    }
    public subpartitionDefinition(): SubpartitionDefinitionContext[];
    public subpartitionDefinition(i: number): SubpartitionDefinitionContext | null;
    public subpartitionDefinition(i?: number): SubpartitionDefinitionContext[] | SubpartitionDefinitionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SubpartitionDefinitionContext);
        }

        return this.getRuleContext(i, SubpartitionDefinitionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionListVector) {
             listener.enterPartitionListVector(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionListVector) {
             listener.exitPartitionListVector(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionListVector) {
            return visitor.visitPartitionListVector(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionSimpleContext extends PartitionDefinitionContext {
    public constructor(ctx: PartitionDefinitionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionName(): PartitionNameContext {
        return this.getRuleContext(0, PartitionNameContext)!;
    }
    public partitionOption(): PartitionOptionContext[];
    public partitionOption(i: number): PartitionOptionContext | null;
    public partitionOption(i?: number): PartitionOptionContext[] | PartitionOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionOptionContext);
        }

        return this.getRuleContext(i, PartitionOptionContext);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public subpartitionDefinition(): SubpartitionDefinitionContext[];
    public subpartitionDefinition(i: number): SubpartitionDefinitionContext | null;
    public subpartitionDefinition(i?: number): SubpartitionDefinitionContext[] | SubpartitionDefinitionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SubpartitionDefinitionContext);
        }

        return this.getRuleContext(i, SubpartitionDefinitionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionSimple) {
             listener.enterPartitionSimple(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionSimple) {
             listener.exitPartitionSimple(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionSimple) {
            return visitor.visitPartitionSimple(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PartitionDefinerAtomContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public constant(): ConstantContext | null {
        return this.getRuleContext(0, ConstantContext);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public KW_MAXVALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAXVALUE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_partitionDefinerAtom;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionDefinerAtom) {
             listener.enterPartitionDefinerAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionDefinerAtom) {
             listener.exitPartitionDefinerAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionDefinerAtom) {
            return visitor.visitPartitionDefinerAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PartitionDefinerVectorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public partitionDefinerAtom(): PartitionDefinerAtomContext[];
    public partitionDefinerAtom(i: number): PartitionDefinerAtomContext | null;
    public partitionDefinerAtom(i?: number): PartitionDefinerAtomContext[] | PartitionDefinerAtomContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionDefinerAtomContext);
        }

        return this.getRuleContext(i, PartitionDefinerAtomContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_partitionDefinerVector;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionDefinerVector) {
             listener.enterPartitionDefinerVector(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionDefinerVector) {
             listener.exitPartitionDefinerVector(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionDefinerVector) {
            return visitor.visitPartitionDefinerVector(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SubpartitionDefinitionContext extends antlr.ParserRuleContext {
    public _logicalName?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SUBPARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SUBPARTITION, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public partitionOption(): PartitionOptionContext[];
    public partitionOption(i: number): PartitionOptionContext | null;
    public partitionOption(i?: number): PartitionOptionContext[] | PartitionOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionOptionContext);
        }

        return this.getRuleContext(i, PartitionOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_subpartitionDefinition;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSubpartitionDefinition) {
             listener.enterSubpartitionDefinition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSubpartitionDefinition) {
             listener.exitSubpartitionDefinition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSubpartitionDefinition) {
            return visitor.visitSubpartitionDefinition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PartitionOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_partitionOption;
    }
    public override copyFrom(ctx: PartitionOptionContext): void {
        super.copyFrom(ctx);
    }
}
export class PartitionOptionCommentContext extends PartitionOptionContext {
    public _comment?: Token | null;
    public constructor(ctx: PartitionOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_COMMENT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COMMENT, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionOptionComment) {
             listener.enterPartitionOptionComment(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionOptionComment) {
             listener.exitPartitionOptionComment(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionOptionComment) {
            return visitor.visitPartitionOptionComment(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionOptionNodeGroupContext extends PartitionOptionContext {
    public _nodegroup?: UidContext;
    public constructor(ctx: PartitionOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_NODEGROUP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_NODEGROUP, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionOptionNodeGroup) {
             listener.enterPartitionOptionNodeGroup(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionOptionNodeGroup) {
             listener.exitPartitionOptionNodeGroup(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionOptionNodeGroup) {
            return visitor.visitPartitionOptionNodeGroup(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionOptionIndexDirectoryContext extends PartitionOptionContext {
    public _indexDirectory?: Token | null;
    public constructor(ctx: PartitionOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_INDEX(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INDEX, 0)!;
    }
    public KW_DIRECTORY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DIRECTORY, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionOptionIndexDirectory) {
             listener.enterPartitionOptionIndexDirectory(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionOptionIndexDirectory) {
             listener.exitPartitionOptionIndexDirectory(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionOptionIndexDirectory) {
            return visitor.visitPartitionOptionIndexDirectory(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionOptionMaxRowsContext extends PartitionOptionContext {
    public _maxRows?: DecimalLiteralContext;
    public constructor(ctx: PartitionOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_MAX_ROWS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_MAX_ROWS, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionOptionMaxRows) {
             listener.enterPartitionOptionMaxRows(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionOptionMaxRows) {
             listener.exitPartitionOptionMaxRows(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionOptionMaxRows) {
            return visitor.visitPartitionOptionMaxRows(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionOptionTablespaceContext extends PartitionOptionContext {
    public constructor(ctx: PartitionOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_TABLESPACE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLESPACE, 0)!;
    }
    public tablespaceName(): TablespaceNameContext {
        return this.getRuleContext(0, TablespaceNameContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionOptionTablespace) {
             listener.enterPartitionOptionTablespace(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionOptionTablespace) {
             listener.exitPartitionOptionTablespace(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionOptionTablespace) {
            return visitor.visitPartitionOptionTablespace(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionOptionEngineContext extends PartitionOptionContext {
    public constructor(ctx: PartitionOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ENGINE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ENGINE, 0)!;
    }
    public engineName(): EngineNameContext {
        return this.getRuleContext(0, EngineNameContext)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public KW_STORAGE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STORAGE, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionOptionEngine) {
             listener.enterPartitionOptionEngine(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionOptionEngine) {
             listener.exitPartitionOptionEngine(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionOptionEngine) {
            return visitor.visitPartitionOptionEngine(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionOptionMinRowsContext extends PartitionOptionContext {
    public _minRows?: DecimalLiteralContext;
    public constructor(ctx: PartitionOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_MIN_ROWS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_MIN_ROWS, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionOptionMinRows) {
             listener.enterPartitionOptionMinRows(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionOptionMinRows) {
             listener.exitPartitionOptionMinRows(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionOptionMinRows) {
            return visitor.visitPartitionOptionMinRows(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PartitionOptionDataDirectoryContext extends PartitionOptionContext {
    public _dataDirectory?: Token | null;
    public constructor(ctx: PartitionOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DATA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DATA, 0)!;
    }
    public KW_DIRECTORY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DIRECTORY, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionOptionDataDirectory) {
             listener.enterPartitionOptionDataDirectory(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionOptionDataDirectory) {
             listener.exitPartitionOptionDataDirectory(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionOptionDataDirectory) {
            return visitor.visitPartitionOptionDataDirectory(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterDatabaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterDatabase;
    }
    public override copyFrom(ctx: AlterDatabaseContext): void {
        super.copyFrom(ctx);
    }
}
export class AlterUpgradeNameContext extends AlterDatabaseContext {
    public _dbFormat?: Token | null;
    public constructor(ctx: AlterDatabaseContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public databaseName(): DatabaseNameContext {
        return this.getRuleContext(0, DatabaseNameContext)!;
    }
    public KW_UPGRADE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UPGRADE, 0)!;
    }
    public KW_DATA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DATA, 0)!;
    }
    public KW_DIRECTORY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DIRECTORY, 0)!;
    }
    public KW_NAME(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_NAME, 0)!;
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATABASE, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEMA, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterUpgradeName) {
             listener.enterAlterUpgradeName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterUpgradeName) {
             listener.exitAlterUpgradeName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterUpgradeName) {
            return visitor.visitAlterUpgradeName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterSimpleDatabaseContext extends AlterDatabaseContext {
    public _dbFormat?: Token | null;
    public constructor(ctx: AlterDatabaseContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATABASE, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEMA, 0);
    }
    public databaseName(): DatabaseNameContext | null {
        return this.getRuleContext(0, DatabaseNameContext);
    }
    public createDatabaseOption(): CreateDatabaseOptionContext[];
    public createDatabaseOption(i: number): CreateDatabaseOptionContext | null;
    public createDatabaseOption(i?: number): CreateDatabaseOptionContext[] | CreateDatabaseOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(CreateDatabaseOptionContext);
        }

        return this.getRuleContext(i, CreateDatabaseOptionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterSimpleDatabase) {
             listener.enterAlterSimpleDatabase(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterSimpleDatabase) {
             listener.exitAlterSimpleDatabase(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterSimpleDatabase) {
            return visitor.visitAlterSimpleDatabase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterEventContext extends antlr.ParserRuleContext {
    public _event_name?: FullIdContext;
    public _new_event_name?: FullIdContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_EVENT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EVENT, 0)!;
    }
    public fullId(): FullIdContext[];
    public fullId(i: number): FullIdContext | null;
    public fullId(i?: number): FullIdContext[] | FullIdContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FullIdContext);
        }

        return this.getRuleContext(i, FullIdContext);
    }
    public ownerStatement(): OwnerStatementContext | null {
        return this.getRuleContext(0, OwnerStatementContext);
    }
    public KW_ON(): antlr.TerminalNode[];
    public KW_ON(i: number): antlr.TerminalNode | null;
    public KW_ON(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ON);
    	} else {
    		return this.getToken(MySqlParser.KW_ON, i);
    	}
    }
    public KW_SCHEDULE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEDULE, 0);
    }
    public scheduleExpression(): ScheduleExpressionContext | null {
        return this.getRuleContext(0, ScheduleExpressionContext);
    }
    public KW_COMPLETION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMPLETION, 0);
    }
    public KW_PRESERVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRESERVE, 0);
    }
    public KW_RENAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RENAME, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TO, 0);
    }
    public enableType(): EnableTypeContext | null {
        return this.getRuleContext(0, EnableTypeContext);
    }
    public KW_COMMENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMMENT, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_DO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DO, 0);
    }
    public routineBody(): RoutineBodyContext | null {
        return this.getRuleContext(0, RoutineBodyContext);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterEvent;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterEvent) {
             listener.enterAlterEvent(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterEvent) {
             listener.exitAlterEvent(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterEvent) {
            return visitor.visitAlterEvent(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterFunctionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_FUNCTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FUNCTION, 0)!;
    }
    public functionName(): FunctionNameContext {
        return this.getRuleContext(0, FunctionNameContext)!;
    }
    public routineOption(): RoutineOptionContext[];
    public routineOption(i: number): RoutineOptionContext | null;
    public routineOption(i?: number): RoutineOptionContext[] | RoutineOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(RoutineOptionContext);
        }

        return this.getRuleContext(i, RoutineOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterFunction;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterFunction) {
             listener.enterAlterFunction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterFunction) {
             listener.exitAlterFunction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterFunction) {
            return visitor.visitAlterFunction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterInstanceContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_INSTANCE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INSTANCE, 0)!;
    }
    public KW_ROTATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ROTATE, 0)!;
    }
    public KW_INNODB(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INNODB, 0)!;
    }
    public KW_MASTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_MASTER, 0)!;
    }
    public KW_KEY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_KEY, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterInstance;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterInstance) {
             listener.enterAlterInstance(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterInstance) {
             listener.exitAlterInstance(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterInstance) {
            return visitor.visitAlterInstance(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterLogfileGroupContext extends antlr.ParserRuleContext {
    public _logfileGroupName?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_LOGFILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LOGFILE, 0)!;
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GROUP, 0)!;
    }
    public KW_ADD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ADD, 0)!;
    }
    public KW_UNDOFILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UNDOFILE, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public KW_ENGINE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ENGINE, 0)!;
    }
    public engineName(): EngineNameContext {
        return this.getRuleContext(0, EngineNameContext)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public KW_INITIAL_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INITIAL_SIZE, 0);
    }
    public fileSizeLiteral(): FileSizeLiteralContext | null {
        return this.getRuleContext(0, FileSizeLiteralContext);
    }
    public KW_WAIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WAIT, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterLogfileGroup;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterLogfileGroup) {
             listener.enterAlterLogfileGroup(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterLogfileGroup) {
             listener.exitAlterLogfileGroup(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterLogfileGroup) {
            return visitor.visitAlterLogfileGroup(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterProcedureContext extends antlr.ParserRuleContext {
    public _proc_name?: FullIdContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_PROCEDURE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PROCEDURE, 0)!;
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public routineOption(): RoutineOptionContext[];
    public routineOption(i: number): RoutineOptionContext | null;
    public routineOption(i?: number): RoutineOptionContext[] | RoutineOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(RoutineOptionContext);
        }

        return this.getRuleContext(i, RoutineOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterProcedure;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterProcedure) {
             listener.enterAlterProcedure(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterProcedure) {
             listener.exitAlterProcedure(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterProcedure) {
            return visitor.visitAlterProcedure(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterServerContext extends antlr.ParserRuleContext {
    public _serverName?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_SERVER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SERVER, 0)!;
    }
    public KW_OPTIONS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_OPTIONS, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public serverOption(): ServerOptionContext[];
    public serverOption(i: number): ServerOptionContext | null;
    public serverOption(i?: number): ServerOptionContext[] | ServerOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ServerOptionContext);
        }

        return this.getRuleContext(i, ServerOptionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterServer;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterServer) {
             listener.enterAlterServer(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterServer) {
             listener.exitAlterServer(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterServer) {
            return visitor.visitAlterServer(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterTableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public alterOption(): AlterOptionContext[];
    public alterOption(i: number): AlterOptionContext | null;
    public alterOption(i?: number): AlterOptionContext[] | AlterOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(AlterOptionContext);
        }

        return this.getRuleContext(i, AlterOptionContext);
    }
    public alterPartitionSpecification(): AlterPartitionSpecificationContext[];
    public alterPartitionSpecification(i: number): AlterPartitionSpecificationContext | null;
    public alterPartitionSpecification(i?: number): AlterPartitionSpecificationContext[] | AlterPartitionSpecificationContext | null {
        if (i === undefined) {
            return this.getRuleContexts(AlterPartitionSpecificationContext);
        }

        return this.getRuleContext(i, AlterPartitionSpecificationContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterTable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterTable) {
             listener.enterAlterTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterTable) {
             listener.exitAlterTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterTable) {
            return visitor.visitAlterTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterTablespaceContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_TABLESPACE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLESPACE, 0)!;
    }
    public tablespaceName(): TablespaceNameContext {
        return this.getRuleContext(0, TablespaceNameContext)!;
    }
    public KW_DATAFILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DATAFILE, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode[];
    public STRING_LITERAL(i: number): antlr.TerminalNode | null;
    public STRING_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STRING_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.STRING_LITERAL, i);
    	}
    }
    public KW_ADD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ADD, 0);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DROP, 0);
    }
    public KW_UNDO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNDO, 0);
    }
    public KW_INITIAL_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INITIAL_SIZE, 0);
    }
    public fileSizeLiteral(): FileSizeLiteralContext[];
    public fileSizeLiteral(i: number): FileSizeLiteralContext | null;
    public fileSizeLiteral(i?: number): FileSizeLiteralContext[] | FileSizeLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FileSizeLiteralContext);
        }

        return this.getRuleContext(i, FileSizeLiteralContext);
    }
    public KW_WAIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WAIT, 0);
    }
    public KW_RENAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RENAME, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TO, 0);
    }
    public tablespaceNameCreate(): TablespaceNameCreateContext | null {
        return this.getRuleContext(0, TablespaceNameCreateContext);
    }
    public KW_AUTOEXTEND_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUTOEXTEND_SIZE, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET, 0);
    }
    public KW_ENCRYPTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENCRYPTION, 0);
    }
    public KW_ENGINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENGINE, 0);
    }
    public engineName(): EngineNameContext | null {
        return this.getRuleContext(0, EngineNameContext);
    }
    public KW_ENGINE_ATTRIBUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENGINE_ATTRIBUTE, 0);
    }
    public KW_ACTIVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ACTIVE, 0);
    }
    public KW_INACTIVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INACTIVE, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterTablespace;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterTablespace) {
             listener.enterAlterTablespace(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterTablespace) {
             listener.exitAlterTablespace(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterTablespace) {
            return visitor.visitAlterTablespace(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterViewContext extends antlr.ParserRuleContext {
    public _algType?: Token | null;
    public _secContext?: Token | null;
    public _checkOpt?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_VIEW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VIEW, 0)!;
    }
    public viewName(): ViewNameContext {
        return this.getRuleContext(0, ViewNameContext)!;
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AS, 0)!;
    }
    public selectStatement(): SelectStatementContext {
        return this.getRuleContext(0, SelectStatementContext)!;
    }
    public KW_ALGORITHM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALGORITHM, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public ownerStatement(): OwnerStatementContext | null {
        return this.getRuleContext(0, OwnerStatementContext);
    }
    public KW_SQL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL, 0);
    }
    public KW_SECURITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SECURITY, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public columnNames(): ColumnNamesContext | null {
        return this.getRuleContext(0, ColumnNamesContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public KW_CHECK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHECK, 0);
    }
    public KW_OPTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OPTION, 0);
    }
    public KW_UNDEFINED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNDEFINED, 0);
    }
    public KW_MERGE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MERGE, 0);
    }
    public KW_TEMPTABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TEMPTABLE, 0);
    }
    public KW_DEFINER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFINER, 0);
    }
    public KW_INVOKER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INVOKER, 0);
    }
    public KW_CASCADED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CASCADED, 0);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCAL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterView;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterView) {
             listener.enterAlterView(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterView) {
             listener.exitAlterView(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterView) {
            return visitor.visitAlterView(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterOption;
    }
    public override copyFrom(ctx: AlterOptionContext): void {
        super.copyFrom(ctx);
    }
}
export class AlterByAlterColumnDefaultContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public columnName(): ColumnNameContext {
        return this.getRuleContext(0, ColumnNameContext)!;
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public defaultValue(): DefaultValueContext | null {
        return this.getRuleContext(0, DefaultValueContext);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DROP, 0);
    }
    public KW_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMN, 0);
    }
    public KW_VISIBLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VISIBLE, 0);
    }
    public KW_INVISIBLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INVISIBLE, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAlterColumnDefault) {
             listener.enterAlterByAlterColumnDefault(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAlterColumnDefault) {
             listener.exitAlterByAlterColumnDefault(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAlterColumnDefault) {
            return visitor.visitAlterByAlterColumnDefault(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByDefaultCharsetContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CHARACTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CHARACTER, 0)!;
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public charsetName(): CharsetNameContext {
        return this.getRuleContext(0, CharsetNameContext)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public KW_COLLATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLLATE, 0);
    }
    public collationName(): CollationNameContext | null {
        return this.getRuleContext(0, CollationNameContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByDefaultCharset) {
             listener.enterAlterByDefaultCharset(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByDefaultCharset) {
             listener.exitAlterByDefaultCharset(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByDefaultCharset) {
            return visitor.visitAlterByDefaultCharset(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByConvertCharsetContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CONVERT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CONVERT, 0)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TO, 0)!;
    }
    public charsetName(): CharsetNameContext {
        return this.getRuleContext(0, CharsetNameContext)!;
    }
    public KW_CHARSET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARSET, 0);
    }
    public KW_CHARACTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARACTER, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET, 0);
    }
    public KW_COLLATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLLATE, 0);
    }
    public collationName(): CollationNameContext | null {
        return this.getRuleContext(0, CollationNameContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByConvertCharset) {
             listener.enterAlterByConvertCharset(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByConvertCharset) {
             listener.exitAlterByConvertCharset(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByConvertCharset) {
            return visitor.visitAlterByConvertCharset(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByRenameColumnContext extends AlterOptionContext {
    public _olcdColumn?: ColumnNameContext;
    public _newColumn?: ColumnNameCreateContext;
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_RENAME(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RENAME, 0)!;
    }
    public KW_COLUMN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COLUMN, 0)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TO, 0)!;
    }
    public columnName(): ColumnNameContext {
        return this.getRuleContext(0, ColumnNameContext)!;
    }
    public columnNameCreate(): ColumnNameCreateContext {
        return this.getRuleContext(0, ColumnNameCreateContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByRenameColumn) {
             listener.enterAlterByRenameColumn(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByRenameColumn) {
             listener.exitAlterByRenameColumn(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByRenameColumn) {
            return visitor.visitAlterByRenameColumn(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByAddForeignKeyContext extends AlterOptionContext {
    public _symbol_?: UidContext;
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ADD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ADD, 0)!;
    }
    public KW_FOREIGN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FOREIGN, 0)!;
    }
    public KW_KEY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_KEY, 0)!;
    }
    public indexColumnNames(): IndexColumnNamesContext {
        return this.getRuleContext(0, IndexColumnNamesContext)!;
    }
    public referenceDefinition(): ReferenceDefinitionContext {
        return this.getRuleContext(0, ReferenceDefinitionContext)!;
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT, 0);
    }
    public indexName(): IndexNameContext | null {
        return this.getRuleContext(0, IndexNameContext);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAddForeignKey) {
             listener.enterAlterByAddForeignKey(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAddForeignKey) {
             listener.exitAlterByAddForeignKey(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAddForeignKey) {
            return visitor.visitAlterByAddForeignKey(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByRenameIndexContext extends AlterOptionContext {
    public _indexFormat?: Token | null;
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_RENAME(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RENAME, 0)!;
    }
    public indexName(): IndexNameContext {
        return this.getRuleContext(0, IndexNameContext)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TO, 0)!;
    }
    public indexNameCreate(): IndexNameCreateContext {
        return this.getRuleContext(0, IndexNameCreateContext)!;
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEX, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByRenameIndex) {
             listener.enterAlterByRenameIndex(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByRenameIndex) {
             listener.exitAlterByRenameIndex(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByRenameIndex) {
            return visitor.visitAlterByRenameIndex(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterTablespaceOptionContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_TABLESPACE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLESPACE, 0)!;
    }
    public KW_DISCARD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISCARD, 0);
    }
    public KW_IMPORT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IMPORT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterTablespaceOption) {
             listener.enterAlterTablespaceOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterTablespaceOption) {
             listener.exitAlterTablespaceOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterTablespaceOption) {
            return visitor.visitAlterTablespaceOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByRenameContext extends AlterOptionContext {
    public _renameFormat?: Token | null;
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_RENAME(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RENAME, 0)!;
    }
    public tableNameCreate(): TableNameCreateContext {
        return this.getRuleContext(0, TableNameCreateContext)!;
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TO, 0);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByRename) {
             listener.enterAlterByRename(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByRename) {
             listener.exitAlterByRename(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByRename) {
            return visitor.visitAlterByRename(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByDropConstraintCheckContext extends AlterOptionContext {
    public _symbol_?: UidContext;
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_CHECK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHECK, 0);
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT, 0);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByDropConstraintCheck) {
             listener.enterAlterByDropConstraintCheck(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByDropConstraintCheck) {
             listener.exitAlterByDropConstraintCheck(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByDropConstraintCheck) {
            return visitor.visitAlterByDropConstraintCheck(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByAlterCheckTableConstraintContext extends AlterOptionContext {
    public _symbol_?: UidContext;
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_CHECK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHECK, 0);
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT, 0);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public KW_ENFORCED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENFORCED, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAlterCheckTableConstraint) {
             listener.enterAlterByAlterCheckTableConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAlterCheckTableConstraint) {
             listener.exitAlterByAlterCheckTableConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAlterCheckTableConstraint) {
            return visitor.visitAlterByAlterCheckTableConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByAddColumnsContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ADD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ADD, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public columnName(): ColumnNameContext[];
    public columnName(i: number): ColumnNameContext | null;
    public columnName(i?: number): ColumnNameContext[] | ColumnNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ColumnNameContext);
        }

        return this.getRuleContext(i, ColumnNameContext);
    }
    public columnDefinition(): ColumnDefinitionContext[];
    public columnDefinition(i: number): ColumnDefinitionContext | null;
    public columnDefinition(i?: number): ColumnDefinitionContext[] | ColumnDefinitionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ColumnDefinitionContext);
        }

        return this.getRuleContext(i, ColumnDefinitionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMN, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAddColumns) {
             listener.enterAlterByAddColumns(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAddColumns) {
             listener.exitAlterByAddColumns(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAddColumns) {
            return visitor.visitAlterByAddColumns(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByAlterIndexVisibilityContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_INDEX(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INDEX, 0)!;
    }
    public indexName(): IndexNameContext {
        return this.getRuleContext(0, IndexNameContext)!;
    }
    public KW_VISIBLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VISIBLE, 0);
    }
    public KW_INVISIBLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INVISIBLE, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAlterIndexVisibility) {
             listener.enterAlterByAlterIndexVisibility(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAlterIndexVisibility) {
             listener.exitAlterByAlterIndexVisibility(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAlterIndexVisibility) {
            return visitor.visitAlterByAlterIndexVisibility(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByDropForeignKeyContext extends AlterOptionContext {
    public _fk_symbol?: UidContext;
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_FOREIGN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FOREIGN, 0)!;
    }
    public KW_KEY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_KEY, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByDropForeignKey) {
             listener.enterAlterByDropForeignKey(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByDropForeignKey) {
             listener.exitAlterByDropForeignKey(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByDropForeignKey) {
            return visitor.visitAlterByDropForeignKey(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByAddCheckTableConstraintContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ADD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ADD, 0)!;
    }
    public checkConstraintDefinition(): CheckConstraintDefinitionContext | null {
        return this.getRuleContext(0, CheckConstraintDefinitionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAddCheckTableConstraint) {
             listener.enterAlterByAddCheckTableConstraint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAddCheckTableConstraint) {
             listener.exitAlterByAddCheckTableConstraint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAddCheckTableConstraint) {
            return visitor.visitAlterByAddCheckTableConstraint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterPartitionContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public alterPartitionSpecification(): AlterPartitionSpecificationContext {
        return this.getRuleContext(0, AlterPartitionSpecificationContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterPartition) {
             listener.enterAlterPartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterPartition) {
             listener.exitAlterPartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterPartition) {
            return visitor.visitAlterPartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByAddIndexContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ADD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ADD, 0)!;
    }
    public indexColumnNames(): IndexColumnNamesContext {
        return this.getRuleContext(0, IndexColumnNamesContext)!;
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEX, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY, 0);
    }
    public indexName(): IndexNameContext | null {
        return this.getRuleContext(0, IndexNameContext);
    }
    public indexType(): IndexTypeContext | null {
        return this.getRuleContext(0, IndexTypeContext);
    }
    public indexOption(): IndexOptionContext[];
    public indexOption(i: number): IndexOptionContext | null;
    public indexOption(i?: number): IndexOptionContext[] | IndexOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IndexOptionContext);
        }

        return this.getRuleContext(i, IndexOptionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAddIndex) {
             listener.enterAlterByAddIndex(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAddIndex) {
             listener.exitAlterByAddIndex(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAddIndex) {
            return visitor.visitAlterByAddIndex(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByDropColumnContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public columnName(): ColumnNameContext {
        return this.getRuleContext(0, ColumnNameContext)!;
    }
    public KW_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMN, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByDropColumn) {
             listener.enterAlterByDropColumn(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByDropColumn) {
             listener.exitAlterByDropColumn(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByDropColumn) {
            return visitor.visitAlterByDropColumn(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByForceContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_FORCE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FORCE, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByForce) {
             listener.enterAlterByForce(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByForce) {
             listener.exitAlterByForce(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByForce) {
            return visitor.visitAlterByForce(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByAddSpecialIndexContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ADD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ADD, 0)!;
    }
    public indexColumnNames(): IndexColumnNamesContext {
        return this.getRuleContext(0, IndexColumnNamesContext)!;
    }
    public KW_FULLTEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FULLTEXT, 0);
    }
    public KW_SPATIAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SPATIAL, 0);
    }
    public indexName(): IndexNameContext | null {
        return this.getRuleContext(0, IndexNameContext);
    }
    public indexOption(): IndexOptionContext[];
    public indexOption(i: number): IndexOptionContext | null;
    public indexOption(i?: number): IndexOptionContext[] | IndexOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IndexOptionContext);
        }

        return this.getRuleContext(i, IndexOptionContext);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEX, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAddSpecialIndex) {
             listener.enterAlterByAddSpecialIndex(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAddSpecialIndex) {
             listener.exitAlterByAddSpecialIndex(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAddSpecialIndex) {
            return visitor.visitAlterByAddSpecialIndex(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByModifyColumnContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_MODIFY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_MODIFY, 0)!;
    }
    public columnName(): ColumnNameContext[];
    public columnName(i: number): ColumnNameContext | null;
    public columnName(i?: number): ColumnNameContext[] | ColumnNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ColumnNameContext);
        }

        return this.getRuleContext(i, ColumnNameContext);
    }
    public columnDefinition(): ColumnDefinitionContext {
        return this.getRuleContext(0, ColumnDefinitionContext)!;
    }
    public KW_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMN, 0);
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIRST, 0);
    }
    public KW_AFTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AFTER, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByModifyColumn) {
             listener.enterAlterByModifyColumn(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByModifyColumn) {
             listener.exitAlterByModifyColumn(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByModifyColumn) {
            return visitor.visitAlterByModifyColumn(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByTableOptionContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public tableOption(): TableOptionContext[];
    public tableOption(i: number): TableOptionContext | null;
    public tableOption(i?: number): TableOptionContext[] | TableOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TableOptionContext);
        }

        return this.getRuleContext(i, TableOptionContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByTableOption) {
             listener.enterAlterByTableOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByTableOption) {
             listener.exitAlterByTableOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByTableOption) {
            return visitor.visitAlterByTableOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByDropPrimaryKeyContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_PRIMARY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PRIMARY, 0)!;
    }
    public KW_KEY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_KEY, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByDropPrimaryKey) {
             listener.enterAlterByDropPrimaryKey(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByDropPrimaryKey) {
             listener.exitAlterByDropPrimaryKey(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByDropPrimaryKey) {
            return visitor.visitAlterByDropPrimaryKey(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByLockContext extends AlterOptionContext {
    public _lockType?: Token | null;
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_LOCK(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LOCK, 0)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public KW_NONE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NONE, 0);
    }
    public KW_SHARED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SHARED, 0);
    }
    public KW_EXCLUSIVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXCLUSIVE, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByLock) {
             listener.enterAlterByLock(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByLock) {
             listener.exitAlterByLock(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByLock) {
            return visitor.visitAlterByLock(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterKeysContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_KEYS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_KEYS, 0)!;
    }
    public KW_DISABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISABLE, 0);
    }
    public KW_ENABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENABLE, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterKeys) {
             listener.enterAlterKeys(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterKeys) {
             listener.exitAlterKeys(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterKeys) {
            return visitor.visitAlterKeys(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByValidateContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_VALIDATION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VALIDATION, 0)!;
    }
    public KW_WITHOUT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITHOUT, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByValidate) {
             listener.enterAlterByValidate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByValidate) {
             listener.exitAlterByValidate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByValidate) {
            return visitor.visitAlterByValidate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByAddPrimaryKeyContext extends AlterOptionContext {
    public _symbol_?: UidContext;
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ADD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ADD, 0)!;
    }
    public KW_PRIMARY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PRIMARY, 0)!;
    }
    public KW_KEY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_KEY, 0)!;
    }
    public indexColumnNames(): IndexColumnNamesContext {
        return this.getRuleContext(0, IndexColumnNamesContext)!;
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT, 0);
    }
    public indexType(): IndexTypeContext | null {
        return this.getRuleContext(0, IndexTypeContext);
    }
    public indexOption(): IndexOptionContext[];
    public indexOption(i: number): IndexOptionContext | null;
    public indexOption(i?: number): IndexOptionContext[] | IndexOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IndexOptionContext);
        }

        return this.getRuleContext(i, IndexOptionContext);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAddPrimaryKey) {
             listener.enterAlterByAddPrimaryKey(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAddPrimaryKey) {
             listener.exitAlterByAddPrimaryKey(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAddPrimaryKey) {
            return visitor.visitAlterByAddPrimaryKey(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterBySetAlgorithmContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ALGORITHM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALGORITHM, 0)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public KW_INSTANT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INSTANT, 0);
    }
    public KW_INPLACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INPLACE, 0);
    }
    public KW_COPY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COPY, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterBySetAlgorithm) {
             listener.enterAlterBySetAlgorithm(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterBySetAlgorithm) {
             listener.exitAlterBySetAlgorithm(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterBySetAlgorithm) {
            return visitor.visitAlterBySetAlgorithm(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByChangeColumnContext extends AlterOptionContext {
    public _oldColumn?: ColumnNameContext;
    public _newColumn?: ColumnNameCreateContext;
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CHANGE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CHANGE, 0)!;
    }
    public columnDefinition(): ColumnDefinitionContext {
        return this.getRuleContext(0, ColumnDefinitionContext)!;
    }
    public columnName(): ColumnNameContext[];
    public columnName(i: number): ColumnNameContext | null;
    public columnName(i?: number): ColumnNameContext[] | ColumnNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ColumnNameContext);
        }

        return this.getRuleContext(i, ColumnNameContext);
    }
    public columnNameCreate(): ColumnNameCreateContext {
        return this.getRuleContext(0, ColumnNameCreateContext)!;
    }
    public KW_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMN, 0);
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIRST, 0);
    }
    public KW_AFTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AFTER, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByChangeColumn) {
             listener.enterAlterByChangeColumn(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByChangeColumn) {
             listener.exitAlterByChangeColumn(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByChangeColumn) {
            return visitor.visitAlterByChangeColumn(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByAddUniqueKeyContext extends AlterOptionContext {
    public _symbol_?: UidContext;
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ADD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ADD, 0)!;
    }
    public KW_UNIQUE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UNIQUE, 0)!;
    }
    public indexColumnNames(): IndexColumnNamesContext {
        return this.getRuleContext(0, IndexColumnNamesContext)!;
    }
    public KW_CONSTRAINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT, 0);
    }
    public indexName(): IndexNameContext | null {
        return this.getRuleContext(0, IndexNameContext);
    }
    public indexType(): IndexTypeContext | null {
        return this.getRuleContext(0, IndexTypeContext);
    }
    public indexOption(): IndexOptionContext[];
    public indexOption(i: number): IndexOptionContext | null;
    public indexOption(i?: number): IndexOptionContext[] | IndexOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IndexOptionContext);
        }

        return this.getRuleContext(i, IndexOptionContext);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEX, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY, 0);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAddUniqueKey) {
             listener.enterAlterByAddUniqueKey(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAddUniqueKey) {
             listener.exitAlterByAddUniqueKey(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAddUniqueKey) {
            return visitor.visitAlterByAddUniqueKey(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByDropIndexContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public indexName(): IndexNameContext {
        return this.getRuleContext(0, IndexNameContext)!;
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEX, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByDropIndex) {
             listener.enterAlterByDropIndex(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByDropIndex) {
             listener.exitAlterByDropIndex(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByDropIndex) {
            return visitor.visitAlterByDropIndex(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByAddColumnContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ADD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ADD, 0)!;
    }
    public columnName(): ColumnNameContext[];
    public columnName(i: number): ColumnNameContext | null;
    public columnName(i?: number): ColumnNameContext[] | ColumnNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ColumnNameContext);
        }

        return this.getRuleContext(i, ColumnNameContext);
    }
    public columnDefinition(): ColumnDefinitionContext {
        return this.getRuleContext(0, ColumnDefinitionContext)!;
    }
    public KW_COLUMN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMN, 0);
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIRST, 0);
    }
    public KW_AFTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AFTER, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAddColumn) {
             listener.enterAlterByAddColumn(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAddColumn) {
             listener.exitAlterByAddColumn(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAddColumn) {
            return visitor.visitAlterByAddColumn(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByOrderContext extends AlterOptionContext {
    public constructor(ctx: AlterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ORDER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ORDER, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BY, 0)!;
    }
    public columnNames(): ColumnNamesContext {
        return this.getRuleContext(0, ColumnNamesContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByOrder) {
             listener.enterAlterByOrder(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByOrder) {
             listener.exitAlterByOrder(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByOrder) {
            return visitor.visitAlterByOrder(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterPartitionSpecificationContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterPartitionSpecification;
    }
    public override copyFrom(ctx: AlterPartitionSpecificationContext): void {
        super.copyFrom(ctx);
    }
}
export class AlterByImportPartitionContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_IMPORT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IMPORT, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public KW_TABLESPACE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLESPACE, 0)!;
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByImportPartition) {
             listener.enterAlterByImportPartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByImportPartition) {
             listener.exitAlterByImportPartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByImportPartition) {
            return visitor.visitAlterByImportPartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByDropPartitionContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionNames(): PartitionNamesContext {
        return this.getRuleContext(0, PartitionNamesContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByDropPartition) {
             listener.enterAlterByDropPartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByDropPartition) {
             listener.exitAlterByDropPartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByDropPartition) {
            return visitor.visitAlterByDropPartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByDiscardPartitionContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DISCARD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DISCARD, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public KW_TABLESPACE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLESPACE, 0)!;
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByDiscardPartition) {
             listener.enterAlterByDiscardPartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByDiscardPartition) {
             listener.exitAlterByDiscardPartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByDiscardPartition) {
            return visitor.visitAlterByDiscardPartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByAddPartitionContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ADD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ADD, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public partitionDefinition(): PartitionDefinitionContext[];
    public partitionDefinition(i: number): PartitionDefinitionContext | null;
    public partitionDefinition(i?: number): PartitionDefinitionContext[] | PartitionDefinitionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionDefinitionContext);
        }

        return this.getRuleContext(i, PartitionDefinitionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAddPartition) {
             listener.enterAlterByAddPartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAddPartition) {
             listener.exitAlterByAddPartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAddPartition) {
            return visitor.visitAlterByAddPartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByRemovePartitioningContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REMOVE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REMOVE, 0)!;
    }
    public KW_PARTITIONING(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITIONING, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByRemovePartitioning) {
             listener.enterAlterByRemovePartitioning(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByRemovePartitioning) {
             listener.exitAlterByRemovePartitioning(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByRemovePartitioning) {
            return visitor.visitAlterByRemovePartitioning(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByOptimizePartitionContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_OPTIMIZE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_OPTIMIZE, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByOptimizePartition) {
             listener.enterAlterByOptimizePartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByOptimizePartition) {
             listener.exitAlterByOptimizePartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByOptimizePartition) {
            return visitor.visitAlterByOptimizePartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByCheckPartitionContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CHECK(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CHECK, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByCheckPartition) {
             listener.enterAlterByCheckPartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByCheckPartition) {
             listener.exitAlterByCheckPartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByCheckPartition) {
            return visitor.visitAlterByCheckPartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByCoalescePartitionContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_COALESCE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COALESCE, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByCoalescePartition) {
             listener.enterAlterByCoalescePartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByCoalescePartition) {
             listener.exitAlterByCoalescePartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByCoalescePartition) {
            return visitor.visitAlterByCoalescePartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByReorganizePartitionContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REORGANIZE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REORGANIZE, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionNames(): PartitionNamesContext {
        return this.getRuleContext(0, PartitionNamesContext)!;
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INTO, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public partitionDefinition(): PartitionDefinitionContext[];
    public partitionDefinition(i: number): PartitionDefinitionContext | null;
    public partitionDefinition(i?: number): PartitionDefinitionContext[] | PartitionDefinitionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionDefinitionContext);
        }

        return this.getRuleContext(i, PartitionDefinitionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByReorganizePartition) {
             listener.enterAlterByReorganizePartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByReorganizePartition) {
             listener.exitAlterByReorganizePartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByReorganizePartition) {
            return visitor.visitAlterByReorganizePartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByAnalyzePartitionContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ANALYZE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ANALYZE, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByAnalyzePartition) {
             listener.enterAlterByAnalyzePartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByAnalyzePartition) {
             listener.exitAlterByAnalyzePartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByAnalyzePartition) {
            return visitor.visitAlterByAnalyzePartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByRebuildPartitionContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REBUILD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REBUILD, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByRebuildPartition) {
             listener.enterAlterByRebuildPartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByRebuildPartition) {
             listener.exitAlterByRebuildPartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByRebuildPartition) {
            return visitor.visitAlterByRebuildPartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByUpgradePartitioningContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_UPGRADE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UPGRADE, 0)!;
    }
    public KW_PARTITIONING(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITIONING, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByUpgradePartitioning) {
             listener.enterAlterByUpgradePartitioning(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByUpgradePartitioning) {
             listener.exitAlterByUpgradePartitioning(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByUpgradePartitioning) {
            return visitor.visitAlterByUpgradePartitioning(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByTruncatePartitionContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_TRUNCATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TRUNCATE, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByTruncatePartition) {
             listener.enterAlterByTruncatePartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByTruncatePartition) {
             listener.exitAlterByTruncatePartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByTruncatePartition) {
            return visitor.visitAlterByTruncatePartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByRepairPartitionContext extends AlterPartitionSpecificationContext {
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REPAIR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPAIR, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByRepairPartition) {
             listener.enterAlterByRepairPartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByRepairPartition) {
             listener.exitAlterByRepairPartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByRepairPartition) {
            return visitor.visitAlterByRepairPartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AlterByExchangePartitionContext extends AlterPartitionSpecificationContext {
    public _validationFormat?: Token | null;
    public constructor(ctx: AlterPartitionSpecificationContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_EXCHANGE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EXCHANGE, 0)!;
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public partitionName(): PartitionNameContext {
        return this.getRuleContext(0, PartitionNameContext)!;
    }
    public KW_WITH(): antlr.TerminalNode[];
    public KW_WITH(i: number): antlr.TerminalNode | null;
    public KW_WITH(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_WITH);
    	} else {
    		return this.getToken(MySqlParser.KW_WITH, i);
    	}
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_VALIDATION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VALIDATION, 0);
    }
    public KW_WITHOUT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITHOUT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterByExchangePartition) {
             listener.enterAlterByExchangePartition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterByExchangePartition) {
             listener.exitAlterByExchangePartition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterByExchangePartition) {
            return visitor.visitAlterByExchangePartition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropDatabaseContext extends antlr.ParserRuleContext {
    public _dbFormat?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public databaseName(): DatabaseNameContext {
        return this.getRuleContext(0, DatabaseNameContext)!;
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATABASE, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEMA, 0);
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropDatabase;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropDatabase) {
             listener.enterDropDatabase(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropDatabase) {
             listener.exitDropDatabase(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropDatabase) {
            return visitor.visitDropDatabase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropEventContext extends antlr.ParserRuleContext {
    public _event_name?: FullIdContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_EVENT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EVENT, 0)!;
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropEvent;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropEvent) {
             listener.enterDropEvent(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropEvent) {
             listener.exitDropEvent(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropEvent) {
            return visitor.visitDropEvent(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropIndexContext extends antlr.ParserRuleContext {
    public _intimeAction?: Token | null;
    public _algType?: Token | null;
    public _lockType?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_INDEX(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INDEX, 0)!;
    }
    public indexName(): IndexNameContext {
        return this.getRuleContext(0, IndexNameContext)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ON, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_ALGORITHM(): antlr.TerminalNode[];
    public KW_ALGORITHM(i: number): antlr.TerminalNode | null;
    public KW_ALGORITHM(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ALGORITHM);
    	} else {
    		return this.getToken(MySqlParser.KW_ALGORITHM, i);
    	}
    }
    public KW_LOCK(): antlr.TerminalNode[];
    public KW_LOCK(i: number): antlr.TerminalNode | null;
    public KW_LOCK(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_LOCK);
    	} else {
    		return this.getToken(MySqlParser.KW_LOCK, i);
    	}
    }
    public KW_ONLINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ONLINE, 0);
    }
    public KW_OFFLINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OFFLINE, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode[];
    public KW_DEFAULT(i: number): antlr.TerminalNode | null;
    public KW_DEFAULT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_DEFAULT);
    	} else {
    		return this.getToken(MySqlParser.KW_DEFAULT, i);
    	}
    }
    public KW_INPLACE(): antlr.TerminalNode[];
    public KW_INPLACE(i: number): antlr.TerminalNode | null;
    public KW_INPLACE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_INPLACE);
    	} else {
    		return this.getToken(MySqlParser.KW_INPLACE, i);
    	}
    }
    public KW_COPY(): antlr.TerminalNode[];
    public KW_COPY(i: number): antlr.TerminalNode | null;
    public KW_COPY(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_COPY);
    	} else {
    		return this.getToken(MySqlParser.KW_COPY, i);
    	}
    }
    public KW_NONE(): antlr.TerminalNode[];
    public KW_NONE(i: number): antlr.TerminalNode | null;
    public KW_NONE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_NONE);
    	} else {
    		return this.getToken(MySqlParser.KW_NONE, i);
    	}
    }
    public KW_SHARED(): antlr.TerminalNode[];
    public KW_SHARED(i: number): antlr.TerminalNode | null;
    public KW_SHARED(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_SHARED);
    	} else {
    		return this.getToken(MySqlParser.KW_SHARED, i);
    	}
    }
    public KW_EXCLUSIVE(): antlr.TerminalNode[];
    public KW_EXCLUSIVE(i: number): antlr.TerminalNode | null;
    public KW_EXCLUSIVE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_EXCLUSIVE);
    	} else {
    		return this.getToken(MySqlParser.KW_EXCLUSIVE, i);
    	}
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropIndex;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropIndex) {
             listener.enterDropIndex(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropIndex) {
             listener.exitDropIndex(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropIndex) {
            return visitor.visitDropIndex(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropLogfileGroupContext extends antlr.ParserRuleContext {
    public _logfileGroupName?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_LOGFILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LOGFILE, 0)!;
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GROUP, 0)!;
    }
    public KW_ENGINE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ENGINE, 0)!;
    }
    public engineName(): EngineNameContext {
        return this.getRuleContext(0, EngineNameContext)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropLogfileGroup;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropLogfileGroup) {
             listener.enterDropLogfileGroup(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropLogfileGroup) {
             listener.exitDropLogfileGroup(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropLogfileGroup) {
            return visitor.visitDropLogfileGroup(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropProcedureContext extends antlr.ParserRuleContext {
    public _sp_name?: FullIdContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_PROCEDURE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PROCEDURE, 0)!;
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropProcedure;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropProcedure) {
             listener.enterDropProcedure(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropProcedure) {
             listener.exitDropProcedure(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropProcedure) {
            return visitor.visitDropProcedure(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropFunctionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_FUNCTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FUNCTION, 0)!;
    }
    public functionName(): FunctionNameContext {
        return this.getRuleContext(0, FunctionNameContext)!;
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropFunction;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropFunction) {
             listener.enterDropFunction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropFunction) {
             listener.exitDropFunction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropFunction) {
            return visitor.visitDropFunction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropServerContext extends antlr.ParserRuleContext {
    public _serverName?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_SERVER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SERVER, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropServer;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropServer) {
             listener.enterDropServer(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropServer) {
             listener.exitDropServer(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropServer) {
            return visitor.visitDropServer(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropSpatialContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_SPATIAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SPATIAL, 0)!;
    }
    public KW_REFERENCE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REFERENCE, 0)!;
    }
    public KW_SYSTEM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SYSTEM, 0)!;
    }
    public DECIMAL_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.DECIMAL_LITERAL, 0)!;
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropSpatial;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropSpatial) {
             listener.enterDropSpatial(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropSpatial) {
             listener.exitDropSpatial(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropSpatial) {
            return visitor.visitDropSpatial(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropTableContext extends antlr.ParserRuleContext {
    public _dropType?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableNames(): TableNamesContext {
        return this.getRuleContext(0, TableNamesContext)!;
    }
    public KW_TEMPORARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TEMPORARY, 0);
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public KW_RESTRICT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RESTRICT, 0);
    }
    public KW_CASCADE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CASCADE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropTable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropTable) {
             listener.enterDropTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropTable) {
             listener.exitDropTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropTable) {
            return visitor.visitDropTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropTablespaceContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_TABLESPACE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLESPACE, 0)!;
    }
    public tablespaceName(): TablespaceNameContext {
        return this.getRuleContext(0, TablespaceNameContext)!;
    }
    public KW_UNDO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNDO, 0);
    }
    public KW_ENGINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENGINE, 0);
    }
    public engineName(): EngineNameContext | null {
        return this.getRuleContext(0, EngineNameContext);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropTablespace;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropTablespace) {
             listener.enterDropTablespace(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropTablespace) {
             listener.exitDropTablespace(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropTablespace) {
            return visitor.visitDropTablespace(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropTriggerContext extends antlr.ParserRuleContext {
    public _trigger_name?: FullIdContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_TRIGGER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TRIGGER, 0)!;
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropTrigger;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropTrigger) {
             listener.enterDropTrigger(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropTrigger) {
             listener.exitDropTrigger(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropTrigger) {
            return visitor.visitDropTrigger(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropViewContext extends antlr.ParserRuleContext {
    public _dropType?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_VIEW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VIEW, 0)!;
    }
    public viewName(): ViewNameContext[];
    public viewName(i: number): ViewNameContext | null;
    public viewName(i?: number): ViewNameContext[] | ViewNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ViewNameContext);
        }

        return this.getRuleContext(i, ViewNameContext);
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_RESTRICT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RESTRICT, 0);
    }
    public KW_CASCADE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CASCADE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropView;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropView) {
             listener.enterDropView(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropView) {
             listener.exitDropView(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropView) {
            return visitor.visitDropView(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropRoleContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_ROLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ROLE, 0)!;
    }
    public userOrRoleNames(): UserOrRoleNamesContext {
        return this.getRuleContext(0, UserOrRoleNamesContext)!;
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropRole;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropRole) {
             listener.enterDropRole(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropRole) {
             listener.exitDropRole(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropRole) {
            return visitor.visitDropRole(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SetRoleContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public KW_ROLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ROLE, 0)!;
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TO, 0);
    }
    public KW_NONE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NONE, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public userOrRoleNames(): UserOrRoleNamesContext | null {
        return this.getRuleContext(0, UserOrRoleNamesContext);
    }
    public userOrRoleName(): UserOrRoleNameContext[];
    public userOrRoleName(i: number): UserOrRoleNameContext | null;
    public userOrRoleName(i?: number): UserOrRoleNameContext[] | UserOrRoleNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserOrRoleNameContext);
        }

        return this.getRuleContext(i, UserOrRoleNameContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public roleOption(): RoleOptionContext | null {
        return this.getRuleContext(0, RoleOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_setRole;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetRole) {
             listener.enterSetRole(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetRole) {
             listener.exitSetRole(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetRole) {
            return visitor.visitSetRole(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RenameTableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RENAME(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RENAME, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public renameTableClause(): RenameTableClauseContext[];
    public renameTableClause(i: number): RenameTableClauseContext | null;
    public renameTableClause(i?: number): RenameTableClauseContext[] | RenameTableClauseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(RenameTableClauseContext);
        }

        return this.getRuleContext(i, RenameTableClauseContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_renameTable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRenameTable) {
             listener.enterRenameTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRenameTable) {
             listener.exitRenameTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRenameTable) {
            return visitor.visitRenameTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RenameTableClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TO, 0)!;
    }
    public tableNameCreate(): TableNameCreateContext {
        return this.getRuleContext(0, TableNameCreateContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_renameTableClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRenameTableClause) {
             listener.enterRenameTableClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRenameTableClause) {
             listener.exitRenameTableClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRenameTableClause) {
            return visitor.visitRenameTableClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TruncateTableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TRUNCATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TRUNCATE, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_truncateTable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTruncateTable) {
             listener.enterTruncateTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTruncateTable) {
             listener.exitTruncateTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTruncateTable) {
            return visitor.visitTruncateTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CallStatementContext extends antlr.ParserRuleContext {
    public _sp_name?: FullIdContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CALL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CALL, 0)!;
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public constants(): ConstantsContext | null {
        return this.getRuleContext(0, ConstantsContext);
    }
    public expressions(): ExpressionsContext | null {
        return this.getRuleContext(0, ExpressionsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_callStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCallStatement) {
             listener.enterCallStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCallStatement) {
             listener.exitCallStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCallStatement) {
            return visitor.visitCallStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DeleteStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public singleDeleteStatement(): SingleDeleteStatementContext | null {
        return this.getRuleContext(0, SingleDeleteStatementContext);
    }
    public multipleDeleteStatement(): MultipleDeleteStatementContext | null {
        return this.getRuleContext(0, MultipleDeleteStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_deleteStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDeleteStatement) {
             listener.enterDeleteStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDeleteStatement) {
             listener.exitDeleteStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDeleteStatement) {
            return visitor.visitDeleteStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DoStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DO, 0)!;
    }
    public expressions(): ExpressionsContext {
        return this.getRuleContext(0, ExpressionsContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_doStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDoStatement) {
             listener.enterDoStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDoStatement) {
             listener.exitDoStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDoStatement) {
            return visitor.visitDoStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class HandlerStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public handlerOpenStatement(): HandlerOpenStatementContext | null {
        return this.getRuleContext(0, HandlerOpenStatementContext);
    }
    public handlerReadIndexStatement(): HandlerReadIndexStatementContext | null {
        return this.getRuleContext(0, HandlerReadIndexStatementContext);
    }
    public handlerReadStatement(): HandlerReadStatementContext | null {
        return this.getRuleContext(0, HandlerReadStatementContext);
    }
    public handlerCloseStatement(): HandlerCloseStatementContext | null {
        return this.getRuleContext(0, HandlerCloseStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_handlerStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHandlerStatement) {
             listener.enterHandlerStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHandlerStatement) {
             listener.exitHandlerStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHandlerStatement) {
            return visitor.visitHandlerStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class InsertStatementContext extends antlr.ParserRuleContext {
    public _priority?: Token | null;
    public _duplicatedFirst?: UpdatedElementContext;
    public _updatedElement?: UpdatedElementContext;
    public _duplicatedElements: UpdatedElementContext[] = [];
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INSERT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INSERT, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public setAssignmentList(): SetAssignmentListContext | null {
        return this.getRuleContext(0, SetAssignmentListContext);
    }
    public KW_IGNORE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IGNORE, 0);
    }
    public KW_INTO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INTO, 0);
    }
    public KW_PARTITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTITION, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public asRowAlias(): AsRowAliasContext[];
    public asRowAlias(i: number): AsRowAliasContext | null;
    public asRowAlias(i?: number): AsRowAliasContext[] | AsRowAliasContext | null {
        if (i === undefined) {
            return this.getRuleContexts(AsRowAliasContext);
        }

        return this.getRuleContext(i, AsRowAliasContext);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ON, 0);
    }
    public KW_DUPLICATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DUPLICATE, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY, 0);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UPDATE, 0);
    }
    public updatedElement(): UpdatedElementContext[];
    public updatedElement(i: number): UpdatedElementContext | null;
    public updatedElement(i?: number): UpdatedElementContext[] | UpdatedElementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UpdatedElementContext);
        }

        return this.getRuleContext(i, UpdatedElementContext);
    }
    public KW_LOW_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOW_PRIORITY, 0);
    }
    public KW_DELAYED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DELAYED, 0);
    }
    public KW_HIGH_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HIGH_PRIORITY, 0);
    }
    public fullColumnNames(): FullColumnNamesContext | null {
        return this.getRuleContext(0, FullColumnNamesContext);
    }
    public valuesOrValueList(): ValuesOrValueListContext | null {
        return this.getRuleContext(0, ValuesOrValueListContext);
    }
    public selectOrTableOrValues(): SelectOrTableOrValuesContext | null {
        return this.getRuleContext(0, SelectOrTableOrValuesContext);
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_insertStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterInsertStatement) {
             listener.enterInsertStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitInsertStatement) {
             listener.exitInsertStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitInsertStatement) {
            return visitor.visitInsertStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AsRowAliasContext extends antlr.ParserRuleContext {
    public _rowAlias?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_AS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AS, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public fullColumnNames(): FullColumnNamesContext | null {
        return this.getRuleContext(0, FullColumnNamesContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_asRowAlias;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAsRowAlias) {
             listener.enterAsRowAlias(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAsRowAlias) {
             listener.exitAsRowAlias(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAsRowAlias) {
            return visitor.visitAsRowAlias(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SelectOrTableOrValuesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public selectStatement(): SelectStatementContext | null {
        return this.getRuleContext(0, SelectStatementContext);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE, 0);
    }
    public tableName(): TableNameContext | null {
        return this.getRuleContext(0, TableNameContext);
    }
    public rowValuesList(): RowValuesListContext | null {
        return this.getRuleContext(0, RowValuesListContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_selectOrTableOrValues;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectOrTableOrValues) {
             listener.enterSelectOrTableOrValues(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectOrTableOrValues) {
             listener.exitSelectOrTableOrValues(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectOrTableOrValues) {
            return visitor.visitSelectOrTableOrValues(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class InterSectStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public interSectQuery(): InterSectQueryContext[];
    public interSectQuery(i: number): InterSectQueryContext | null;
    public interSectQuery(i?: number): InterSectQueryContext[] | InterSectQueryContext | null {
        if (i === undefined) {
            return this.getRuleContexts(InterSectQueryContext);
        }

        return this.getRuleContext(i, InterSectQueryContext);
    }
    public KW_INTERSECT(): antlr.TerminalNode[];
    public KW_INTERSECT(i: number): antlr.TerminalNode | null;
    public KW_INTERSECT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_INTERSECT);
    	} else {
    		return this.getToken(MySqlParser.KW_INTERSECT, i);
    	}
    }
    public KW_ALL(): antlr.TerminalNode[];
    public KW_ALL(i: number): antlr.TerminalNode | null;
    public KW_ALL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ALL);
    	} else {
    		return this.getToken(MySqlParser.KW_ALL, i);
    	}
    }
    public KW_DISTINCT(): antlr.TerminalNode[];
    public KW_DISTINCT(i: number): antlr.TerminalNode | null;
    public KW_DISTINCT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_DISTINCT);
    	} else {
    		return this.getToken(MySqlParser.KW_DISTINCT, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_interSectStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterInterSectStatement) {
             listener.enterInterSectStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitInterSectStatement) {
             listener.exitInterSectStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitInterSectStatement) {
            return visitor.visitInterSectStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class InterSectQueryContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public querySpecification(): QuerySpecificationContext {
        return this.getRuleContext(0, QuerySpecificationContext)!;
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_interSectQuery;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterInterSectQuery) {
             listener.enterInterSectQuery(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitInterSectQuery) {
             listener.exitInterSectQuery(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitInterSectQuery) {
            return visitor.visitInterSectQuery(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LoadDataStatementContext extends antlr.ParserRuleContext {
    public _priority?: Token | null;
    public _filename?: Token | null;
    public _violation?: Token | null;
    public _charset?: CharsetNameContext;
    public _fieldsFormat?: Token | null;
    public _linesFormat?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LOAD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LOAD, 0)!;
    }
    public KW_DATA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DATA, 0)!;
    }
    public KW_INFILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INFILE, 0)!;
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INTO, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCAL, 0);
    }
    public KW_PARTITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTITION, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode[];
    public LR_BRACKET(i: number): antlr.TerminalNode | null;
    public LR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.LR_BRACKET, i);
    	}
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public RR_BRACKET(): antlr.TerminalNode[];
    public RR_BRACKET(i: number): antlr.TerminalNode | null;
    public RR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.RR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.RR_BRACKET, i);
    	}
    }
    public KW_CHARACTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARACTER, 0);
    }
    public KW_SET(): antlr.TerminalNode[];
    public KW_SET(i: number): antlr.TerminalNode | null;
    public KW_SET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_SET);
    	} else {
    		return this.getToken(MySqlParser.KW_SET, i);
    	}
    }
    public KW_LINES(): antlr.TerminalNode[];
    public KW_LINES(i: number): antlr.TerminalNode | null;
    public KW_LINES(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_LINES);
    	} else {
    		return this.getToken(MySqlParser.KW_LINES, i);
    	}
    }
    public KW_IGNORE(): antlr.TerminalNode[];
    public KW_IGNORE(i: number): antlr.TerminalNode | null;
    public KW_IGNORE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_IGNORE);
    	} else {
    		return this.getToken(MySqlParser.KW_IGNORE, i);
    	}
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public assignmentField(): AssignmentFieldContext[];
    public assignmentField(i: number): AssignmentFieldContext | null;
    public assignmentField(i?: number): AssignmentFieldContext[] | AssignmentFieldContext | null {
        if (i === undefined) {
            return this.getRuleContexts(AssignmentFieldContext);
        }

        return this.getRuleContext(i, AssignmentFieldContext);
    }
    public updatedElement(): UpdatedElementContext[];
    public updatedElement(i: number): UpdatedElementContext | null;
    public updatedElement(i?: number): UpdatedElementContext[] | UpdatedElementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UpdatedElementContext);
        }

        return this.getRuleContext(i, UpdatedElementContext);
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public KW_LOW_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOW_PRIORITY, 0);
    }
    public KW_CONCURRENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONCURRENT, 0);
    }
    public KW_REPLACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLACE, 0);
    }
    public KW_FIELDS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIELDS, 0);
    }
    public KW_COLUMNS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMNS, 0);
    }
    public KW_ROWS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROWS, 0);
    }
    public selectFieldsInto(): SelectFieldsIntoContext[];
    public selectFieldsInto(i: number): SelectFieldsIntoContext | null;
    public selectFieldsInto(i?: number): SelectFieldsIntoContext[] | SelectFieldsIntoContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SelectFieldsIntoContext);
        }

        return this.getRuleContext(i, SelectFieldsIntoContext);
    }
    public selectLinesInto(): SelectLinesIntoContext[];
    public selectLinesInto(i: number): SelectLinesIntoContext | null;
    public selectLinesInto(i?: number): SelectLinesIntoContext[] | SelectLinesIntoContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SelectLinesIntoContext);
        }

        return this.getRuleContext(i, SelectLinesIntoContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_loadDataStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLoadDataStatement) {
             listener.enterLoadDataStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLoadDataStatement) {
             listener.exitLoadDataStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLoadDataStatement) {
            return visitor.visitLoadDataStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LoadXmlStatementContext extends antlr.ParserRuleContext {
    public _priority?: Token | null;
    public _filename?: Token | null;
    public _violation?: Token | null;
    public _charset?: CharsetNameContext;
    public _tag?: Token | null;
    public _linesFormat?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LOAD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LOAD, 0)!;
    }
    public KW_XML(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_XML, 0)!;
    }
    public KW_INFILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INFILE, 0)!;
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INTO, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode[];
    public STRING_LITERAL(i: number): antlr.TerminalNode | null;
    public STRING_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STRING_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.STRING_LITERAL, i);
    	}
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCAL, 0);
    }
    public KW_CHARACTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARACTER, 0);
    }
    public KW_SET(): antlr.TerminalNode[];
    public KW_SET(i: number): antlr.TerminalNode | null;
    public KW_SET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_SET);
    	} else {
    		return this.getToken(MySqlParser.KW_SET, i);
    	}
    }
    public KW_ROWS(): antlr.TerminalNode[];
    public KW_ROWS(i: number): antlr.TerminalNode | null;
    public KW_ROWS(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ROWS);
    	} else {
    		return this.getToken(MySqlParser.KW_ROWS, i);
    	}
    }
    public KW_IDENTIFIED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IDENTIFIED, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BY, 0);
    }
    public KW_IGNORE(): antlr.TerminalNode[];
    public KW_IGNORE(i: number): antlr.TerminalNode | null;
    public KW_IGNORE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_IGNORE);
    	} else {
    		return this.getToken(MySqlParser.KW_IGNORE, i);
    	}
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public assignmentField(): AssignmentFieldContext[];
    public assignmentField(i: number): AssignmentFieldContext | null;
    public assignmentField(i?: number): AssignmentFieldContext[] | AssignmentFieldContext | null {
        if (i === undefined) {
            return this.getRuleContexts(AssignmentFieldContext);
        }

        return this.getRuleContext(i, AssignmentFieldContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public updatedElement(): UpdatedElementContext[];
    public updatedElement(i: number): UpdatedElementContext | null;
    public updatedElement(i?: number): UpdatedElementContext[] | UpdatedElementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UpdatedElementContext);
        }

        return this.getRuleContext(i, UpdatedElementContext);
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public KW_LOW_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOW_PRIORITY, 0);
    }
    public KW_CONCURRENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONCURRENT, 0);
    }
    public KW_REPLACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLACE, 0);
    }
    public KW_LINES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LINES, 0);
    }
    public LESS_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LESS_SYMBOL, 0);
    }
    public GREATER_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.GREATER_SYMBOL, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_loadXmlStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLoadXmlStatement) {
             listener.enterLoadXmlStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLoadXmlStatement) {
             listener.exitLoadXmlStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLoadXmlStatement) {
            return visitor.visitLoadXmlStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ParenthesizedQueryContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public parenthesizedQueryExpression(): ParenthesizedQueryExpressionContext {
        return this.getRuleContext(0, ParenthesizedQueryExpressionContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public orderByClause(): OrderByClauseContext[];
    public orderByClause(i: number): OrderByClauseContext | null;
    public orderByClause(i?: number): OrderByClauseContext[] | OrderByClauseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(OrderByClauseContext);
        }

        return this.getRuleContext(i, OrderByClauseContext);
    }
    public limitClause(): LimitClauseContext[];
    public limitClause(i: number): LimitClauseContext | null;
    public limitClause(i?: number): LimitClauseContext[] | LimitClauseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(LimitClauseContext);
        }

        return this.getRuleContext(i, LimitClauseContext);
    }
    public intoClause(): IntoClauseContext | null {
        return this.getRuleContext(0, IntoClauseContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_parenthesizedQuery;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterParenthesizedQuery) {
             listener.enterParenthesizedQuery(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitParenthesizedQuery) {
             listener.exitParenthesizedQuery(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitParenthesizedQuery) {
            return visitor.visitParenthesizedQuery(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReplaceStatementContext extends antlr.ParserRuleContext {
    public _priority?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REPLACE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPLACE, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public replaceStatementValuesOrSelectOrTable(): ReplaceStatementValuesOrSelectOrTableContext | null {
        return this.getRuleContext(0, ReplaceStatementValuesOrSelectOrTableContext);
    }
    public setAssignmentList(): SetAssignmentListContext | null {
        return this.getRuleContext(0, SetAssignmentListContext);
    }
    public KW_INTO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INTO, 0);
    }
    public KW_PARTITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTITION, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode[];
    public LR_BRACKET(i: number): antlr.TerminalNode | null;
    public LR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.LR_BRACKET, i);
    	}
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public RR_BRACKET(): antlr.TerminalNode[];
    public RR_BRACKET(i: number): antlr.TerminalNode | null;
    public RR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.RR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.RR_BRACKET, i);
    	}
    }
    public KW_LOW_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOW_PRIORITY, 0);
    }
    public KW_DELAYED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DELAYED, 0);
    }
    public columnNames(): ColumnNamesContext | null {
        return this.getRuleContext(0, ColumnNamesContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_replaceStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterReplaceStatement) {
             listener.enterReplaceStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitReplaceStatement) {
             listener.exitReplaceStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitReplaceStatement) {
            return visitor.visitReplaceStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SelectStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_selectStatement;
    }
    public override copyFrom(ctx: SelectStatementContext): void {
        super.copyFrom(ctx);
    }
}
export class UnionAndLateralSelectContext extends SelectStatementContext {
    public _unionType?: Token | null;
    public constructor(ctx: SelectStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public querySpecification(): QuerySpecificationContext[];
    public querySpecification(i: number): QuerySpecificationContext | null;
    public querySpecification(i?: number): QuerySpecificationContext[] | QuerySpecificationContext | null {
        if (i === undefined) {
            return this.getRuleContexts(QuerySpecificationContext);
        }

        return this.getRuleContext(i, QuerySpecificationContext);
    }
    public unionStatement(): UnionStatementContext[];
    public unionStatement(i: number): UnionStatementContext | null;
    public unionStatement(i?: number): UnionStatementContext[] | UnionStatementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UnionStatementContext);
        }

        return this.getRuleContext(i, UnionStatementContext);
    }
    public KW_UNION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNION, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public lateralStatement(): LateralStatementContext[];
    public lateralStatement(i: number): LateralStatementContext | null;
    public lateralStatement(i?: number): LateralStatementContext[] | LateralStatementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(LateralStatementContext);
        }

        return this.getRuleContext(i, LateralStatementContext);
    }
    public orderByClause(): OrderByClauseContext | null {
        return this.getRuleContext(0, OrderByClauseContext);
    }
    public limitClause(): LimitClauseContext | null {
        return this.getRuleContext(0, LimitClauseContext);
    }
    public lockClause(): LockClauseContext | null {
        return this.getRuleContext(0, LockClauseContext);
    }
    public intoClause(): IntoClauseContext | null {
        return this.getRuleContext(0, IntoClauseContext);
    }
    public queryExpression(): QueryExpressionContext | null {
        return this.getRuleContext(0, QueryExpressionContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public KW_DISTINCT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISTINCT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUnionAndLateralSelect) {
             listener.enterUnionAndLateralSelect(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUnionAndLateralSelect) {
             listener.exitUnionAndLateralSelect(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUnionAndLateralSelect) {
            return visitor.visitUnionAndLateralSelect(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SelectExpressionContext extends SelectStatementContext {
    public _unionType?: Token | null;
    public constructor(ctx: SelectStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public queryExpression(): QueryExpressionContext[];
    public queryExpression(i: number): QueryExpressionContext | null;
    public queryExpression(i?: number): QueryExpressionContext[] | QueryExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(QueryExpressionContext);
        }

        return this.getRuleContext(i, QueryExpressionContext);
    }
    public unionStatement(): UnionStatementContext[];
    public unionStatement(i: number): UnionStatementContext | null;
    public unionStatement(i?: number): UnionStatementContext[] | UnionStatementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UnionStatementContext);
        }

        return this.getRuleContext(i, UnionStatementContext);
    }
    public KW_UNION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNION, 0);
    }
    public orderByClause(): OrderByClauseContext | null {
        return this.getRuleContext(0, OrderByClauseContext);
    }
    public limitClause(): LimitClauseContext | null {
        return this.getRuleContext(0, LimitClauseContext);
    }
    public lockClause(): LockClauseContext | null {
        return this.getRuleContext(0, LockClauseContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public KW_DISTINCT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISTINCT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectExpression) {
             listener.enterSelectExpression(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectExpression) {
             listener.exitSelectExpression(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectExpression) {
            return visitor.visitSelectExpression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SetOperationsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public queryExpressionBody(): QueryExpressionBodyContext {
        return this.getRuleContext(0, QueryExpressionBodyContext)!;
    }
    public withClause(): WithClauseContext | null {
        return this.getRuleContext(0, WithClauseContext);
    }
    public orderByClause(): OrderByClauseContext | null {
        return this.getRuleContext(0, OrderByClauseContext);
    }
    public limitClause(): LimitClauseContext | null {
        return this.getRuleContext(0, LimitClauseContext);
    }
    public intoClause(): IntoClauseContext | null {
        return this.getRuleContext(0, IntoClauseContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_setOperations;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetOperations) {
             listener.enterSetOperations(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetOperations) {
             listener.exitSetOperations(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetOperations) {
            return visitor.visitSetOperations(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class QueryExpressionBodyContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public queryItem(): QueryItemContext {
        return this.getRuleContext(0, QueryItemContext)!;
    }
    public queryExpressionBody(): QueryExpressionBodyContext | null {
        return this.getRuleContext(0, QueryExpressionBodyContext);
    }
    public KW_UNION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNION, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public KW_DISTINCT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISTINCT, 0);
    }
    public KW_EXCEPT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXCEPT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_queryExpressionBody;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterQueryExpressionBody) {
             listener.enterQueryExpressionBody(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitQueryExpressionBody) {
             listener.exitQueryExpressionBody(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitQueryExpressionBody) {
            return visitor.visitQueryExpressionBody(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class QueryItemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public queryPrimary(): QueryPrimaryContext {
        return this.getRuleContext(0, QueryPrimaryContext)!;
    }
    public queryItem(): QueryItemContext | null {
        return this.getRuleContext(0, QueryItemContext);
    }
    public KW_INTERSECT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INTERSECT, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public KW_DISTINCT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISTINCT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_queryItem;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterQueryItem) {
             listener.enterQueryItem(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitQueryItem) {
             listener.exitQueryItem(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitQueryItem) {
            return visitor.visitQueryItem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class QueryPrimaryContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public queryBlock(): QueryBlockContext | null {
        return this.getRuleContext(0, QueryBlockContext);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public queryExpressionBody(): QueryExpressionBodyContext | null {
        return this.getRuleContext(0, QueryExpressionBodyContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public orderByClause(): OrderByClauseContext | null {
        return this.getRuleContext(0, OrderByClauseContext);
    }
    public limitClause(): LimitClauseContext | null {
        return this.getRuleContext(0, LimitClauseContext);
    }
    public intoClause(): IntoClauseContext | null {
        return this.getRuleContext(0, IntoClauseContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_queryPrimary;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterQueryPrimary) {
             listener.enterQueryPrimary(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitQueryPrimary) {
             listener.exitQueryPrimary(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitQueryPrimary) {
            return visitor.visitQueryPrimary(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UpdateStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public singleUpdateStatement(): SingleUpdateStatementContext | null {
        return this.getRuleContext(0, SingleUpdateStatementContext);
    }
    public multipleUpdateStatement(): MultipleUpdateStatementContext | null {
        return this.getRuleContext(0, MultipleUpdateStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_updateStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUpdateStatement) {
             listener.enterUpdateStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUpdateStatement) {
             listener.exitUpdateStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUpdateStatement) {
            return visitor.visitUpdateStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ValuesStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public rowValuesList(): RowValuesListContext {
        return this.getRuleContext(0, RowValuesListContext)!;
    }
    public KW_ORDER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ORDER, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BY, 0);
    }
    public indexColumnName(): IndexColumnNameContext | null {
        return this.getRuleContext(0, IndexColumnNameContext);
    }
    public KW_LIMIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LIMIT, 0);
    }
    public limitClauseAtom(): LimitClauseAtomContext | null {
        return this.getRuleContext(0, LimitClauseAtomContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_valuesStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterValuesStatement) {
             listener.enterValuesStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitValuesStatement) {
             listener.exitValuesStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitValuesStatement) {
            return visitor.visitValuesStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ParenthesizedQueryExpressionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public queryBlock(): QueryBlockContext[];
    public queryBlock(i: number): QueryBlockContext | null;
    public queryBlock(i?: number): QueryBlockContext[] | QueryBlockContext | null {
        if (i === undefined) {
            return this.getRuleContexts(QueryBlockContext);
        }

        return this.getRuleContext(i, QueryBlockContext);
    }
    public orderByClause(): OrderByClauseContext | null {
        return this.getRuleContext(0, OrderByClauseContext);
    }
    public limitClause(): LimitClauseContext | null {
        return this.getRuleContext(0, LimitClauseContext);
    }
    public intoClause(): IntoClauseContext | null {
        return this.getRuleContext(0, IntoClauseContext);
    }
    public KW_UNION(): antlr.TerminalNode[];
    public KW_UNION(i: number): antlr.TerminalNode | null;
    public KW_UNION(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_UNION);
    	} else {
    		return this.getToken(MySqlParser.KW_UNION, i);
    	}
    }
    public KW_INTERSECT(): antlr.TerminalNode[];
    public KW_INTERSECT(i: number): antlr.TerminalNode | null;
    public KW_INTERSECT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_INTERSECT);
    	} else {
    		return this.getToken(MySqlParser.KW_INTERSECT, i);
    	}
    }
    public KW_EXCEPT(): antlr.TerminalNode[];
    public KW_EXCEPT(i: number): antlr.TerminalNode | null;
    public KW_EXCEPT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_EXCEPT);
    	} else {
    		return this.getToken(MySqlParser.KW_EXCEPT, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_parenthesizedQueryExpression;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterParenthesizedQueryExpression) {
             listener.enterParenthesizedQueryExpression(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitParenthesizedQueryExpression) {
             listener.exitParenthesizedQueryExpression(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitParenthesizedQueryExpression) {
            return visitor.visitParenthesizedQueryExpression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class QueryBlockContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public selectStatement(): SelectStatementContext | null {
        return this.getRuleContext(0, SelectStatementContext);
    }
    public tableStatement(): TableStatementContext | null {
        return this.getRuleContext(0, TableStatementContext);
    }
    public valuesStatement(): ValuesStatementContext | null {
        return this.getRuleContext(0, ValuesStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_queryBlock;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterQueryBlock) {
             listener.enterQueryBlock(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitQueryBlock) {
             listener.exitQueryBlock(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitQueryBlock) {
            return visitor.visitQueryBlock(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReplaceStatementValuesOrSelectOrTableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public selectStatement(): SelectStatementContext | null {
        return this.getRuleContext(0, SelectStatementContext);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE, 0);
    }
    public tableName(): TableNameContext | null {
        return this.getRuleContext(0, TableNameContext);
    }
    public valuesOrValueList(): ValuesOrValueListContext | null {
        return this.getRuleContext(0, ValuesOrValueListContext);
    }
    public rowValuesList(): RowValuesListContext | null {
        return this.getRuleContext(0, RowValuesListContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_replaceStatementValuesOrSelectOrTable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterReplaceStatementValuesOrSelectOrTable) {
             listener.enterReplaceStatementValuesOrSelectOrTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitReplaceStatementValuesOrSelectOrTable) {
             listener.exitReplaceStatementValuesOrSelectOrTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitReplaceStatementValuesOrSelectOrTable) {
            return visitor.visitReplaceStatementValuesOrSelectOrTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RowValuesListContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_VALUES(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VALUES, 0)!;
    }
    public KW_ROW(): antlr.TerminalNode[];
    public KW_ROW(i: number): antlr.TerminalNode | null;
    public KW_ROW(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ROW);
    	} else {
    		return this.getToken(MySqlParser.KW_ROW, i);
    	}
    }
    public expressionsWithDefaults(): ExpressionsWithDefaultsContext[];
    public expressionsWithDefaults(i: number): ExpressionsWithDefaultsContext | null;
    public expressionsWithDefaults(i?: number): ExpressionsWithDefaultsContext[] | ExpressionsWithDefaultsContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionsWithDefaultsContext);
        }

        return this.getRuleContext(i, ExpressionsWithDefaultsContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_rowValuesList;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRowValuesList) {
             listener.enterRowValuesList(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRowValuesList) {
             listener.exitRowValuesList(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRowValuesList) {
            return visitor.visitRowValuesList(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SetAssignmentListContext extends antlr.ParserRuleContext {
    public _setFirst?: UpdatedElementContext;
    public _updatedElement?: UpdatedElementContext;
    public _setElements: UpdatedElementContext[] = [];
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public updatedElement(): UpdatedElementContext[];
    public updatedElement(i: number): UpdatedElementContext | null;
    public updatedElement(i?: number): UpdatedElementContext[] | UpdatedElementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UpdatedElementContext);
        }

        return this.getRuleContext(i, UpdatedElementContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_setAssignmentList;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetAssignmentList) {
             listener.enterSetAssignmentList(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetAssignmentList) {
             listener.exitSetAssignmentList(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetAssignmentList) {
            return visitor.visitSetAssignmentList(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UpdatedElementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public columnName(): ColumnNameContext {
        return this.getRuleContext(0, ColumnNameContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public expressionOrDefault(): ExpressionOrDefaultContext {
        return this.getRuleContext(0, ExpressionOrDefaultContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_updatedElement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUpdatedElement) {
             listener.enterUpdatedElement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUpdatedElement) {
             listener.exitUpdatedElement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUpdatedElement) {
            return visitor.visitUpdatedElement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AssignmentFieldContext extends antlr.ParserRuleContext {
    public _var_name?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public LOCAL_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LOCAL_ID, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_assignmentField;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAssignmentField) {
             listener.enterAssignmentField(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAssignmentField) {
             listener.exitAssignmentField(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAssignmentField) {
            return visitor.visitAssignmentField(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LockClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOR, 0);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UPDATE, 0);
    }
    public KW_SHARE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SHARE, 0);
    }
    public KW_OF(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OF, 0);
    }
    public tableName(): TableNameContext[];
    public tableName(i: number): TableNameContext | null;
    public tableName(i?: number): TableNameContext[] | TableNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TableNameContext);
        }

        return this.getRuleContext(i, TableNameContext);
    }
    public KW_LOCKED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCKED, 0);
    }
    public KW_NOWAIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOWAIT, 0);
    }
    public KW_SKIP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SKIP, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_LOCK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCK, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IN, 0);
    }
    public KW_MODE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MODE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_lockClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLockClause) {
             listener.enterLockClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLockClause) {
             listener.exitLockClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLockClause) {
            return visitor.visitLockClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SingleDeleteStatementContext extends antlr.ParserRuleContext {
    public _priority?: Token | null;
    public _table_alias?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DELETE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DELETE, 0)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FROM, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_QUICK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUICK, 0);
    }
    public KW_IGNORE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IGNORE, 0);
    }
    public KW_PARTITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTITION, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public KW_WHERE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WHERE, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public orderByClause(): OrderByClauseContext | null {
        return this.getRuleContext(0, OrderByClauseContext);
    }
    public KW_LIMIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LIMIT, 0);
    }
    public limitClauseAtom(): LimitClauseAtomContext | null {
        return this.getRuleContext(0, LimitClauseAtomContext);
    }
    public KW_LOW_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOW_PRIORITY, 0);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_singleDeleteStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSingleDeleteStatement) {
             listener.enterSingleDeleteStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSingleDeleteStatement) {
             listener.exitSingleDeleteStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSingleDeleteStatement) {
            return visitor.visitSingleDeleteStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class MultipleDeleteStatementContext extends antlr.ParserRuleContext {
    public _priority?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DELETE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DELETE, 0)!;
    }
    public tableName(): TableNameContext[];
    public tableName(i: number): TableNameContext | null;
    public tableName(i?: number): TableNameContext[] | TableNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TableNameContext);
        }

        return this.getRuleContext(i, TableNameContext);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FROM, 0);
    }
    public tableSources(): TableSourcesContext | null {
        return this.getRuleContext(0, TableSourcesContext);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USING, 0);
    }
    public KW_QUICK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUICK, 0);
    }
    public KW_IGNORE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IGNORE, 0);
    }
    public KW_WHERE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WHERE, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public KW_LOW_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOW_PRIORITY, 0);
    }
    public DOT(): antlr.TerminalNode[];
    public DOT(i: number): antlr.TerminalNode | null;
    public DOT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.DOT);
    	} else {
    		return this.getToken(MySqlParser.DOT, i);
    	}
    }
    public STAR(): antlr.TerminalNode[];
    public STAR(i: number): antlr.TerminalNode | null;
    public STAR(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STAR);
    	} else {
    		return this.getToken(MySqlParser.STAR, i);
    	}
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_multipleDeleteStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterMultipleDeleteStatement) {
             listener.enterMultipleDeleteStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitMultipleDeleteStatement) {
             listener.exitMultipleDeleteStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitMultipleDeleteStatement) {
            return visitor.visitMultipleDeleteStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class HandlerOpenStatementContext extends antlr.ParserRuleContext {
    public _table_alias?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_HANDLER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_HANDLER, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_OPEN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_OPEN, 0)!;
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_handlerOpenStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHandlerOpenStatement) {
             listener.enterHandlerOpenStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHandlerOpenStatement) {
             listener.exitHandlerOpenStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHandlerOpenStatement) {
            return visitor.visitHandlerOpenStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class HandlerReadIndexStatementContext extends antlr.ParserRuleContext {
    public _moveOrder?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_HANDLER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_HANDLER, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_READ(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_READ, 0)!;
    }
    public indexName(): IndexNameContext {
        return this.getRuleContext(0, IndexNameContext)!;
    }
    public comparisonBase(): ComparisonBaseContext | null {
        return this.getRuleContext(0, ComparisonBaseContext);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public constants(): ConstantsContext | null {
        return this.getRuleContext(0, ConstantsContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public KW_WHERE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WHERE, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public KW_LIMIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LIMIT, 0);
    }
    public limitClauseAtom(): LimitClauseAtomContext | null {
        return this.getRuleContext(0, LimitClauseAtomContext);
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIRST, 0);
    }
    public KW_NEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NEXT, 0);
    }
    public KW_PREV(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PREV, 0);
    }
    public KW_LAST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LAST, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_handlerReadIndexStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHandlerReadIndexStatement) {
             listener.enterHandlerReadIndexStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHandlerReadIndexStatement) {
             listener.exitHandlerReadIndexStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHandlerReadIndexStatement) {
            return visitor.visitHandlerReadIndexStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class HandlerReadStatementContext extends antlr.ParserRuleContext {
    public _moveOrder?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_HANDLER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_HANDLER, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_READ(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_READ, 0)!;
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIRST, 0);
    }
    public KW_NEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NEXT, 0);
    }
    public KW_WHERE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WHERE, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public KW_LIMIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LIMIT, 0);
    }
    public limitClauseAtom(): LimitClauseAtomContext | null {
        return this.getRuleContext(0, LimitClauseAtomContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_handlerReadStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHandlerReadStatement) {
             listener.enterHandlerReadStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHandlerReadStatement) {
             listener.exitHandlerReadStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHandlerReadStatement) {
            return visitor.visitHandlerReadStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class HandlerCloseStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_HANDLER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_HANDLER, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_CLOSE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CLOSE, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_handlerCloseStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHandlerCloseStatement) {
             listener.enterHandlerCloseStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHandlerCloseStatement) {
             listener.exitHandlerCloseStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHandlerCloseStatement) {
            return visitor.visitHandlerCloseStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ImportTableStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IMPORT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IMPORT, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FROM, 0)!;
    }
    public stringLiteral(): StringLiteralContext[];
    public stringLiteral(i: number): StringLiteralContext | null;
    public stringLiteral(i?: number): StringLiteralContext[] | StringLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(StringLiteralContext);
        }

        return this.getRuleContext(i, StringLiteralContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_importTableStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterImportTableStatement) {
             listener.enterImportTableStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitImportTableStatement) {
             listener.exitImportTableStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitImportTableStatement) {
            return visitor.visitImportTableStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SingleUpdateStatementContext extends antlr.ParserRuleContext {
    public _priority?: Token | null;
    public _table_alias?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UPDATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UPDATE, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public updatedElement(): UpdatedElementContext[];
    public updatedElement(i: number): UpdatedElementContext | null;
    public updatedElement(i?: number): UpdatedElementContext[] | UpdatedElementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UpdatedElementContext);
        }

        return this.getRuleContext(i, UpdatedElementContext);
    }
    public KW_IGNORE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IGNORE, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_WHERE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WHERE, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public orderByClause(): OrderByClauseContext | null {
        return this.getRuleContext(0, OrderByClauseContext);
    }
    public limitClause(): LimitClauseContext | null {
        return this.getRuleContext(0, LimitClauseContext);
    }
    public KW_LOW_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOW_PRIORITY, 0);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_singleUpdateStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSingleUpdateStatement) {
             listener.enterSingleUpdateStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSingleUpdateStatement) {
             listener.exitSingleUpdateStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSingleUpdateStatement) {
            return visitor.visitSingleUpdateStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class MultipleUpdateStatementContext extends antlr.ParserRuleContext {
    public _priority?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UPDATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UPDATE, 0)!;
    }
    public tableSources(): TableSourcesContext {
        return this.getRuleContext(0, TableSourcesContext)!;
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public updatedElement(): UpdatedElementContext[];
    public updatedElement(i: number): UpdatedElementContext | null;
    public updatedElement(i?: number): UpdatedElementContext[] | UpdatedElementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UpdatedElementContext);
        }

        return this.getRuleContext(i, UpdatedElementContext);
    }
    public KW_IGNORE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IGNORE, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_WHERE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WHERE, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public KW_LOW_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOW_PRIORITY, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_multipleUpdateStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterMultipleUpdateStatement) {
             listener.enterMultipleUpdateStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitMultipleUpdateStatement) {
             listener.exitMultipleUpdateStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitMultipleUpdateStatement) {
            return visitor.visitMultipleUpdateStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OrderByClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ORDER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ORDER, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BY, 0)!;
    }
    public orderByExpression(): OrderByExpressionContext[];
    public orderByExpression(i: number): OrderByExpressionContext | null;
    public orderByExpression(i?: number): OrderByExpressionContext[] | OrderByExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(OrderByExpressionContext);
        }

        return this.getRuleContext(i, OrderByExpressionContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_orderByClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterOrderByClause) {
             listener.enterOrderByClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitOrderByClause) {
             listener.exitOrderByClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitOrderByClause) {
            return visitor.visitOrderByClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OrderByExpressionContext extends antlr.ParserRuleContext {
    public _order?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public KW_ASC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ASC, 0);
    }
    public KW_DESC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DESC, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_orderByExpression;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterOrderByExpression) {
             listener.enterOrderByExpression(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitOrderByExpression) {
             listener.exitOrderByExpression(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitOrderByExpression) {
            return visitor.visitOrderByExpression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableSourcesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public tableSource(): TableSourceContext[];
    public tableSource(i: number): TableSourceContext | null;
    public tableSource(i?: number): TableSourceContext[] | TableSourceContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TableSourceContext);
        }

        return this.getRuleContext(i, TableSourceContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tableSources;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableSources) {
             listener.enterTableSources(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableSources) {
             listener.exitTableSources(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableSources) {
            return visitor.visitTableSources(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableSourceContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tableSource;
    }
    public override copyFrom(ctx: TableSourceContext): void {
        super.copyFrom(ctx);
    }
}
export class TableJsonContext extends TableSourceContext {
    public constructor(ctx: TableSourceContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public jsonTable(): JsonTableContext {
        return this.getRuleContext(0, JsonTableContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableJson) {
             listener.enterTableJson(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableJson) {
             listener.exitTableJson(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableJson) {
            return visitor.visitTableJson(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableSourceNestedContext extends TableSourceContext {
    public constructor(ctx: TableSourceContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public tableSourceItem(): TableSourceItemContext {
        return this.getRuleContext(0, TableSourceItemContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public joinPart(): JoinPartContext[];
    public joinPart(i: number): JoinPartContext | null;
    public joinPart(i?: number): JoinPartContext[] | JoinPartContext | null {
        if (i === undefined) {
            return this.getRuleContexts(JoinPartContext);
        }

        return this.getRuleContext(i, JoinPartContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableSourceNested) {
             listener.enterTableSourceNested(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableSourceNested) {
             listener.exitTableSourceNested(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableSourceNested) {
            return visitor.visitTableSourceNested(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableSourceBaseContext extends TableSourceContext {
    public constructor(ctx: TableSourceContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public tableSourceItem(): TableSourceItemContext {
        return this.getRuleContext(0, TableSourceItemContext)!;
    }
    public joinPart(): JoinPartContext[];
    public joinPart(i: number): JoinPartContext | null;
    public joinPart(i?: number): JoinPartContext[] | JoinPartContext | null {
        if (i === undefined) {
            return this.getRuleContexts(JoinPartContext);
        }

        return this.getRuleContext(i, JoinPartContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableSourceBase) {
             listener.enterTableSourceBase(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableSourceBase) {
             listener.exitTableSourceBase(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableSourceBase) {
            return visitor.visitTableSourceBase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableSourceItemContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tableSourceItem;
    }
    public override copyFrom(ctx: TableSourceItemContext): void {
        super.copyFrom(ctx);
    }
}
export class SubqueryTableItemContext extends TableSourceItemContext {
    public _parenthesisSubquery?: SelectStatementContext;
    public _alias?: UidContext;
    public constructor(ctx: TableSourceItemContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public selectStatement(): SelectStatementContext | null {
        return this.getRuleContext(0, SelectStatementContext);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public KW_LATERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LATERAL, 0);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public fullColumnNames(): FullColumnNamesContext | null {
        return this.getRuleContext(0, FullColumnNamesContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSubqueryTableItem) {
             listener.enterSubqueryTableItem(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSubqueryTableItem) {
             listener.exitSubqueryTableItem(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSubqueryTableItem) {
            return visitor.visitSubqueryTableItem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AtomTableItemContext extends TableSourceItemContext {
    public _alias?: UidContext;
    public constructor(ctx: TableSourceItemContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_PARTITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTITION, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public indexHint(): IndexHintContext[];
    public indexHint(i: number): IndexHintContext | null;
    public indexHint(i?: number): IndexHintContext[] | IndexHintContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IndexHintContext);
        }

        return this.getRuleContext(i, IndexHintContext);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAtomTableItem) {
             listener.enterAtomTableItem(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAtomTableItem) {
             listener.exitAtomTableItem(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAtomTableItem) {
            return visitor.visitAtomTableItem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TableSourcesItemContext extends TableSourceItemContext {
    public constructor(ctx: TableSourceItemContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public tableSources(): TableSourcesContext {
        return this.getRuleContext(0, TableSourcesContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableSourcesItem) {
             listener.enterTableSourcesItem(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableSourcesItem) {
             listener.exitTableSourcesItem(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableSourcesItem) {
            return visitor.visitTableSourcesItem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FullColumnNamesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public columnNames(): ColumnNamesContext {
        return this.getRuleContext(0, ColumnNamesContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_fullColumnNames;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFullColumnNames) {
             listener.enterFullColumnNames(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFullColumnNames) {
             listener.exitFullColumnNames(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFullColumnNames) {
            return visitor.visitFullColumnNames(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IndexHintContext extends antlr.ParserRuleContext {
    public _indexHintAction?: Token | null;
    public _keyFormat?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_USE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USE, 0);
    }
    public KW_IGNORE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IGNORE, 0);
    }
    public KW_FORCE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FORCE, 0);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEX, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOR, 0);
    }
    public indexHintType(): IndexHintTypeContext | null {
        return this.getRuleContext(0, IndexHintTypeContext);
    }
    public indexNames(): IndexNamesContext | null {
        return this.getRuleContext(0, IndexNamesContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_indexHint;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIndexHint) {
             listener.enterIndexHint(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIndexHint) {
             listener.exitIndexHint(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndexHint) {
            return visitor.visitIndexHint(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IndexHintTypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_JOIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_JOIN, 0);
    }
    public KW_ORDER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ORDER, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BY, 0);
    }
    public KW_GROUP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GROUP, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_indexHintType;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIndexHintType) {
             listener.enterIndexHintType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIndexHintType) {
             listener.exitIndexHintType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndexHintType) {
            return visitor.visitIndexHintType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class JoinPartContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_joinPart;
    }
    public override copyFrom(ctx: JoinPartContext): void {
        super.copyFrom(ctx);
    }
}
export class InnerJoinContext extends JoinPartContext {
    public constructor(ctx: JoinPartContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_JOIN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_JOIN, 0)!;
    }
    public tableSourceItem(): TableSourceItemContext {
        return this.getRuleContext(0, TableSourceItemContext)!;
    }
    public KW_LATERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LATERAL, 0);
    }
    public joinSpec(): JoinSpecContext[];
    public joinSpec(i: number): JoinSpecContext | null;
    public joinSpec(i?: number): JoinSpecContext[] | JoinSpecContext | null {
        if (i === undefined) {
            return this.getRuleContexts(JoinSpecContext);
        }

        return this.getRuleContext(i, JoinSpecContext);
    }
    public KW_INNER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INNER, 0);
    }
    public KW_CROSS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CROSS, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterInnerJoin) {
             listener.enterInnerJoin(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitInnerJoin) {
             listener.exitInnerJoin(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitInnerJoin) {
            return visitor.visitInnerJoin(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class NaturalJoinContext extends JoinPartContext {
    public constructor(ctx: JoinPartContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_NATURAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_NATURAL, 0)!;
    }
    public KW_JOIN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_JOIN, 0)!;
    }
    public tableSourceItem(): TableSourceItemContext {
        return this.getRuleContext(0, TableSourceItemContext)!;
    }
    public KW_INNER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INNER, 0);
    }
    public KW_LEFT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LEFT, 0);
    }
    public KW_RIGHT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RIGHT, 0);
    }
    public KW_OUTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OUTER, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterNaturalJoin) {
             listener.enterNaturalJoin(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitNaturalJoin) {
             listener.exitNaturalJoin(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitNaturalJoin) {
            return visitor.visitNaturalJoin(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class OuterJoinContext extends JoinPartContext {
    public constructor(ctx: JoinPartContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_JOIN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_JOIN, 0)!;
    }
    public tableSourceItem(): TableSourceItemContext {
        return this.getRuleContext(0, TableSourceItemContext)!;
    }
    public KW_LEFT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LEFT, 0);
    }
    public KW_RIGHT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RIGHT, 0);
    }
    public KW_OUTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OUTER, 0);
    }
    public KW_LATERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LATERAL, 0);
    }
    public joinSpec(): JoinSpecContext[];
    public joinSpec(i: number): JoinSpecContext | null;
    public joinSpec(i?: number): JoinSpecContext[] | JoinSpecContext | null {
        if (i === undefined) {
            return this.getRuleContexts(JoinSpecContext);
        }

        return this.getRuleContext(i, JoinSpecContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterOuterJoin) {
             listener.enterOuterJoin(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitOuterJoin) {
             listener.exitOuterJoin(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitOuterJoin) {
            return visitor.visitOuterJoin(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class StraightJoinContext extends JoinPartContext {
    public constructor(ctx: JoinPartContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_STRAIGHT_JOIN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_STRAIGHT_JOIN, 0)!;
    }
    public tableSourceItem(): TableSourceItemContext {
        return this.getRuleContext(0, TableSourceItemContext)!;
    }
    public joinSpec(): JoinSpecContext[];
    public joinSpec(i: number): JoinSpecContext | null;
    public joinSpec(i?: number): JoinSpecContext[] | JoinSpecContext | null {
        if (i === undefined) {
            return this.getRuleContexts(JoinSpecContext);
        }

        return this.getRuleContext(i, JoinSpecContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterStraightJoin) {
             listener.enterStraightJoin(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitStraightJoin) {
             listener.exitStraightJoin(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitStraightJoin) {
            return visitor.visitStraightJoin(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class JoinSpecContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ON, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USING, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public columnNames(): ColumnNamesContext | null {
        return this.getRuleContext(0, ColumnNamesContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_joinSpec;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterJoinSpec) {
             listener.enterJoinSpec(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitJoinSpec) {
             listener.exitJoinSpec(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitJoinSpec) {
            return visitor.visitJoinSpec(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class QueryExpressionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public querySpecification(): QuerySpecificationContext | null {
        return this.getRuleContext(0, QuerySpecificationContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public queryExpression(): QueryExpressionContext | null {
        return this.getRuleContext(0, QueryExpressionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_queryExpression;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterQueryExpression) {
             listener.enterQueryExpression(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitQueryExpression) {
             listener.exitQueryExpression(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitQueryExpression) {
            return visitor.visitQueryExpression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class QuerySpecificationContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SELECT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SELECT, 0)!;
    }
    public selectElements(): SelectElementsContext {
        return this.getRuleContext(0, SelectElementsContext)!;
    }
    public fromClause(): FromClauseContext {
        return this.getRuleContext(0, FromClauseContext)!;
    }
    public selectSpec(): SelectSpecContext[];
    public selectSpec(i: number): SelectSpecContext | null;
    public selectSpec(i?: number): SelectSpecContext[] | SelectSpecContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SelectSpecContext);
        }

        return this.getRuleContext(i, SelectSpecContext);
    }
    public intoClause(): IntoClauseContext[];
    public intoClause(i: number): IntoClauseContext | null;
    public intoClause(i?: number): IntoClauseContext[] | IntoClauseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IntoClauseContext);
        }

        return this.getRuleContext(i, IntoClauseContext);
    }
    public groupByClause(): GroupByClauseContext | null {
        return this.getRuleContext(0, GroupByClauseContext);
    }
    public havingClause(): HavingClauseContext | null {
        return this.getRuleContext(0, HavingClauseContext);
    }
    public windowClause(): WindowClauseContext | null {
        return this.getRuleContext(0, WindowClauseContext);
    }
    public orderByClause(): OrderByClauseContext | null {
        return this.getRuleContext(0, OrderByClauseContext);
    }
    public limitClause(): LimitClauseContext | null {
        return this.getRuleContext(0, LimitClauseContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_querySpecification;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterQuerySpecification) {
             listener.enterQuerySpecification(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitQuerySpecification) {
             listener.exitQuerySpecification(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitQuerySpecification) {
            return visitor.visitQuerySpecification(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UnionStatementContext extends antlr.ParserRuleContext {
    public _unionType?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UNION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UNION, 0)!;
    }
    public querySpecification(): QuerySpecificationContext | null {
        return this.getRuleContext(0, QuerySpecificationContext);
    }
    public queryExpression(): QueryExpressionContext | null {
        return this.getRuleContext(0, QueryExpressionContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public KW_DISTINCT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISTINCT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_unionStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUnionStatement) {
             listener.enterUnionStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUnionStatement) {
             listener.exitUnionStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUnionStatement) {
            return visitor.visitUnionStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LateralStatementContext extends antlr.ParserRuleContext {
    public _alias?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LATERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LATERAL, 0)!;
    }
    public querySpecification(): QuerySpecificationContext | null {
        return this.getRuleContext(0, QuerySpecificationContext);
    }
    public queryExpression(): QueryExpressionContext | null {
        return this.getRuleContext(0, QueryExpressionContext);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_lateralStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLateralStatement) {
             listener.enterLateralStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLateralStatement) {
             listener.exitLateralStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLateralStatement) {
            return visitor.visitLateralStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class JsonTableContext extends antlr.ParserRuleContext {
    public _alias?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_JSON_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_JSON_TABLE, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode[];
    public LR_BRACKET(i: number): antlr.TerminalNode | null;
    public LR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.LR_BRACKET, i);
    	}
    }
    public STRING_LITERAL(): antlr.TerminalNode[];
    public STRING_LITERAL(i: number): antlr.TerminalNode | null;
    public STRING_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STRING_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.STRING_LITERAL, i);
    	}
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.COMMA, 0)!;
    }
    public KW_COLUMNS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COLUMNS, 0)!;
    }
    public jsonColumnList(): JsonColumnListContext {
        return this.getRuleContext(0, JsonColumnListContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode[];
    public RR_BRACKET(i: number): antlr.TerminalNode | null;
    public RR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.RR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.RR_BRACKET, i);
    	}
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_jsonTable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterJsonTable) {
             listener.enterJsonTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitJsonTable) {
             listener.exitJsonTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitJsonTable) {
            return visitor.visitJsonTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class JsonColumnListContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public jsonColumn(): JsonColumnContext[];
    public jsonColumn(i: number): JsonColumnContext | null;
    public jsonColumn(i?: number): JsonColumnContext[] | JsonColumnContext | null {
        if (i === undefined) {
            return this.getRuleContexts(JsonColumnContext);
        }

        return this.getRuleContext(i, JsonColumnContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_jsonColumnList;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterJsonColumnList) {
             listener.enterJsonColumnList(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitJsonColumnList) {
             listener.exitJsonColumnList(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitJsonColumnList) {
            return visitor.visitJsonColumnList(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class JsonColumnContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public columnName(): ColumnNameContext | null {
        return this.getRuleContext(0, ColumnNameContext);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOR, 0);
    }
    public KW_ORDINALITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ORDINALITY, 0);
    }
    public dataType(): DataTypeContext | null {
        return this.getRuleContext(0, DataTypeContext);
    }
    public KW_PATH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PATH, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_EXISTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXISTS, 0);
    }
    public jsonOnEmpty(): JsonOnEmptyContext | null {
        return this.getRuleContext(0, JsonOnEmptyContext);
    }
    public jsonOnError(): JsonOnErrorContext | null {
        return this.getRuleContext(0, JsonOnErrorContext);
    }
    public KW_NESTED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NESTED, 0);
    }
    public KW_COLUMNS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMNS, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public jsonColumnList(): JsonColumnListContext | null {
        return this.getRuleContext(0, JsonColumnListContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_jsonColumn;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterJsonColumn) {
             listener.enterJsonColumn(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitJsonColumn) {
             listener.exitJsonColumn(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitJsonColumn) {
            return visitor.visitJsonColumn(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class JsonOnEmptyContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ON, 0)!;
    }
    public KW_EMPTY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EMPTY, 0)!;
    }
    public KW_NULL_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NULL_LITERAL, 0);
    }
    public KW_ERROR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ERROR, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public defaultValue(): DefaultValueContext | null {
        return this.getRuleContext(0, DefaultValueContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_jsonOnEmpty;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterJsonOnEmpty) {
             listener.enterJsonOnEmpty(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitJsonOnEmpty) {
             listener.exitJsonOnEmpty(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitJsonOnEmpty) {
            return visitor.visitJsonOnEmpty(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class JsonOnErrorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ON, 0)!;
    }
    public KW_ERROR(): antlr.TerminalNode[];
    public KW_ERROR(i: number): antlr.TerminalNode | null;
    public KW_ERROR(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ERROR);
    	} else {
    		return this.getToken(MySqlParser.KW_ERROR, i);
    	}
    }
    public KW_NULL_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NULL_LITERAL, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public defaultValue(): DefaultValueContext | null {
        return this.getRuleContext(0, DefaultValueContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_jsonOnError;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterJsonOnError) {
             listener.enterJsonOnError(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitJsonOnError) {
             listener.exitJsonOnError(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitJsonOnError) {
            return visitor.visitJsonOnError(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SelectSpecContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public KW_DISTINCT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISTINCT, 0);
    }
    public KW_DISTINCTROW(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISTINCTROW, 0);
    }
    public KW_HIGH_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HIGH_PRIORITY, 0);
    }
    public KW_STRAIGHT_JOIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STRAIGHT_JOIN, 0);
    }
    public KW_SQL_SMALL_RESULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_SMALL_RESULT, 0);
    }
    public KW_SQL_BIG_RESULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_BIG_RESULT, 0);
    }
    public KW_SQL_BUFFER_RESULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_BUFFER_RESULT, 0);
    }
    public KW_SQL_CACHE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_CACHE, 0);
    }
    public KW_SQL_NO_CACHE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_NO_CACHE, 0);
    }
    public KW_SQL_CALC_FOUND_ROWS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_CALC_FOUND_ROWS, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_selectSpec;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectSpec) {
             listener.enterSelectSpec(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectSpec) {
             listener.exitSelectSpec(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectSpec) {
            return visitor.visitSelectSpec(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SelectElementsContext extends antlr.ParserRuleContext {
    public _star?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public selectElement(): SelectElementContext[];
    public selectElement(i: number): SelectElementContext | null;
    public selectElement(i?: number): SelectElementContext[] | SelectElementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SelectElementContext);
        }

        return this.getRuleContext(i, SelectElementContext);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STAR, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_selectElements;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectElements) {
             listener.enterSelectElements(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectElements) {
             listener.exitSelectElements(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectElements) {
            return visitor.visitSelectElements(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SelectElementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_selectElement;
    }
    public override copyFrom(ctx: SelectElementContext): void {
        super.copyFrom(ctx);
    }
}
export class SelectExpressionElementContext extends SelectElementContext {
    public _alias?: UidContext;
    public constructor(ctx: SelectElementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public LOCAL_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LOCAL_ID, 0);
    }
    public VAR_ASSIGN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.VAR_ASSIGN, 0);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectExpressionElement) {
             listener.enterSelectExpressionElement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectExpressionElement) {
             listener.exitSelectExpressionElement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectExpressionElement) {
            return visitor.visitSelectExpressionElement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SelectFunctionElementContext extends SelectElementContext {
    public _alias?: UidContext;
    public constructor(ctx: SelectElementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public functionCall(): FunctionCallContext {
        return this.getRuleContext(0, FunctionCallContext)!;
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectFunctionElement) {
             listener.enterSelectFunctionElement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectFunctionElement) {
             listener.exitSelectFunctionElement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectFunctionElement) {
            return visitor.visitSelectFunctionElement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SelectStarElementContext extends SelectElementContext {
    public _select_element?: FullIdContext;
    public constructor(ctx: SelectElementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public DOT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.DOT, 0)!;
    }
    public STAR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STAR, 0)!;
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectStarElement) {
             listener.enterSelectStarElement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectStarElement) {
             listener.exitSelectStarElement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectStarElement) {
            return visitor.visitSelectStarElement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SelectColumnElementContext extends SelectElementContext {
    public _alias?: UidContext;
    public constructor(ctx: SelectElementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public columnName(): ColumnNameContext {
        return this.getRuleContext(0, ColumnNameContext)!;
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectColumnElement) {
             listener.enterSelectColumnElement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectColumnElement) {
             listener.exitSelectColumnElement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectColumnElement) {
            return visitor.visitSelectColumnElement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IntoClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_intoClause;
    }
    public override copyFrom(ctx: IntoClauseContext): void {
        super.copyFrom(ctx);
    }
}
export class SelectIntoVariablesContext extends IntoClauseContext {
    public constructor(ctx: IntoClauseContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INTO, 0)!;
    }
    public assignmentField(): AssignmentFieldContext[];
    public assignmentField(i: number): AssignmentFieldContext | null;
    public assignmentField(i?: number): AssignmentFieldContext[] | AssignmentFieldContext | null {
        if (i === undefined) {
            return this.getRuleContexts(AssignmentFieldContext);
        }

        return this.getRuleContext(i, AssignmentFieldContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectIntoVariables) {
             listener.enterSelectIntoVariables(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectIntoVariables) {
             listener.exitSelectIntoVariables(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectIntoVariables) {
            return visitor.visitSelectIntoVariables(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SelectIntoTextFileContext extends IntoClauseContext {
    public _filename?: Token | null;
    public _charset?: CharsetNameContext;
    public _fieldsFormat?: Token | null;
    public constructor(ctx: IntoClauseContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_INTO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INTO, 0);
    }
    public KW_OUTFILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OUTFILE, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_CHARACTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARACTER, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET, 0);
    }
    public KW_LINES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LINES, 0);
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public KW_FIELDS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIELDS, 0);
    }
    public KW_COLUMNS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMNS, 0);
    }
    public selectFieldsInto(): SelectFieldsIntoContext[];
    public selectFieldsInto(i: number): SelectFieldsIntoContext | null;
    public selectFieldsInto(i?: number): SelectFieldsIntoContext[] | SelectFieldsIntoContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SelectFieldsIntoContext);
        }

        return this.getRuleContext(i, SelectFieldsIntoContext);
    }
    public selectLinesInto(): SelectLinesIntoContext[];
    public selectLinesInto(i: number): SelectLinesIntoContext | null;
    public selectLinesInto(i?: number): SelectLinesIntoContext[] | SelectLinesIntoContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SelectLinesIntoContext);
        }

        return this.getRuleContext(i, SelectLinesIntoContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectIntoTextFile) {
             listener.enterSelectIntoTextFile(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectIntoTextFile) {
             listener.exitSelectIntoTextFile(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectIntoTextFile) {
            return visitor.visitSelectIntoTextFile(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SelectIntoDumpFileContext extends IntoClauseContext {
    public constructor(ctx: IntoClauseContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INTO, 0)!;
    }
    public KW_DUMPFILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DUMPFILE, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectIntoDumpFile) {
             listener.enterSelectIntoDumpFile(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectIntoDumpFile) {
             listener.exitSelectIntoDumpFile(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectIntoDumpFile) {
            return visitor.visitSelectIntoDumpFile(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SelectFieldsIntoContext extends antlr.ParserRuleContext {
    public _terminationField?: Token | null;
    public _enclosion?: Token | null;
    public _escaping?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TERMINATED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TERMINATED, 0);
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BY, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public KW_ENCLOSED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENCLOSED, 0);
    }
    public KW_OPTIONALLY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OPTIONALLY, 0);
    }
    public KW_ESCAPED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ESCAPED, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_selectFieldsInto;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectFieldsInto) {
             listener.enterSelectFieldsInto(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectFieldsInto) {
             listener.exitSelectFieldsInto(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectFieldsInto) {
            return visitor.visitSelectFieldsInto(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SelectLinesIntoContext extends antlr.ParserRuleContext {
    public _starting?: Token | null;
    public _terminationLine?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_STARTING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STARTING, 0);
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BY, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public KW_TERMINATED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TERMINATED, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_selectLinesInto;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSelectLinesInto) {
             listener.enterSelectLinesInto(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSelectLinesInto) {
             listener.exitSelectLinesInto(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSelectLinesInto) {
            return visitor.visitSelectLinesInto(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FromClauseContext extends antlr.ParserRuleContext {
    public _whereExpr?: ExpressionContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FROM, 0);
    }
    public tableSources(): TableSourcesContext | null {
        return this.getRuleContext(0, TableSourcesContext);
    }
    public KW_WHERE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WHERE, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_fromClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFromClause) {
             listener.enterFromClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFromClause) {
             listener.exitFromClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFromClause) {
            return visitor.visitFromClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class GroupByClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GROUP, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BY, 0)!;
    }
    public groupByItem(): GroupByItemContext[];
    public groupByItem(i: number): GroupByItemContext | null;
    public groupByItem(i?: number): GroupByItemContext[] | GroupByItemContext | null {
        if (i === undefined) {
            return this.getRuleContexts(GroupByItemContext);
        }

        return this.getRuleContext(i, GroupByItemContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public KW_ROLLUP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROLLUP, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_groupByClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterGroupByClause) {
             listener.enterGroupByClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitGroupByClause) {
             listener.exitGroupByClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitGroupByClause) {
            return visitor.visitGroupByClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class HavingClauseContext extends antlr.ParserRuleContext {
    public _havingExpr?: ExpressionContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_HAVING(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_HAVING, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_havingClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHavingClause) {
             listener.enterHavingClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHavingClause) {
             listener.exitHavingClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHavingClause) {
            return visitor.visitHavingClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class WindowClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WINDOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_WINDOW, 0)!;
    }
    public windowName(): WindowNameContext[];
    public windowName(i: number): WindowNameContext | null;
    public windowName(i?: number): WindowNameContext[] | WindowNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(WindowNameContext);
        }

        return this.getRuleContext(i, WindowNameContext);
    }
    public KW_AS(): antlr.TerminalNode[];
    public KW_AS(i: number): antlr.TerminalNode | null;
    public KW_AS(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_AS);
    	} else {
    		return this.getToken(MySqlParser.KW_AS, i);
    	}
    }
    public LR_BRACKET(): antlr.TerminalNode[];
    public LR_BRACKET(i: number): antlr.TerminalNode | null;
    public LR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.LR_BRACKET, i);
    	}
    }
    public windowSpec(): WindowSpecContext[];
    public windowSpec(i: number): WindowSpecContext | null;
    public windowSpec(i?: number): WindowSpecContext[] | WindowSpecContext | null {
        if (i === undefined) {
            return this.getRuleContexts(WindowSpecContext);
        }

        return this.getRuleContext(i, WindowSpecContext);
    }
    public RR_BRACKET(): antlr.TerminalNode[];
    public RR_BRACKET(i: number): antlr.TerminalNode | null;
    public RR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.RR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.RR_BRACKET, i);
    	}
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_windowClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterWindowClause) {
             listener.enterWindowClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitWindowClause) {
             listener.exitWindowClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitWindowClause) {
            return visitor.visitWindowClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class GroupByItemContext extends antlr.ParserRuleContext {
    public _order?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public KW_ASC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ASC, 0);
    }
    public KW_DESC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DESC, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_groupByItem;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterGroupByItem) {
             listener.enterGroupByItem(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitGroupByItem) {
             listener.exitGroupByItem(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitGroupByItem) {
            return visitor.visitGroupByItem(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LimitClauseContext extends antlr.ParserRuleContext {
    public _offset?: LimitClauseAtomContext;
    public _limit?: LimitClauseAtomContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LIMIT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LIMIT, 0)!;
    }
    public KW_OFFSET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OFFSET, 0);
    }
    public limitClauseAtom(): LimitClauseAtomContext[];
    public limitClauseAtom(i: number): LimitClauseAtomContext | null;
    public limitClauseAtom(i?: number): LimitClauseAtomContext[] | LimitClauseAtomContext | null {
        if (i === undefined) {
            return this.getRuleContexts(LimitClauseAtomContext);
        }

        return this.getRuleContext(i, LimitClauseAtomContext);
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.COMMA, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_limitClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLimitClause) {
             listener.enterLimitClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLimitClause) {
             listener.exitLimitClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLimitClause) {
            return visitor.visitLimitClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LimitClauseAtomContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public mysqlVariable(): MysqlVariableContext | null {
        return this.getRuleContext(0, MysqlVariableContext);
    }
    public simpleId(): SimpleIdContext | null {
        return this.getRuleContext(0, SimpleIdContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_limitClauseAtom;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLimitClauseAtom) {
             listener.enterLimitClauseAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLimitClauseAtom) {
             listener.exitLimitClauseAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLimitClauseAtom) {
            return visitor.visitLimitClauseAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class StartTransactionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_START(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_START, 0)!;
    }
    public KW_TRANSACTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TRANSACTION, 0)!;
    }
    public transactionMode(): TransactionModeContext[];
    public transactionMode(i: number): TransactionModeContext | null;
    public transactionMode(i?: number): TransactionModeContext[] | TransactionModeContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TransactionModeContext);
        }

        return this.getRuleContext(i, TransactionModeContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_startTransaction;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterStartTransaction) {
             listener.enterStartTransaction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitStartTransaction) {
             listener.exitStartTransaction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitStartTransaction) {
            return visitor.visitStartTransaction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class BeginWorkContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BEGIN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BEGIN, 0)!;
    }
    public KW_WORK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WORK, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_beginWork;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterBeginWork) {
             listener.enterBeginWork(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitBeginWork) {
             listener.exitBeginWork(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitBeginWork) {
            return visitor.visitBeginWork(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CommitWorkContext extends antlr.ParserRuleContext {
    public _nochain?: Token | null;
    public _norelease?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_COMMIT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COMMIT, 0)!;
    }
    public KW_WORK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WORK, 0);
    }
    public KW_AND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AND, 0);
    }
    public KW_CHAIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHAIN, 0);
    }
    public KW_RELEASE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELEASE, 0);
    }
    public KW_NO(): antlr.TerminalNode[];
    public KW_NO(i: number): antlr.TerminalNode | null;
    public KW_NO(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_NO);
    	} else {
    		return this.getToken(MySqlParser.KW_NO, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_commitWork;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCommitWork) {
             listener.enterCommitWork(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCommitWork) {
             listener.exitCommitWork(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCommitWork) {
            return visitor.visitCommitWork(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RollbackWorkContext extends antlr.ParserRuleContext {
    public _nochain?: Token | null;
    public _norelease?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ROLLBACK(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ROLLBACK, 0)!;
    }
    public KW_WORK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WORK, 0);
    }
    public KW_AND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AND, 0);
    }
    public KW_CHAIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHAIN, 0);
    }
    public KW_RELEASE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELEASE, 0);
    }
    public KW_NO(): antlr.TerminalNode[];
    public KW_NO(i: number): antlr.TerminalNode | null;
    public KW_NO(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_NO);
    	} else {
    		return this.getToken(MySqlParser.KW_NO, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_rollbackWork;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRollbackWork) {
             listener.enterRollbackWork(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRollbackWork) {
             listener.exitRollbackWork(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRollbackWork) {
            return visitor.visitRollbackWork(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SavepointStatementContext extends antlr.ParserRuleContext {
    public _identifier?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SAVEPOINT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SAVEPOINT, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_savepointStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSavepointStatement) {
             listener.enterSavepointStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSavepointStatement) {
             listener.exitSavepointStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSavepointStatement) {
            return visitor.visitSavepointStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RollbackStatementContext extends antlr.ParserRuleContext {
    public _identifier?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ROLLBACK(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ROLLBACK, 0)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TO, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public KW_WORK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WORK, 0);
    }
    public KW_SAVEPOINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SAVEPOINT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_rollbackStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRollbackStatement) {
             listener.enterRollbackStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRollbackStatement) {
             listener.exitRollbackStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRollbackStatement) {
            return visitor.visitRollbackStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReleaseStatementContext extends antlr.ParserRuleContext {
    public _identifier?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RELEASE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RELEASE, 0)!;
    }
    public KW_SAVEPOINT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SAVEPOINT, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_releaseStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterReleaseStatement) {
             listener.enterReleaseStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitReleaseStatement) {
             listener.exitReleaseStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitReleaseStatement) {
            return visitor.visitReleaseStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LockTablesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LOCK(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LOCK, 0)!;
    }
    public lockTableElement(): LockTableElementContext[];
    public lockTableElement(i: number): LockTableElementContext | null;
    public lockTableElement(i?: number): LockTableElementContext[] | LockTableElementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(LockTableElementContext);
        }

        return this.getRuleContext(i, LockTableElementContext);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE, 0);
    }
    public KW_TABLES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLES, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_lockTables;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLockTables) {
             listener.enterLockTables(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLockTables) {
             listener.exitLockTables(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLockTables) {
            return visitor.visitLockTables(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UnlockTablesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UNLOCK(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UNLOCK, 0)!;
    }
    public KW_TABLES(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLES, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_unlockTables;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUnlockTables) {
             listener.enterUnlockTables(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUnlockTables) {
             listener.exitUnlockTables(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUnlockTables) {
            return visitor.visitUnlockTables(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SetAutocommitStatementContext extends antlr.ParserRuleContext {
    public _autocommitValue?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public KW_AUTOCOMMIT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AUTOCOMMIT, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public ZERO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ZERO_DECIMAL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_setAutocommitStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetAutocommitStatement) {
             listener.enterSetAutocommitStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetAutocommitStatement) {
             listener.exitSetAutocommitStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetAutocommitStatement) {
            return visitor.visitSetAutocommitStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SetTransactionStatementContext extends antlr.ParserRuleContext {
    public _transactionContext?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public KW_TRANSACTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TRANSACTION, 0)!;
    }
    public transactionOption(): TransactionOptionContext[];
    public transactionOption(i: number): TransactionOptionContext | null;
    public transactionOption(i?: number): TransactionOptionContext[] | TransactionOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TransactionOptionContext);
        }

        return this.getRuleContext(i, TransactionOptionContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_GLOBAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GLOBAL, 0);
    }
    public KW_SESSION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SESSION, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_setTransactionStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetTransactionStatement) {
             listener.enterSetTransactionStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetTransactionStatement) {
             listener.exitSetTransactionStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetTransactionStatement) {
            return visitor.visitSetTransactionStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TransactionModeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public KW_CONSISTENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSISTENT, 0);
    }
    public KW_SNAPSHOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SNAPSHOT, 0);
    }
    public KW_READ(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_READ, 0);
    }
    public KW_WRITE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WRITE, 0);
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ONLY, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_transactionMode;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTransactionMode) {
             listener.enterTransactionMode(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTransactionMode) {
             listener.exitTransactionMode(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransactionMode) {
            return visitor.visitTransactionMode(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LockTableElementContext extends antlr.ParserRuleContext {
    public _alias?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public lockAction(): LockActionContext {
        return this.getRuleContext(0, LockActionContext)!;
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_lockTableElement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLockTableElement) {
             listener.enterLockTableElement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLockTableElement) {
             listener.exitLockTableElement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLockTableElement) {
            return visitor.visitLockTableElement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LockActionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_READ(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_READ, 0);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCAL, 0);
    }
    public KW_WRITE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WRITE, 0);
    }
    public KW_LOW_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOW_PRIORITY, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_lockAction;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLockAction) {
             listener.enterLockAction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLockAction) {
             listener.exitLockAction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLockAction) {
            return visitor.visitLockAction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TransactionOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ISOLATION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ISOLATION, 0);
    }
    public KW_LEVEL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LEVEL, 0);
    }
    public transactionLevel(): TransactionLevelContext | null {
        return this.getRuleContext(0, TransactionLevelContext);
    }
    public KW_READ(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_READ, 0);
    }
    public KW_WRITE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WRITE, 0);
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ONLY, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_transactionOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTransactionOption) {
             listener.enterTransactionOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTransactionOption) {
             listener.exitTransactionOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransactionOption) {
            return visitor.visitTransactionOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TransactionLevelContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REPEATABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPEATABLE, 0);
    }
    public KW_READ(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_READ, 0);
    }
    public KW_COMMITTED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMMITTED, 0);
    }
    public KW_UNCOMMITTED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNCOMMITTED, 0);
    }
    public KW_SERIALIZABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SERIALIZABLE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_transactionLevel;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTransactionLevel) {
             listener.enterTransactionLevel(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTransactionLevel) {
             listener.exitTransactionLevel(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransactionLevel) {
            return visitor.visitTransactionLevel(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ChangeMasterContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHANGE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CHANGE, 0)!;
    }
    public KW_MASTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_MASTER, 0)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TO, 0)!;
    }
    public masterOption(): MasterOptionContext[];
    public masterOption(i: number): MasterOptionContext | null;
    public masterOption(i?: number): MasterOptionContext[] | MasterOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(MasterOptionContext);
        }

        return this.getRuleContext(i, MasterOptionContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public channelOption(): ChannelOptionContext | null {
        return this.getRuleContext(0, ChannelOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_changeMaster;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterChangeMaster) {
             listener.enterChangeMaster(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitChangeMaster) {
             listener.exitChangeMaster(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitChangeMaster) {
            return visitor.visitChangeMaster(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ChangeReplicationFilterContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHANGE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CHANGE, 0)!;
    }
    public KW_REPLICATION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPLICATION, 0)!;
    }
    public KW_FILTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FILTER, 0)!;
    }
    public replicationFilter(): ReplicationFilterContext[];
    public replicationFilter(i: number): ReplicationFilterContext | null;
    public replicationFilter(i?: number): ReplicationFilterContext[] | ReplicationFilterContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ReplicationFilterContext);
        }

        return this.getRuleContext(i, ReplicationFilterContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public channelOption(): ChannelOptionContext | null {
        return this.getRuleContext(0, ChannelOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_changeReplicationFilter;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterChangeReplicationFilter) {
             listener.enterChangeReplicationFilter(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitChangeReplicationFilter) {
             listener.exitChangeReplicationFilter(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitChangeReplicationFilter) {
            return visitor.visitChangeReplicationFilter(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ChangeReplicationSourceContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHANGE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CHANGE, 0)!;
    }
    public KW_REPLICATION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPLICATION, 0)!;
    }
    public KW_SOURCE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SOURCE, 0)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TO, 0)!;
    }
    public replicationSourceOption(): ReplicationSourceOptionContext[];
    public replicationSourceOption(i: number): ReplicationSourceOptionContext | null;
    public replicationSourceOption(i?: number): ReplicationSourceOptionContext[] | ReplicationSourceOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ReplicationSourceOptionContext);
        }

        return this.getRuleContext(i, ReplicationSourceOptionContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public channelOption(): ChannelOptionContext | null {
        return this.getRuleContext(0, ChannelOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_changeReplicationSource;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterChangeReplicationSource) {
             listener.enterChangeReplicationSource(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitChangeReplicationSource) {
             listener.exitChangeReplicationSource(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitChangeReplicationSource) {
            return visitor.visitChangeReplicationSource(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PurgeBinaryLogsContext extends antlr.ParserRuleContext {
    public _purgeFormat?: Token | null;
    public _fileName?: Token | null;
    public _timeValue?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PURGE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PURGE, 0)!;
    }
    public KW_LOGS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LOGS, 0)!;
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINARY, 0);
    }
    public KW_MASTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER, 0);
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TO, 0);
    }
    public KW_BEFORE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BEFORE, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_purgeBinaryLogs;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPurgeBinaryLogs) {
             listener.enterPurgeBinaryLogs(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPurgeBinaryLogs) {
             listener.exitPurgeBinaryLogs(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPurgeBinaryLogs) {
            return visitor.visitPurgeBinaryLogs(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class StartSlaveOrReplicaContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_START(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_START, 0)!;
    }
    public KW_SLAVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SLAVE, 0);
    }
    public KW_REPLICA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICA, 0);
    }
    public threadType(): ThreadTypeContext[];
    public threadType(i: number): ThreadTypeContext | null;
    public threadType(i?: number): ThreadTypeContext[] | ThreadTypeContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ThreadTypeContext);
        }

        return this.getRuleContext(i, ThreadTypeContext);
    }
    public KW_UNTIL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNTIL, 0);
    }
    public untilOption(): UntilOptionContext | null {
        return this.getRuleContext(0, UntilOptionContext);
    }
    public connectionOptions(): ConnectionOptionsContext[];
    public connectionOptions(i: number): ConnectionOptionsContext | null;
    public connectionOptions(i?: number): ConnectionOptionsContext[] | ConnectionOptionsContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ConnectionOptionsContext);
        }

        return this.getRuleContext(i, ConnectionOptionsContext);
    }
    public channelOption(): ChannelOptionContext | null {
        return this.getRuleContext(0, ChannelOptionContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_startSlaveOrReplica;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterStartSlaveOrReplica) {
             listener.enterStartSlaveOrReplica(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitStartSlaveOrReplica) {
             listener.exitStartSlaveOrReplica(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitStartSlaveOrReplica) {
            return visitor.visitStartSlaveOrReplica(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class StopSlaveOrReplicaContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_STOP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_STOP, 0)!;
    }
    public KW_SLAVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SLAVE, 0);
    }
    public KW_REPLICA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICA, 0);
    }
    public threadType(): ThreadTypeContext[];
    public threadType(i: number): ThreadTypeContext | null;
    public threadType(i?: number): ThreadTypeContext[] | ThreadTypeContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ThreadTypeContext);
        }

        return this.getRuleContext(i, ThreadTypeContext);
    }
    public channelOption(): ChannelOptionContext | null {
        return this.getRuleContext(0, ChannelOptionContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_stopSlaveOrReplica;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterStopSlaveOrReplica) {
             listener.enterStopSlaveOrReplica(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitStopSlaveOrReplica) {
             listener.exitStopSlaveOrReplica(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitStopSlaveOrReplica) {
            return visitor.visitStopSlaveOrReplica(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class StartGroupReplicationContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_START(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_START, 0)!;
    }
    public KW_GROUP_REPLICATION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GROUP_REPLICATION, 0)!;
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USER, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public STRING_LITERAL(): antlr.TerminalNode[];
    public STRING_LITERAL(i: number): antlr.TerminalNode | null;
    public STRING_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STRING_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.STRING_LITERAL, i);
    	}
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD, 0);
    }
    public KW_DEFAULT_AUTH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT_AUTH, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_startGroupReplication;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterStartGroupReplication) {
             listener.enterStartGroupReplication(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitStartGroupReplication) {
             listener.exitStartGroupReplication(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitStartGroupReplication) {
            return visitor.visitStartGroupReplication(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class StopGroupReplicationContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_STOP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_STOP, 0)!;
    }
    public KW_GROUP_REPLICATION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GROUP_REPLICATION, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_stopGroupReplication;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterStopGroupReplication) {
             listener.enterStopGroupReplication(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitStopGroupReplication) {
             listener.exitStopGroupReplication(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitStopGroupReplication) {
            return visitor.visitStopGroupReplication(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class MasterOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_masterOption;
    }
    public override copyFrom(ctx: MasterOptionContext): void {
        super.copyFrom(ctx);
    }
}
export class MasterStringOptionContext extends MasterOptionContext {
    public constructor(ctx: MasterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public stringMasterOption(): StringMasterOptionContext {
        return this.getRuleContext(0, StringMasterOptionContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterMasterStringOption) {
             listener.enterMasterStringOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitMasterStringOption) {
             listener.exitMasterStringOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitMasterStringOption) {
            return visitor.visitMasterStringOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class V8AddMasterOptionContext extends MasterOptionContext {
    public constructor(ctx: MasterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public v8NewMasterOption(): V8NewMasterOptionContext {
        return this.getRuleContext(0, V8NewMasterOptionContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterV8AddMasterOption) {
             listener.enterV8AddMasterOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitV8AddMasterOption) {
             listener.exitV8AddMasterOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitV8AddMasterOption) {
            return visitor.visitV8AddMasterOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class MasterBoolOptionContext extends MasterOptionContext {
    public _boolVal?: Token | null;
    public constructor(ctx: MasterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public boolMasterOption(): BoolMasterOptionContext {
        return this.getRuleContext(0, BoolMasterOptionContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public ZERO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ZERO_DECIMAL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterMasterBoolOption) {
             listener.enterMasterBoolOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitMasterBoolOption) {
             listener.exitMasterBoolOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitMasterBoolOption) {
            return visitor.visitMasterBoolOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class MasterUidListOptionContext extends MasterOptionContext {
    public _server_id?: UidContext;
    public constructor(ctx: MasterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_IGNORE_SERVER_IDS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IGNORE_SERVER_IDS, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterMasterUidListOption) {
             listener.enterMasterUidListOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitMasterUidListOption) {
             listener.exitMasterUidListOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitMasterUidListOption) {
            return visitor.visitMasterUidListOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class MasterDecimalOptionContext extends MasterOptionContext {
    public constructor(ctx: MasterOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public decimalMasterOption(): DecimalMasterOptionContext {
        return this.getRuleContext(0, DecimalMasterOptionContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterMasterDecimalOption) {
             listener.enterMasterDecimalOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitMasterDecimalOption) {
             listener.exitMasterDecimalOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitMasterDecimalOption) {
            return visitor.visitMasterDecimalOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class StringMasterOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_MASTER_BIND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_BIND, 0);
    }
    public KW_MASTER_HOST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_HOST, 0);
    }
    public KW_MASTER_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_USER, 0);
    }
    public KW_MASTER_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_PASSWORD, 0);
    }
    public KW_MASTER_LOG_FILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_LOG_FILE, 0);
    }
    public KW_RELAY_LOG_FILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELAY_LOG_FILE, 0);
    }
    public KW_MASTER_COMPRESSION_ALGORITHMS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_COMPRESSION_ALGORITHMS, 0);
    }
    public KW_MASTER_SSL_CA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_CA, 0);
    }
    public KW_MASTER_SSL_CAPATH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_CAPATH, 0);
    }
    public KW_MASTER_SSL_CERT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_CERT, 0);
    }
    public KW_MASTER_SSL_CRL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_CRL, 0);
    }
    public KW_MASTER_SSL_CRLPATH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_CRLPATH, 0);
    }
    public KW_MASTER_SSL_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_KEY, 0);
    }
    public KW_MASTER_SSL_CIPHER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_CIPHER, 0);
    }
    public KW_MASTER_TLS_VERSION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_TLS_VERSION, 0);
    }
    public KW_MASTER_TLS_CIPHERSUITES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_TLS_CIPHERSUITES, 0);
    }
    public KW_MASTER_PUBLIC_KEY_PATH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_PUBLIC_KEY_PATH, 0);
    }
    public KW_NETWORK_NAMESPACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NETWORK_NAMESPACE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_stringMasterOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterStringMasterOption) {
             listener.enterStringMasterOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitStringMasterOption) {
             listener.exitStringMasterOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitStringMasterOption) {
            return visitor.visitStringMasterOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DecimalMasterOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_MASTER_PORT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_PORT, 0);
    }
    public KW_MASTER_LOG_POS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_LOG_POS, 0);
    }
    public KW_RELAY_LOG_POS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELAY_LOG_POS, 0);
    }
    public KW_MASTER_HEARTBEAT_PERIOD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_HEARTBEAT_PERIOD, 0);
    }
    public KW_MASTER_CONNECT_RETRY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_CONNECT_RETRY, 0);
    }
    public KW_MASTER_RETRY_COUNT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_RETRY_COUNT, 0);
    }
    public KW_MASTER_DELAY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_DELAY, 0);
    }
    public KW_MASTER_ZSTD_COMPRESSION_LEVEL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_ZSTD_COMPRESSION_LEVEL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_decimalMasterOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDecimalMasterOption) {
             listener.enterDecimalMasterOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDecimalMasterOption) {
             listener.exitDecimalMasterOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecimalMasterOption) {
            return visitor.visitDecimalMasterOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class BoolMasterOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REQUIRE_ROW_FORMAT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REQUIRE_ROW_FORMAT, 0);
    }
    public KW_MASTER_AUTO_POSITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_AUTO_POSITION, 0);
    }
    public KW_SOURCE_CONNECTION_AUTO_FAILOVER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_CONNECTION_AUTO_FAILOVER, 0);
    }
    public KW_MASTER_SSL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL, 0);
    }
    public KW_MASTER_SSL_VERIFY_SERVER_CERT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_VERIFY_SERVER_CERT, 0);
    }
    public KW_GET_MASTER_PUBLIC_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GET_MASTER_PUBLIC_KEY, 0);
    }
    public KW_GTID_ONLY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GTID_ONLY, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_boolMasterOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterBoolMasterOption) {
             listener.enterBoolMasterOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitBoolMasterOption) {
             listener.exitBoolMasterOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitBoolMasterOption) {
            return visitor.visitBoolMasterOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class V8NewMasterOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PRIVILEGE_CHECKS_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRIVILEGE_CHECKS_USER, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_NULL_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NULL_LITERAL, 0);
    }
    public KW_REQUIRE_TABLE_PRIMARY_KEY_CHECK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REQUIRE_TABLE_PRIMARY_KEY_CHECK, 0);
    }
    public KW_STREAM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STREAM, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ON, 0);
    }
    public KW_OFF(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OFF, 0);
    }
    public KW_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, 0);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCAL, 0);
    }
    public gtuidSet(): GtuidSetContext | null {
        return this.getRuleContext(0, GtuidSetContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_v8NewMasterOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterV8NewMasterOption) {
             listener.enterV8NewMasterOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitV8NewMasterOption) {
             listener.exitV8NewMasterOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitV8NewMasterOption) {
            return visitor.visitV8NewMasterOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReplicationSourceOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_replicationSourceOption;
    }
    public override copyFrom(ctx: ReplicationSourceOptionContext): void {
        super.copyFrom(ctx);
    }
}
export class SourceBoolOptionContext extends ReplicationSourceOptionContext {
    public _boolVal?: Token | null;
    public constructor(ctx: ReplicationSourceOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public boolSourceOption(): BoolSourceOptionContext {
        return this.getRuleContext(0, BoolSourceOptionContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public ZERO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ZERO_DECIMAL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSourceBoolOption) {
             listener.enterSourceBoolOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSourceBoolOption) {
             listener.exitSourceBoolOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSourceBoolOption) {
            return visitor.visitSourceBoolOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SourceUidListOptionContext extends ReplicationSourceOptionContext {
    public _server_id?: UidContext;
    public constructor(ctx: ReplicationSourceOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_IGNORE_SERVER_IDS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IGNORE_SERVER_IDS, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSourceUidListOption) {
             listener.enterSourceUidListOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSourceUidListOption) {
             listener.exitSourceUidListOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSourceUidListOption) {
            return visitor.visitSourceUidListOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SourceOtherOptionContext extends ReplicationSourceOptionContext {
    public constructor(ctx: ReplicationSourceOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public otherSourceOption(): OtherSourceOptionContext {
        return this.getRuleContext(0, OtherSourceOptionContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSourceOtherOption) {
             listener.enterSourceOtherOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSourceOtherOption) {
             listener.exitSourceOtherOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSourceOtherOption) {
            return visitor.visitSourceOtherOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SourceStringOptionContext extends ReplicationSourceOptionContext {
    public constructor(ctx: ReplicationSourceOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public stringSourceOption(): StringSourceOptionContext {
        return this.getRuleContext(0, StringSourceOptionContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSourceStringOption) {
             listener.enterSourceStringOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSourceStringOption) {
             listener.exitSourceStringOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSourceStringOption) {
            return visitor.visitSourceStringOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SourceDecimalOptionContext extends ReplicationSourceOptionContext {
    public constructor(ctx: ReplicationSourceOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public decimalSourceOption(): DecimalSourceOptionContext {
        return this.getRuleContext(0, DecimalSourceOptionContext)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSourceDecimalOption) {
             listener.enterSourceDecimalOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSourceDecimalOption) {
             listener.exitSourceDecimalOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSourceDecimalOption) {
            return visitor.visitSourceDecimalOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class StringSourceOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SOURCE_BIND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_BIND, 0);
    }
    public KW_SOURCE_HOST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_HOST, 0);
    }
    public KW_SOURCE_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_USER, 0);
    }
    public KW_SOURCE_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_PASSWORD, 0);
    }
    public KW_SOURCE_LOG_FILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_LOG_FILE, 0);
    }
    public KW_RELAY_LOG_FILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELAY_LOG_FILE, 0);
    }
    public KW_SOURCE_COMPRESSION_ALGORITHMS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_COMPRESSION_ALGORITHMS, 0);
    }
    public KW_SOURCE_SSL_CA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_SSL_CA, 0);
    }
    public KW_SOURCE_SSL_CAPATH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_SSL_CAPATH, 0);
    }
    public KW_SOURCE_SSL_CERT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_SSL_CERT, 0);
    }
    public KW_SOURCE_SSL_CRL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_SSL_CRL, 0);
    }
    public KW_SOURCE_SSL_CRLPATH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_SSL_CRLPATH, 0);
    }
    public KW_SOURCE_SSL_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_SSL_KEY, 0);
    }
    public KW_SOURCE_SSL_CIPHER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_SSL_CIPHER, 0);
    }
    public KW_SOURCE_TLS_VERSION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_TLS_VERSION, 0);
    }
    public KW_SOURCE_TLS_CIPHERSUITES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_TLS_CIPHERSUITES, 0);
    }
    public KW_SOURCE_PUBLIC_KEY_PATH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_PUBLIC_KEY_PATH, 0);
    }
    public KW_NETWORK_NAMESPACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NETWORK_NAMESPACE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_stringSourceOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterStringSourceOption) {
             listener.enterStringSourceOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitStringSourceOption) {
             listener.exitStringSourceOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitStringSourceOption) {
            return visitor.visitStringSourceOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DecimalSourceOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SOURCE_PORT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_PORT, 0);
    }
    public KW_SOURCE_LOG_POS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_LOG_POS, 0);
    }
    public KW_RELAY_LOG_POS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELAY_LOG_POS, 0);
    }
    public KW_SOURCE_HEARTBEAT_PERIOD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_HEARTBEAT_PERIOD, 0);
    }
    public KW_SOURCE_CONNECT_RETRY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_CONNECT_RETRY, 0);
    }
    public KW_SOURCE_RETRY_COUNT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_RETRY_COUNT, 0);
    }
    public KW_SOURCE_DELAY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_DELAY, 0);
    }
    public KW_SOURCE_ZSTD_COMPRESSION_LEVEL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_ZSTD_COMPRESSION_LEVEL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_decimalSourceOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDecimalSourceOption) {
             listener.enterDecimalSourceOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDecimalSourceOption) {
             listener.exitDecimalSourceOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecimalSourceOption) {
            return visitor.visitDecimalSourceOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class BoolSourceOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REQUIRE_ROW_FORMAT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REQUIRE_ROW_FORMAT, 0);
    }
    public KW_SOURCE_AUTO_POSITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_AUTO_POSITION, 0);
    }
    public KW_SOURCE_CONNECTION_AUTO_FAILOVER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_CONNECTION_AUTO_FAILOVER, 0);
    }
    public KW_SOURCE_SSL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_SSL, 0);
    }
    public KW_SOURCE_SSL_VERIFY_SERVER_CERT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE_SSL_VERIFY_SERVER_CERT, 0);
    }
    public KW_GET_SOURCE_PUBLIC_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GET_SOURCE_PUBLIC_KEY, 0);
    }
    public KW_GTID_ONLY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GTID_ONLY, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_boolSourceOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterBoolSourceOption) {
             listener.enterBoolSourceOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitBoolSourceOption) {
             listener.exitBoolSourceOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitBoolSourceOption) {
            return visitor.visitBoolSourceOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OtherSourceOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PRIVILEGE_CHECKS_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRIVILEGE_CHECKS_USER, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_NULL_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NULL_LITERAL, 0);
    }
    public KW_REQUIRE_TABLE_PRIMARY_KEY_CHECK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REQUIRE_TABLE_PRIMARY_KEY_CHECK, 0);
    }
    public KW_STREAM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STREAM, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ON, 0);
    }
    public KW_OFF(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OFF, 0);
    }
    public KW_GENERATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GENERATE, 0);
    }
    public KW_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, 0);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCAL, 0);
    }
    public gtuidSet(): GtuidSetContext | null {
        return this.getRuleContext(0, GtuidSetContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_otherSourceOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterOtherSourceOption) {
             listener.enterOtherSourceOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitOtherSourceOption) {
             listener.exitOtherSourceOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitOtherSourceOption) {
            return visitor.visitOtherSourceOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ChannelOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FOR, 0)!;
    }
    public KW_CHANNEL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CHANNEL, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_channelOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterChannelOption) {
             listener.enterChannelOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitChannelOption) {
             listener.exitChannelOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitChannelOption) {
            return visitor.visitChannelOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReplicationFilterContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_replicationFilter;
    }
    public override copyFrom(ctx: ReplicationFilterContext): void {
        super.copyFrom(ctx);
    }
}
export class WildIgnoreTableReplicationContext extends ReplicationFilterContext {
    public constructor(ctx: ReplicationFilterContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REPLICATE_WILD_IGNORE_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public simpleStrings(): SimpleStringsContext {
        return this.getRuleContext(0, SimpleStringsContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterWildIgnoreTableReplication) {
             listener.enterWildIgnoreTableReplication(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitWildIgnoreTableReplication) {
             listener.exitWildIgnoreTableReplication(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitWildIgnoreTableReplication) {
            return visitor.visitWildIgnoreTableReplication(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class DoTableReplicationContext extends ReplicationFilterContext {
    public constructor(ctx: ReplicationFilterContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REPLICATE_DO_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPLICATE_DO_TABLE, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public tableNames(): TableNamesContext {
        return this.getRuleContext(0, TableNamesContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDoTableReplication) {
             listener.enterDoTableReplication(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDoTableReplication) {
             listener.exitDoTableReplication(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDoTableReplication) {
            return visitor.visitDoTableReplication(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class IgnoreTableReplicationContext extends ReplicationFilterContext {
    public constructor(ctx: ReplicationFilterContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REPLICATE_IGNORE_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPLICATE_IGNORE_TABLE, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public tableNames(): TableNamesContext {
        return this.getRuleContext(0, TableNamesContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIgnoreTableReplication) {
             listener.enterIgnoreTableReplication(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIgnoreTableReplication) {
             listener.exitIgnoreTableReplication(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIgnoreTableReplication) {
            return visitor.visitIgnoreTableReplication(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class RewriteDbReplicationContext extends ReplicationFilterContext {
    public constructor(ctx: ReplicationFilterContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REPLICATE_REWRITE_DB(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPLICATE_REWRITE_DB, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public tablePair(): TablePairContext[];
    public tablePair(i: number): TablePairContext | null;
    public tablePair(i?: number): TablePairContext[] | TablePairContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TablePairContext);
        }

        return this.getRuleContext(i, TablePairContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRewriteDbReplication) {
             listener.enterRewriteDbReplication(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRewriteDbReplication) {
             listener.exitRewriteDbReplication(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRewriteDbReplication) {
            return visitor.visitRewriteDbReplication(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class DoDbReplicationContext extends ReplicationFilterContext {
    public constructor(ctx: ReplicationFilterContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REPLICATE_DO_DB(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPLICATE_DO_DB, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public databaseName(): DatabaseNameContext[];
    public databaseName(i: number): DatabaseNameContext | null;
    public databaseName(i?: number): DatabaseNameContext[] | DatabaseNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DatabaseNameContext);
        }

        return this.getRuleContext(i, DatabaseNameContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDoDbReplication) {
             listener.enterDoDbReplication(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDoDbReplication) {
             listener.exitDoDbReplication(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDoDbReplication) {
            return visitor.visitDoDbReplication(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class IgnoreDbReplicationContext extends ReplicationFilterContext {
    public constructor(ctx: ReplicationFilterContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REPLICATE_IGNORE_DB(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPLICATE_IGNORE_DB, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public databaseName(): DatabaseNameContext[];
    public databaseName(i: number): DatabaseNameContext | null;
    public databaseName(i?: number): DatabaseNameContext[] | DatabaseNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DatabaseNameContext);
        }

        return this.getRuleContext(i, DatabaseNameContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIgnoreDbReplication) {
             listener.enterIgnoreDbReplication(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIgnoreDbReplication) {
             listener.exitIgnoreDbReplication(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIgnoreDbReplication) {
            return visitor.visitIgnoreDbReplication(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class WildDoTableReplicationContext extends ReplicationFilterContext {
    public constructor(ctx: ReplicationFilterContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REPLICATE_WILD_DO_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPLICATE_WILD_DO_TABLE, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public simpleStrings(): SimpleStringsContext {
        return this.getRuleContext(0, SimpleStringsContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterWildDoTableReplication) {
             listener.enterWildDoTableReplication(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitWildDoTableReplication) {
             listener.exitWildDoTableReplication(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitWildDoTableReplication) {
            return visitor.visitWildDoTableReplication(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TablePairContext extends antlr.ParserRuleContext {
    public _firstTable?: TableNameContext;
    public _secondTable?: TableNameContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.COMMA, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public tableName(): TableNameContext[];
    public tableName(i: number): TableNameContext | null;
    public tableName(i?: number): TableNameContext[] | TableNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TableNameContext);
        }

        return this.getRuleContext(i, TableNameContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tablePair;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTablePair) {
             listener.enterTablePair(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTablePair) {
             listener.exitTablePair(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablePair) {
            return visitor.visitTablePair(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ThreadTypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IO_THREAD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IO_THREAD, 0);
    }
    public KW_SQL_THREAD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_THREAD, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_threadType;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterThreadType) {
             listener.enterThreadType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitThreadType) {
             listener.exitThreadType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitThreadType) {
            return visitor.visitThreadType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UntilOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_untilOption;
    }
    public override copyFrom(ctx: UntilOptionContext): void {
        super.copyFrom(ctx);
    }
}
export class SourceLogUntilOptionContext extends UntilOptionContext {
    public constructor(ctx: UntilOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SOURCE_LOG_FILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SOURCE_LOG_FILE, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.COMMA, 0)!;
    }
    public KW_SOURCE_LOG_POS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SOURCE_LOG_POS, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSourceLogUntilOption) {
             listener.enterSourceLogUntilOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSourceLogUntilOption) {
             listener.exitSourceLogUntilOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSourceLogUntilOption) {
            return visitor.visitSourceLogUntilOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class GtidsUntilOptionContext extends UntilOptionContext {
    public _gtids?: Token | null;
    public constructor(ctx: UntilOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public gtuidSet(): GtuidSetContext {
        return this.getRuleContext(0, GtuidSetContext)!;
    }
    public KW_SQL_BEFORE_GTIDS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_BEFORE_GTIDS, 0);
    }
    public KW_SQL_AFTER_GTIDS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_AFTER_GTIDS, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterGtidsUntilOption) {
             listener.enterGtidsUntilOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitGtidsUntilOption) {
             listener.exitGtidsUntilOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitGtidsUntilOption) {
            return visitor.visitGtidsUntilOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SqlGapsUntilOptionContext extends UntilOptionContext {
    public constructor(ctx: UntilOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SQL_AFTER_MTS_GAPS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SQL_AFTER_MTS_GAPS, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSqlGapsUntilOption) {
             listener.enterSqlGapsUntilOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSqlGapsUntilOption) {
             listener.exitSqlGapsUntilOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSqlGapsUntilOption) {
            return visitor.visitSqlGapsUntilOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class MasterLogUntilOptionContext extends UntilOptionContext {
    public constructor(ctx: UntilOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_MASTER_LOG_FILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_MASTER_LOG_FILE, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.COMMA, 0)!;
    }
    public KW_MASTER_LOG_POS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_MASTER_LOG_POS, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterMasterLogUntilOption) {
             listener.enterMasterLogUntilOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitMasterLogUntilOption) {
             listener.exitMasterLogUntilOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitMasterLogUntilOption) {
            return visitor.visitMasterLogUntilOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class RelayLogUntilOptionContext extends UntilOptionContext {
    public constructor(ctx: UntilOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_RELAY_LOG_FILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RELAY_LOG_FILE, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.COMMA, 0)!;
    }
    public KW_RELAY_LOG_POS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RELAY_LOG_POS, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRelayLogUntilOption) {
             listener.enterRelayLogUntilOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRelayLogUntilOption) {
             listener.exitRelayLogUntilOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRelayLogUntilOption) {
            return visitor.visitRelayLogUntilOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConnectionOptionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_connectionOptions;
    }
    public override copyFrom(ctx: ConnectionOptionsContext): void {
        super.copyFrom(ctx);
    }
}
export class PluginDirConnectionOptionContext extends ConnectionOptionsContext {
    public _conOptPluginDir?: Token | null;
    public constructor(ctx: ConnectionOptionsContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_PLUGIN_DIR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PLUGIN_DIR, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPluginDirConnectionOption) {
             listener.enterPluginDirConnectionOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPluginDirConnectionOption) {
             listener.exitPluginDirConnectionOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPluginDirConnectionOption) {
            return visitor.visitPluginDirConnectionOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class UserConnectionOptionContext extends ConnectionOptionsContext {
    public _conOptUser?: Token | null;
    public constructor(ctx: ConnectionOptionsContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_USER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_USER, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUserConnectionOption) {
             listener.enterUserConnectionOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUserConnectionOption) {
             listener.exitUserConnectionOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUserConnectionOption) {
            return visitor.visitUserConnectionOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class DefaultAuthConnectionOptionContext extends ConnectionOptionsContext {
    public _conOptDefAuth?: Token | null;
    public constructor(ctx: ConnectionOptionsContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DEFAULT_AUTH(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DEFAULT_AUTH, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDefaultAuthConnectionOption) {
             listener.enterDefaultAuthConnectionOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDefaultAuthConnectionOption) {
             listener.exitDefaultAuthConnectionOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefaultAuthConnectionOption) {
            return visitor.visitDefaultAuthConnectionOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PasswordConnectionOptionContext extends ConnectionOptionsContext {
    public _conOptPassword?: Token | null;
    public constructor(ctx: ConnectionOptionsContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_PASSWORD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PASSWORD, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPasswordConnectionOption) {
             listener.enterPasswordConnectionOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPasswordConnectionOption) {
             listener.exitPasswordConnectionOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPasswordConnectionOption) {
            return visitor.visitPasswordConnectionOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class GtuidSetContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uuidSet(): UuidSetContext[];
    public uuidSet(i: number): UuidSetContext | null;
    public uuidSet(i?: number): UuidSetContext[] | UuidSetContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UuidSetContext);
        }

        return this.getRuleContext(i, UuidSetContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_gtuidSet;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterGtuidSet) {
             listener.enterGtuidSet(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitGtuidSet) {
             listener.exitGtuidSet(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitGtuidSet) {
            return visitor.visitGtuidSet(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class XaStartTransactionContext extends antlr.ParserRuleContext {
    public _xaStart?: Token | null;
    public _xaAction?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_XA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_XA, 0)!;
    }
    public xid(): XidContext {
        return this.getRuleContext(0, XidContext)!;
    }
    public KW_START(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_START, 0);
    }
    public KW_BEGIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BEGIN, 0);
    }
    public KW_JOIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_JOIN, 0);
    }
    public KW_RESUME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RESUME, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_xaStartTransaction;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterXaStartTransaction) {
             listener.enterXaStartTransaction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitXaStartTransaction) {
             listener.exitXaStartTransaction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitXaStartTransaction) {
            return visitor.visitXaStartTransaction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class XaEndTransactionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_XA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_XA, 0)!;
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_END, 0)!;
    }
    public xid(): XidContext {
        return this.getRuleContext(0, XidContext)!;
    }
    public KW_SUSPEND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUSPEND, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOR, 0);
    }
    public KW_MIGRATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MIGRATE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_xaEndTransaction;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterXaEndTransaction) {
             listener.enterXaEndTransaction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitXaEndTransaction) {
             listener.exitXaEndTransaction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitXaEndTransaction) {
            return visitor.visitXaEndTransaction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class XaPrepareStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_XA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_XA, 0)!;
    }
    public KW_PREPARE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PREPARE, 0)!;
    }
    public xid(): XidContext {
        return this.getRuleContext(0, XidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_xaPrepareStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterXaPrepareStatement) {
             listener.enterXaPrepareStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitXaPrepareStatement) {
             listener.exitXaPrepareStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitXaPrepareStatement) {
            return visitor.visitXaPrepareStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class XaCommitWorkContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_XA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_XA, 0)!;
    }
    public KW_COMMIT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COMMIT, 0)!;
    }
    public xid(): XidContext {
        return this.getRuleContext(0, XidContext)!;
    }
    public KW_ONE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ONE, 0);
    }
    public KW_PHASE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PHASE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_xaCommitWork;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterXaCommitWork) {
             listener.enterXaCommitWork(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitXaCommitWork) {
             listener.exitXaCommitWork(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitXaCommitWork) {
            return visitor.visitXaCommitWork(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class XaRollbackWorkContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_XA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_XA, 0)!;
    }
    public KW_ROLLBACK(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ROLLBACK, 0)!;
    }
    public xid(): XidContext {
        return this.getRuleContext(0, XidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_xaRollbackWork;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterXaRollbackWork) {
             listener.enterXaRollbackWork(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitXaRollbackWork) {
             listener.exitXaRollbackWork(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitXaRollbackWork) {
            return visitor.visitXaRollbackWork(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class XaRecoverWorkContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_XA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_XA, 0)!;
    }
    public KW_RECOVER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RECOVER, 0)!;
    }
    public KW_CONVERT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONVERT, 0);
    }
    public xid(): XidContext | null {
        return this.getRuleContext(0, XidContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_xaRecoverWork;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterXaRecoverWork) {
             listener.enterXaRecoverWork(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitXaRecoverWork) {
             listener.exitXaRecoverWork(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitXaRecoverWork) {
            return visitor.visitXaRecoverWork(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PrepareStatementContext extends antlr.ParserRuleContext {
    public _stmt_name?: UidContext;
    public _query?: Token | null;
    public _variable?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PREPARE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PREPARE, 0)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FROM, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public LOCAL_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LOCAL_ID, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_prepareStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPrepareStatement) {
             listener.enterPrepareStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPrepareStatement) {
             listener.exitPrepareStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPrepareStatement) {
            return visitor.visitPrepareStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExecuteStatementContext extends antlr.ParserRuleContext {
    public _stmt_name?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_EXECUTE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EXECUTE, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USING, 0);
    }
    public userVariables(): UserVariablesContext | null {
        return this.getRuleContext(0, UserVariablesContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_executeStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterExecuteStatement) {
             listener.enterExecuteStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitExecuteStatement) {
             listener.exitExecuteStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitExecuteStatement) {
            return visitor.visitExecuteStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DeallocatePrepareContext extends antlr.ParserRuleContext {
    public _dropFormat?: Token | null;
    public _stmt_name?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PREPARE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PREPARE, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public KW_DEALLOCATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEALLOCATE, 0);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DROP, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_deallocatePrepare;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDeallocatePrepare) {
             listener.enterDeallocatePrepare(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDeallocatePrepare) {
             listener.exitDeallocatePrepare(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDeallocatePrepare) {
            return visitor.visitDeallocatePrepare(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RoutineBodyContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public blockStatement(): BlockStatementContext | null {
        return this.getRuleContext(0, BlockStatementContext);
    }
    public sqlStatement(): SqlStatementContext | null {
        return this.getRuleContext(0, SqlStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_routineBody;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRoutineBody) {
             listener.enterRoutineBody(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRoutineBody) {
             listener.exitRoutineBody(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoutineBody) {
            return visitor.visitRoutineBody(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class BlockStatementContext extends antlr.ParserRuleContext {
    public _begin?: UidContext;
    public _end?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BEGIN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BEGIN, 0)!;
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_END, 0)!;
    }
    public COLON_SYMB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.COLON_SYMB, 0);
    }
    public declareVariable(): DeclareVariableContext[];
    public declareVariable(i: number): DeclareVariableContext | null;
    public declareVariable(i?: number): DeclareVariableContext[] | DeclareVariableContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DeclareVariableContext);
        }

        return this.getRuleContext(i, DeclareVariableContext);
    }
    public SEMI(): antlr.TerminalNode[];
    public SEMI(i: number): antlr.TerminalNode | null;
    public SEMI(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.SEMI);
    	} else {
    		return this.getToken(MySqlParser.SEMI, i);
    	}
    }
    public declareCondition(): DeclareConditionContext[];
    public declareCondition(i: number): DeclareConditionContext | null;
    public declareCondition(i?: number): DeclareConditionContext[] | DeclareConditionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DeclareConditionContext);
        }

        return this.getRuleContext(i, DeclareConditionContext);
    }
    public declareCursor(): DeclareCursorContext[];
    public declareCursor(i: number): DeclareCursorContext | null;
    public declareCursor(i?: number): DeclareCursorContext[] | DeclareCursorContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DeclareCursorContext);
        }

        return this.getRuleContext(i, DeclareCursorContext);
    }
    public declareHandler(): DeclareHandlerContext[];
    public declareHandler(i: number): DeclareHandlerContext | null;
    public declareHandler(i?: number): DeclareHandlerContext[] | DeclareHandlerContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DeclareHandlerContext);
        }

        return this.getRuleContext(i, DeclareHandlerContext);
    }
    public procedureSqlStatement(): ProcedureSqlStatementContext[];
    public procedureSqlStatement(i: number): ProcedureSqlStatementContext | null;
    public procedureSqlStatement(i?: number): ProcedureSqlStatementContext[] | ProcedureSqlStatementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ProcedureSqlStatementContext);
        }

        return this.getRuleContext(i, ProcedureSqlStatementContext);
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_blockStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterBlockStatement) {
             listener.enterBlockStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitBlockStatement) {
             listener.exitBlockStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitBlockStatement) {
            return visitor.visitBlockStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CaseStatementContext extends antlr.ParserRuleContext {
    public _case_value?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CASE(): antlr.TerminalNode[];
    public KW_CASE(i: number): antlr.TerminalNode | null;
    public KW_CASE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_CASE);
    	} else {
    		return this.getToken(MySqlParser.KW_CASE, i);
    	}
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_END, 0)!;
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public caseAlternative(): CaseAlternativeContext[];
    public caseAlternative(i: number): CaseAlternativeContext | null;
    public caseAlternative(i?: number): CaseAlternativeContext[] | CaseAlternativeContext | null {
        if (i === undefined) {
            return this.getRuleContexts(CaseAlternativeContext);
        }

        return this.getRuleContext(i, CaseAlternativeContext);
    }
    public KW_ELSE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ELSE, 0);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public procedureSqlStatement(): ProcedureSqlStatementContext[];
    public procedureSqlStatement(i: number): ProcedureSqlStatementContext | null;
    public procedureSqlStatement(i?: number): ProcedureSqlStatementContext[] | ProcedureSqlStatementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ProcedureSqlStatementContext);
        }

        return this.getRuleContext(i, ProcedureSqlStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_caseStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCaseStatement) {
             listener.enterCaseStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCaseStatement) {
             listener.exitCaseStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCaseStatement) {
            return visitor.visitCaseStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IfStatementContext extends antlr.ParserRuleContext {
    public _procedureSqlStatement?: ProcedureSqlStatementContext;
    public _thenStatements: ProcedureSqlStatementContext[] = [];
    public _elseStatements: ProcedureSqlStatementContext[] = [];
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IF(): antlr.TerminalNode[];
    public KW_IF(i: number): antlr.TerminalNode | null;
    public KW_IF(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_IF);
    	} else {
    		return this.getToken(MySqlParser.KW_IF, i);
    	}
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public KW_THEN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_THEN, 0)!;
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_END, 0)!;
    }
    public elifAlternative(): ElifAlternativeContext[];
    public elifAlternative(i: number): ElifAlternativeContext | null;
    public elifAlternative(i?: number): ElifAlternativeContext[] | ElifAlternativeContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ElifAlternativeContext);
        }

        return this.getRuleContext(i, ElifAlternativeContext);
    }
    public KW_ELSE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ELSE, 0);
    }
    public procedureSqlStatement(): ProcedureSqlStatementContext[];
    public procedureSqlStatement(i: number): ProcedureSqlStatementContext | null;
    public procedureSqlStatement(i?: number): ProcedureSqlStatementContext[] | ProcedureSqlStatementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ProcedureSqlStatementContext);
        }

        return this.getRuleContext(i, ProcedureSqlStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_ifStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIfStatement) {
             listener.enterIfStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIfStatement) {
             listener.exitIfStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIfStatement) {
            return visitor.visitIfStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IterateStatementContext extends antlr.ParserRuleContext {
    public _label?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ITERATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ITERATE, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_iterateStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIterateStatement) {
             listener.enterIterateStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIterateStatement) {
             listener.exitIterateStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIterateStatement) {
            return visitor.visitIterateStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LeaveStatementContext extends antlr.ParserRuleContext {
    public _label?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LEAVE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LEAVE, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_leaveStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLeaveStatement) {
             listener.enterLeaveStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLeaveStatement) {
             listener.exitLeaveStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLeaveStatement) {
            return visitor.visitLeaveStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LoopStatementContext extends antlr.ParserRuleContext {
    public _begin_label?: UidContext;
    public _end_label?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LOOP(): antlr.TerminalNode[];
    public KW_LOOP(i: number): antlr.TerminalNode | null;
    public KW_LOOP(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_LOOP);
    	} else {
    		return this.getToken(MySqlParser.KW_LOOP, i);
    	}
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_END, 0)!;
    }
    public COLON_SYMB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.COLON_SYMB, 0);
    }
    public procedureSqlStatement(): ProcedureSqlStatementContext[];
    public procedureSqlStatement(i: number): ProcedureSqlStatementContext | null;
    public procedureSqlStatement(i?: number): ProcedureSqlStatementContext[] | ProcedureSqlStatementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ProcedureSqlStatementContext);
        }

        return this.getRuleContext(i, ProcedureSqlStatementContext);
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_loopStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLoopStatement) {
             listener.enterLoopStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLoopStatement) {
             listener.exitLoopStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLoopStatement) {
            return visitor.visitLoopStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RepeatStatementContext extends antlr.ParserRuleContext {
    public _begin_label?: UidContext;
    public _end_label?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REPEAT(): antlr.TerminalNode[];
    public KW_REPEAT(i: number): antlr.TerminalNode | null;
    public KW_REPEAT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_REPEAT);
    	} else {
    		return this.getToken(MySqlParser.KW_REPEAT, i);
    	}
    }
    public KW_UNTIL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UNTIL, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_END, 0)!;
    }
    public COLON_SYMB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.COLON_SYMB, 0);
    }
    public procedureSqlStatement(): ProcedureSqlStatementContext[];
    public procedureSqlStatement(i: number): ProcedureSqlStatementContext | null;
    public procedureSqlStatement(i?: number): ProcedureSqlStatementContext[] | ProcedureSqlStatementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ProcedureSqlStatementContext);
        }

        return this.getRuleContext(i, ProcedureSqlStatementContext);
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_repeatStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRepeatStatement) {
             listener.enterRepeatStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRepeatStatement) {
             listener.exitRepeatStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRepeatStatement) {
            return visitor.visitRepeatStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReturnStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RETURN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RETURN, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_returnStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterReturnStatement) {
             listener.enterReturnStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitReturnStatement) {
             listener.exitReturnStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitReturnStatement) {
            return visitor.visitReturnStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class WhileStatementContext extends antlr.ParserRuleContext {
    public _begin_label?: UidContext;
    public _end_label?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WHILE(): antlr.TerminalNode[];
    public KW_WHILE(i: number): antlr.TerminalNode | null;
    public KW_WHILE(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_WHILE);
    	} else {
    		return this.getToken(MySqlParser.KW_WHILE, i);
    	}
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public KW_DO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DO, 0)!;
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_END, 0)!;
    }
    public COLON_SYMB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.COLON_SYMB, 0);
    }
    public procedureSqlStatement(): ProcedureSqlStatementContext[];
    public procedureSqlStatement(i: number): ProcedureSqlStatementContext | null;
    public procedureSqlStatement(i?: number): ProcedureSqlStatementContext[] | ProcedureSqlStatementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ProcedureSqlStatementContext);
        }

        return this.getRuleContext(i, ProcedureSqlStatementContext);
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_whileStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterWhileStatement) {
             listener.enterWhileStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitWhileStatement) {
             listener.exitWhileStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitWhileStatement) {
            return visitor.visitWhileStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CursorStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_cursorStatement;
    }
    public override copyFrom(ctx: CursorStatementContext): void {
        super.copyFrom(ctx);
    }
}
export class CloseCursorContext extends CursorStatementContext {
    public _cursor_name?: UidContext;
    public constructor(ctx: CursorStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CLOSE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CLOSE, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCloseCursor) {
             listener.enterCloseCursor(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCloseCursor) {
             listener.exitCloseCursor(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCloseCursor) {
            return visitor.visitCloseCursor(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class OpenCursorContext extends CursorStatementContext {
    public _cursor_name?: UidContext;
    public constructor(ctx: CursorStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_OPEN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_OPEN, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterOpenCursor) {
             listener.enterOpenCursor(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitOpenCursor) {
             listener.exitOpenCursor(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitOpenCursor) {
            return visitor.visitOpenCursor(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class FetchCursorContext extends CursorStatementContext {
    public _cursor_name?: UidContext;
    public _var_names?: UidListContext;
    public constructor(ctx: CursorStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_FETCH(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FETCH, 0)!;
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INTO, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public uidList(): UidListContext {
        return this.getRuleContext(0, UidListContext)!;
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FROM, 0);
    }
    public KW_NEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NEXT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFetchCursor) {
             listener.enterFetchCursor(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFetchCursor) {
             listener.exitFetchCursor(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFetchCursor) {
            return visitor.visitFetchCursor(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DeclareVariableContext extends antlr.ParserRuleContext {
    public _var_names?: UidListContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DECLARE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DECLARE, 0)!;
    }
    public dataType(): DataTypeContext {
        return this.getRuleContext(0, DataTypeContext)!;
    }
    public uidList(): UidListContext {
        return this.getRuleContext(0, UidListContext)!;
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_declareVariable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDeclareVariable) {
             listener.enterDeclareVariable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDeclareVariable) {
             listener.exitDeclareVariable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDeclareVariable) {
            return visitor.visitDeclareVariable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DeclareConditionContext extends antlr.ParserRuleContext {
    public _condition_name?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DECLARE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DECLARE, 0)!;
    }
    public KW_CONDITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CONDITION, 0)!;
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FOR, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public KW_SQLSTATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQLSTATE, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VALUE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_declareCondition;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDeclareCondition) {
             listener.enterDeclareCondition(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDeclareCondition) {
             listener.exitDeclareCondition(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDeclareCondition) {
            return visitor.visitDeclareCondition(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DeclareCursorContext extends antlr.ParserRuleContext {
    public _condition_name?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DECLARE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DECLARE, 0)!;
    }
    public KW_CURSOR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CURSOR, 0)!;
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FOR, 0)!;
    }
    public selectStatement(): SelectStatementContext {
        return this.getRuleContext(0, SelectStatementContext)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_declareCursor;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDeclareCursor) {
             listener.enterDeclareCursor(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDeclareCursor) {
             listener.exitDeclareCursor(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDeclareCursor) {
            return visitor.visitDeclareCursor(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DeclareHandlerContext extends antlr.ParserRuleContext {
    public _handlerAction?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DECLARE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DECLARE, 0)!;
    }
    public KW_HANDLER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_HANDLER, 0)!;
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FOR, 0)!;
    }
    public handlerConditionValue(): HandlerConditionValueContext[];
    public handlerConditionValue(i: number): HandlerConditionValueContext | null;
    public handlerConditionValue(i?: number): HandlerConditionValueContext[] | HandlerConditionValueContext | null {
        if (i === undefined) {
            return this.getRuleContexts(HandlerConditionValueContext);
        }

        return this.getRuleContext(i, HandlerConditionValueContext);
    }
    public routineBody(): RoutineBodyContext {
        return this.getRuleContext(0, RoutineBodyContext)!;
    }
    public KW_CONTINUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONTINUE, 0);
    }
    public KW_EXIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXIT, 0);
    }
    public KW_UNDO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNDO, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_declareHandler;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDeclareHandler) {
             listener.enterDeclareHandler(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDeclareHandler) {
             listener.exitDeclareHandler(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDeclareHandler) {
            return visitor.visitDeclareHandler(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class HandlerConditionValueContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_handlerConditionValue;
    }
    public override copyFrom(ctx: HandlerConditionValueContext): void {
        super.copyFrom(ctx);
    }
}
export class HandlerConditionWarningContext extends HandlerConditionValueContext {
    public constructor(ctx: HandlerConditionValueContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SQLWARNING(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SQLWARNING, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHandlerConditionWarning) {
             listener.enterHandlerConditionWarning(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHandlerConditionWarning) {
             listener.exitHandlerConditionWarning(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHandlerConditionWarning) {
            return visitor.visitHandlerConditionWarning(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class HandlerConditionCodeContext extends HandlerConditionValueContext {
    public constructor(ctx: HandlerConditionValueContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHandlerConditionCode) {
             listener.enterHandlerConditionCode(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHandlerConditionCode) {
             listener.exitHandlerConditionCode(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHandlerConditionCode) {
            return visitor.visitHandlerConditionCode(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class HandlerConditionNotfoundContext extends HandlerConditionValueContext {
    public constructor(ctx: HandlerConditionValueContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_NOT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_NOT, 0)!;
    }
    public KW_FOUND(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FOUND, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHandlerConditionNotfound) {
             listener.enterHandlerConditionNotfound(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHandlerConditionNotfound) {
             listener.exitHandlerConditionNotfound(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHandlerConditionNotfound) {
            return visitor.visitHandlerConditionNotfound(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class HandlerConditionStateContext extends HandlerConditionValueContext {
    public constructor(ctx: HandlerConditionValueContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SQLSTATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SQLSTATE, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public KW_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VALUE, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHandlerConditionState) {
             listener.enterHandlerConditionState(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHandlerConditionState) {
             listener.exitHandlerConditionState(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHandlerConditionState) {
            return visitor.visitHandlerConditionState(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class HandlerConditionExceptionContext extends HandlerConditionValueContext {
    public constructor(ctx: HandlerConditionValueContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SQLEXCEPTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SQLEXCEPTION, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHandlerConditionException) {
             listener.enterHandlerConditionException(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHandlerConditionException) {
             listener.exitHandlerConditionException(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHandlerConditionException) {
            return visitor.visitHandlerConditionException(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class HandlerConditionNameContext extends HandlerConditionValueContext {
    public _condition_name?: UidContext;
    public constructor(ctx: HandlerConditionValueContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHandlerConditionName) {
             listener.enterHandlerConditionName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHandlerConditionName) {
             listener.exitHandlerConditionName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHandlerConditionName) {
            return visitor.visitHandlerConditionName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ProcedureSqlStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public SEMI(): antlr.TerminalNode {
        return this.getToken(MySqlParser.SEMI, 0)!;
    }
    public compoundStatement(): CompoundStatementContext | null {
        return this.getRuleContext(0, CompoundStatementContext);
    }
    public sqlStatement(): SqlStatementContext | null {
        return this.getRuleContext(0, SqlStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_procedureSqlStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterProcedureSqlStatement) {
             listener.enterProcedureSqlStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitProcedureSqlStatement) {
             listener.exitProcedureSqlStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitProcedureSqlStatement) {
            return visitor.visitProcedureSqlStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CaseAlternativeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WHEN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_WHEN, 0)!;
    }
    public KW_THEN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_THEN, 0)!;
    }
    public constant(): ConstantContext | null {
        return this.getRuleContext(0, ConstantContext);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public procedureSqlStatement(): ProcedureSqlStatementContext[];
    public procedureSqlStatement(i: number): ProcedureSqlStatementContext | null;
    public procedureSqlStatement(i?: number): ProcedureSqlStatementContext[] | ProcedureSqlStatementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ProcedureSqlStatementContext);
        }

        return this.getRuleContext(i, ProcedureSqlStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_caseAlternative;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCaseAlternative) {
             listener.enterCaseAlternative(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCaseAlternative) {
             listener.exitCaseAlternative(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCaseAlternative) {
            return visitor.visitCaseAlternative(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ElifAlternativeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ELSEIF(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ELSEIF, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public KW_THEN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_THEN, 0)!;
    }
    public procedureSqlStatement(): ProcedureSqlStatementContext[];
    public procedureSqlStatement(i: number): ProcedureSqlStatementContext | null;
    public procedureSqlStatement(i?: number): ProcedureSqlStatementContext[] | ProcedureSqlStatementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ProcedureSqlStatementContext);
        }

        return this.getRuleContext(i, ProcedureSqlStatementContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_elifAlternative;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterElifAlternative) {
             listener.enterElifAlternative(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitElifAlternative) {
             listener.exitElifAlternative(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitElifAlternative) {
            return visitor.visitElifAlternative(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterUserContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_USER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_USER, 0)!;
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public userSpecification(): UserSpecificationContext[];
    public userSpecification(i: number): UserSpecificationContext | null;
    public userSpecification(i?: number): UserSpecificationContext[] | UserSpecificationContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserSpecificationContext);
        }

        return this.getRuleContext(i, UserSpecificationContext);
    }
    public alterUserAuthOption(): AlterUserAuthOptionContext[];
    public alterUserAuthOption(i: number): AlterUserAuthOptionContext | null;
    public alterUserAuthOption(i?: number): AlterUserAuthOptionContext[] | AlterUserAuthOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(AlterUserAuthOptionContext);
        }

        return this.getRuleContext(i, AlterUserAuthOptionContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROLE, 0);
    }
    public roleOption(): RoleOptionContext | null {
        return this.getRuleContext(0, RoleOptionContext);
    }
    public userOrRoleName(): UserOrRoleNameContext | null {
        return this.getRuleContext(0, UserOrRoleNameContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_REQUIRE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REQUIRE, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public userPasswordOption(): UserPasswordOptionContext[];
    public userPasswordOption(i: number): UserPasswordOptionContext | null;
    public userPasswordOption(i?: number): UserPasswordOptionContext[] | UserPasswordOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserPasswordOptionContext);
        }

        return this.getRuleContext(i, UserPasswordOptionContext);
    }
    public userLockOption(): UserLockOptionContext[];
    public userLockOption(i: number): UserLockOptionContext | null;
    public userLockOption(i?: number): UserLockOptionContext[] | UserLockOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserLockOptionContext);
        }

        return this.getRuleContext(i, UserLockOptionContext);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_COMMENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMMENT, 0);
    }
    public KW_ATTRIBUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ATTRIBUTE, 0);
    }
    public KW_NONE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NONE, 0);
    }
    public tlsOption(): TlsOptionContext[];
    public tlsOption(i: number): TlsOptionContext | null;
    public tlsOption(i?: number): TlsOptionContext[] | TlsOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TlsOptionContext);
        }

        return this.getRuleContext(i, TlsOptionContext);
    }
    public userResourceOption(): UserResourceOptionContext[];
    public userResourceOption(i: number): UserResourceOptionContext | null;
    public userResourceOption(i?: number): UserResourceOptionContext[] | UserResourceOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserResourceOptionContext);
        }

        return this.getRuleContext(i, UserResourceOptionContext);
    }
    public KW_AND(): antlr.TerminalNode[];
    public KW_AND(i: number): antlr.TerminalNode | null;
    public KW_AND(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_AND);
    	} else {
    		return this.getToken(MySqlParser.KW_AND, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterUser;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterUser) {
             listener.enterAlterUser(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterUser) {
             listener.exitAlterUser(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterUser) {
            return visitor.visitAlterUser(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateUserContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_USER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_USER, 0)!;
    }
    public userName(): UserNameContext[];
    public userName(i: number): UserNameContext | null;
    public userName(i?: number): UserNameContext[] | UserNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserNameContext);
        }

        return this.getRuleContext(i, UserNameContext);
    }
    public ifNotExists(): IfNotExistsContext | null {
        return this.getRuleContext(0, IfNotExistsContext);
    }
    public createUserAuthOption(): CreateUserAuthOptionContext[];
    public createUserAuthOption(i: number): CreateUserAuthOptionContext | null;
    public createUserAuthOption(i?: number): CreateUserAuthOptionContext[] | CreateUserAuthOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(CreateUserAuthOptionContext);
        }

        return this.getRuleContext(i, CreateUserAuthOptionContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROLE, 0);
    }
    public roleOption(): RoleOptionContext | null {
        return this.getRuleContext(0, RoleOptionContext);
    }
    public KW_REQUIRE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REQUIRE, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public userPasswordOption(): UserPasswordOptionContext[];
    public userPasswordOption(i: number): UserPasswordOptionContext | null;
    public userPasswordOption(i?: number): UserPasswordOptionContext[] | UserPasswordOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserPasswordOptionContext);
        }

        return this.getRuleContext(i, UserPasswordOptionContext);
    }
    public userLockOption(): UserLockOptionContext[];
    public userLockOption(i: number): UserLockOptionContext | null;
    public userLockOption(i?: number): UserLockOptionContext[] | UserLockOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserLockOptionContext);
        }

        return this.getRuleContext(i, UserLockOptionContext);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_COMMENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMMENT, 0);
    }
    public KW_ATTRIBUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ATTRIBUTE, 0);
    }
    public KW_NONE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NONE, 0);
    }
    public tlsOption(): TlsOptionContext[];
    public tlsOption(i: number): TlsOptionContext | null;
    public tlsOption(i?: number): TlsOptionContext[] | TlsOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TlsOptionContext);
        }

        return this.getRuleContext(i, TlsOptionContext);
    }
    public userResourceOption(): UserResourceOptionContext[];
    public userResourceOption(i: number): UserResourceOptionContext | null;
    public userResourceOption(i?: number): UserResourceOptionContext[] | UserResourceOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserResourceOptionContext);
        }

        return this.getRuleContext(i, UserResourceOptionContext);
    }
    public KW_AND(): antlr.TerminalNode[];
    public KW_AND(i: number): antlr.TerminalNode | null;
    public KW_AND(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_AND);
    	} else {
    		return this.getToken(MySqlParser.KW_AND, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createUser;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateUser) {
             listener.enterCreateUser(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateUser) {
             listener.exitCreateUser(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateUser) {
            return visitor.visitCreateUser(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropUserContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_USER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_USER, 0)!;
    }
    public userName(): UserNameContext[];
    public userName(i: number): UserNameContext | null;
    public userName(i?: number): UserNameContext[] | UserNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserNameContext);
        }

        return this.getRuleContext(i, UserNameContext);
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropUser;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropUser) {
             listener.enterDropUser(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropUser) {
             listener.exitDropUser(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropUser) {
            return visitor.visitDropUser(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class GrantStatementContext extends antlr.ParserRuleContext {
    public _tlsNone?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_GRANT(): antlr.TerminalNode[];
    public KW_GRANT(i: number): antlr.TerminalNode | null;
    public KW_GRANT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_GRANT);
    	} else {
    		return this.getToken(MySqlParser.KW_GRANT, i);
    	}
    }
    public privelegeClause(): PrivelegeClauseContext[];
    public privelegeClause(i: number): PrivelegeClauseContext | null;
    public privelegeClause(i?: number): PrivelegeClauseContext[] | PrivelegeClauseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PrivelegeClauseContext);
        }

        return this.getRuleContext(i, PrivelegeClauseContext);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ON, 0);
    }
    public privilegeLevel(): PrivilegeLevelContext | null {
        return this.getRuleContext(0, PrivilegeLevelContext);
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TO, 0)!;
    }
    public userOrRoleNames(): UserOrRoleNamesContext | null {
        return this.getRuleContext(0, UserOrRoleNamesContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public privilegeObjectType(): PrivilegeObjectTypeContext | null {
        return this.getRuleContext(0, PrivilegeObjectTypeContext);
    }
    public KW_REQUIRE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REQUIRE, 0);
    }
    public KW_WITH(): antlr.TerminalNode[];
    public KW_WITH(i: number): antlr.TerminalNode | null;
    public KW_WITH(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_WITH);
    	} else {
    		return this.getToken(MySqlParser.KW_WITH, i);
    	}
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public userName(): UserNameContext | null {
        return this.getRuleContext(0, UserNameContext);
    }
    public userAuthOption(): UserAuthOptionContext[];
    public userAuthOption(i: number): UserAuthOptionContext | null;
    public userAuthOption(i?: number): UserAuthOptionContext[] | UserAuthOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserAuthOptionContext);
        }

        return this.getRuleContext(i, UserAuthOptionContext);
    }
    public tlsOption(): TlsOptionContext[];
    public tlsOption(i: number): TlsOptionContext | null;
    public tlsOption(i?: number): TlsOptionContext[] | TlsOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TlsOptionContext);
        }

        return this.getRuleContext(i, TlsOptionContext);
    }
    public KW_NONE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NONE, 0);
    }
    public KW_OPTION(): antlr.TerminalNode[];
    public KW_OPTION(i: number): antlr.TerminalNode | null;
    public KW_OPTION(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_OPTION);
    	} else {
    		return this.getToken(MySqlParser.KW_OPTION, i);
    	}
    }
    public userResourceOption(): UserResourceOptionContext[];
    public userResourceOption(i: number): UserResourceOptionContext | null;
    public userResourceOption(i?: number): UserResourceOptionContext[] | UserResourceOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserResourceOptionContext);
        }

        return this.getRuleContext(i, UserResourceOptionContext);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROLE, 0);
    }
    public roleOption(): RoleOptionContext | null {
        return this.getRuleContext(0, RoleOptionContext);
    }
    public KW_AND(): antlr.TerminalNode[];
    public KW_AND(i: number): antlr.TerminalNode | null;
    public KW_AND(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_AND);
    	} else {
    		return this.getToken(MySqlParser.KW_AND, i);
    	}
    }
    public userOrRoleName(): UserOrRoleNameContext[];
    public userOrRoleName(i: number): UserOrRoleNameContext | null;
    public userOrRoleName(i?: number): UserOrRoleNameContext[] | UserOrRoleNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserOrRoleNameContext);
        }

        return this.getRuleContext(i, UserOrRoleNameContext);
    }
    public KW_PROXY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROXY, 0);
    }
    public KW_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ADMIN, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_grantStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterGrantStatement) {
             listener.enterGrantStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitGrantStatement) {
             listener.exitGrantStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitGrantStatement) {
            return visitor.visitGrantStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RoleOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public KW_NONE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NONE, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public KW_EXCEPT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXCEPT, 0);
    }
    public userOrRoleNames(): UserOrRoleNamesContext | null {
        return this.getRuleContext(0, UserOrRoleNamesContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_roleOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRoleOption) {
             listener.enterRoleOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRoleOption) {
             listener.exitRoleOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRoleOption) {
            return visitor.visitRoleOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class GrantProxyContext extends antlr.ParserRuleContext {
    public _fromFirst?: UserNameContext;
    public _toFirst?: UserNameContext;
    public _userName?: UserNameContext;
    public _toOther: UserNameContext[] = [];
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_GRANT(): antlr.TerminalNode[];
    public KW_GRANT(i: number): antlr.TerminalNode | null;
    public KW_GRANT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_GRANT);
    	} else {
    		return this.getToken(MySqlParser.KW_GRANT, i);
    	}
    }
    public KW_PROXY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PROXY, 0)!;
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ON, 0)!;
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TO, 0)!;
    }
    public userName(): UserNameContext[];
    public userName(i: number): UserNameContext | null;
    public userName(i?: number): UserNameContext[] | UserNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserNameContext);
        }

        return this.getRuleContext(i, UserNameContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public KW_OPTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OPTION, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_grantProxy;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterGrantProxy) {
             listener.enterGrantProxy(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitGrantProxy) {
             listener.exitGrantProxy(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitGrantProxy) {
            return visitor.visitGrantProxy(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterResourceGroupContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALTER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALTER, 0)!;
    }
    public KW_RESOURCE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RESOURCE, 0)!;
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GROUP, 0)!;
    }
    public groupName(): GroupNameContext {
        return this.getRuleContext(0, GroupNameContext)!;
    }
    public KW_VCPU(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VCPU, 0);
    }
    public resourceGroupVcpuSpec(): ResourceGroupVcpuSpecContext | null {
        return this.getRuleContext(0, ResourceGroupVcpuSpecContext);
    }
    public KW_THREAD_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_THREAD_PRIORITY, 0);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public KW_ENABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENABLE, 0);
    }
    public KW_DISABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISABLE, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public KW_FORCE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FORCE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterResourceGroup;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterResourceGroup) {
             listener.enterAlterResourceGroup(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterResourceGroup) {
             listener.exitAlterResourceGroup(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterResourceGroup) {
            return visitor.visitAlterResourceGroup(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateResourceGroupContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_RESOURCE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RESOURCE, 0)!;
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GROUP, 0)!;
    }
    public groupNameCreate(): GroupNameCreateContext {
        return this.getRuleContext(0, GroupNameCreateContext)!;
    }
    public KW_TYPE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TYPE, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public KW_SYSTEM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SYSTEM, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USER, 0);
    }
    public KW_VCPU(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VCPU, 0);
    }
    public resourceGroupVcpuSpec(): ResourceGroupVcpuSpecContext | null {
        return this.getRuleContext(0, ResourceGroupVcpuSpecContext);
    }
    public KW_THREAD_PRIORITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_THREAD_PRIORITY, 0);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public KW_ENABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENABLE, 0);
    }
    public KW_DISABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISABLE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createResourceGroup;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateResourceGroup) {
             listener.enterCreateResourceGroup(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateResourceGroup) {
             listener.exitCreateResourceGroup(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateResourceGroup) {
            return visitor.visitCreateResourceGroup(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DropResourceGroupContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DROP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DROP, 0)!;
    }
    public KW_RESOURCE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RESOURCE, 0)!;
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GROUP, 0)!;
    }
    public groupName(): GroupNameContext {
        return this.getRuleContext(0, GroupNameContext)!;
    }
    public KW_FORCE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FORCE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dropResourceGroup;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDropResourceGroup) {
             listener.enterDropResourceGroup(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDropResourceGroup) {
             listener.exitDropResourceGroup(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDropResourceGroup) {
            return visitor.visitDropResourceGroup(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SetResourceGroupContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public KW_RESOURCE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RESOURCE, 0)!;
    }
    public KW_GROUP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GROUP, 0)!;
    }
    public groupName(): GroupNameContext {
        return this.getRuleContext(0, GroupNameContext)!;
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOR, 0);
    }
    public decimalLiteral(): DecimalLiteralContext[];
    public decimalLiteral(i: number): DecimalLiteralContext | null;
    public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DecimalLiteralContext);
        }

        return this.getRuleContext(i, DecimalLiteralContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_setResourceGroup;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetResourceGroup) {
             listener.enterSetResourceGroup(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetResourceGroup) {
             listener.exitSetResourceGroup(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetResourceGroup) {
            return visitor.visitSetResourceGroup(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ResourceGroupVcpuSpecContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public decimalLiteral(): DecimalLiteralContext[];
    public decimalLiteral(i: number): DecimalLiteralContext | null;
    public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DecimalLiteralContext);
        }

        return this.getRuleContext(i, DecimalLiteralContext);
    }
    public MINUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.MINUS, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public resourceGroupVcpuSpec(): ResourceGroupVcpuSpecContext[];
    public resourceGroupVcpuSpec(i: number): ResourceGroupVcpuSpecContext | null;
    public resourceGroupVcpuSpec(i?: number): ResourceGroupVcpuSpecContext[] | ResourceGroupVcpuSpecContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ResourceGroupVcpuSpecContext);
        }

        return this.getRuleContext(i, ResourceGroupVcpuSpecContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_resourceGroupVcpuSpec;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterResourceGroupVcpuSpec) {
             listener.enterResourceGroupVcpuSpec(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitResourceGroupVcpuSpec) {
             listener.exitResourceGroupVcpuSpec(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitResourceGroupVcpuSpec) {
            return visitor.visitResourceGroupVcpuSpec(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RenameUserContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RENAME(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RENAME, 0)!;
    }
    public KW_USER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_USER, 0)!;
    }
    public renameUserClause(): RenameUserClauseContext[];
    public renameUserClause(i: number): RenameUserClauseContext | null;
    public renameUserClause(i?: number): RenameUserClauseContext[] | RenameUserClauseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(RenameUserClauseContext);
        }

        return this.getRuleContext(i, RenameUserClauseContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_renameUser;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRenameUser) {
             listener.enterRenameUser(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRenameUser) {
             listener.exitRenameUser(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRenameUser) {
            return visitor.visitRenameUser(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RevokeStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_revokeStatement;
    }
    public override copyFrom(ctx: RevokeStatementContext): void {
        super.copyFrom(ctx);
    }
}
export class DetailRevokeContext extends RevokeStatementContext {
    public constructor(ctx: RevokeStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REVOKE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REVOKE, 0)!;
    }
    public privelegeClause(): PrivelegeClauseContext[];
    public privelegeClause(i: number): PrivelegeClauseContext | null;
    public privelegeClause(i?: number): PrivelegeClauseContext[] | PrivelegeClauseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PrivelegeClauseContext);
        }

        return this.getRuleContext(i, PrivelegeClauseContext);
    }
    public KW_ON(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ON, 0)!;
    }
    public privilegeLevel(): PrivilegeLevelContext {
        return this.getRuleContext(0, PrivilegeLevelContext)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FROM, 0)!;
    }
    public userOrRoleNames(): UserOrRoleNamesContext {
        return this.getRuleContext(0, UserOrRoleNamesContext)!;
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public privilegeObjectType(): PrivilegeObjectTypeContext | null {
        return this.getRuleContext(0, PrivilegeObjectTypeContext);
    }
    public ignoreUnknownUser(): IgnoreUnknownUserContext | null {
        return this.getRuleContext(0, IgnoreUnknownUserContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDetailRevoke) {
             listener.enterDetailRevoke(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDetailRevoke) {
             listener.exitDetailRevoke(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDetailRevoke) {
            return visitor.visitDetailRevoke(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShortRevokeContext extends RevokeStatementContext {
    public constructor(ctx: RevokeStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REVOKE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REVOKE, 0)!;
    }
    public KW_ALL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ALL, 0)!;
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.COMMA, 0)!;
    }
    public KW_GRANT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GRANT, 0)!;
    }
    public KW_OPTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_OPTION, 0)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FROM, 0)!;
    }
    public userOrRoleNames(): UserOrRoleNamesContext {
        return this.getRuleContext(0, UserOrRoleNamesContext)!;
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public KW_PRIVILEGES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRIVILEGES, 0);
    }
    public ignoreUnknownUser(): IgnoreUnknownUserContext | null {
        return this.getRuleContext(0, IgnoreUnknownUserContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShortRevoke) {
             listener.enterShortRevoke(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShortRevoke) {
             listener.exitShortRevoke(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShortRevoke) {
            return visitor.visitShortRevoke(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ProxyAndRoleRevokeContext extends RevokeStatementContext {
    public constructor(ctx: RevokeStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_REVOKE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REVOKE, 0)!;
    }
    public userOrRoleNames(): UserOrRoleNamesContext[];
    public userOrRoleNames(i: number): UserOrRoleNamesContext | null;
    public userOrRoleNames(i?: number): UserOrRoleNamesContext[] | UserOrRoleNamesContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserOrRoleNamesContext);
        }

        return this.getRuleContext(i, UserOrRoleNamesContext);
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FROM, 0)!;
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public KW_PROXY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROXY, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ON, 0);
    }
    public ignoreUnknownUser(): IgnoreUnknownUserContext | null {
        return this.getRuleContext(0, IgnoreUnknownUserContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterProxyAndRoleRevoke) {
             listener.enterProxyAndRoleRevoke(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitProxyAndRoleRevoke) {
             listener.exitProxyAndRoleRevoke(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitProxyAndRoleRevoke) {
            return visitor.visitProxyAndRoleRevoke(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IgnoreUnknownUserContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IGNORE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IGNORE, 0)!;
    }
    public KW_UNKNOWN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UNKNOWN, 0)!;
    }
    public KW_USER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_USER, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_ignoreUnknownUser;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIgnoreUnknownUser) {
             listener.enterIgnoreUnknownUser(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIgnoreUnknownUser) {
             listener.exitIgnoreUnknownUser(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIgnoreUnknownUser) {
            return visitor.visitIgnoreUnknownUser(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PrivilegeObjectTypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE, 0);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FUNCTION, 0);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROCEDURE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_privilegeObjectType;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPrivilegeObjectType) {
             listener.enterPrivilegeObjectType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPrivilegeObjectType) {
             listener.exitPrivilegeObjectType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPrivilegeObjectType) {
            return visitor.visitPrivilegeObjectType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SetPasswordStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_setPasswordStatement;
    }
    public override copyFrom(ctx: SetPasswordStatementContext): void {
        super.copyFrom(ctx);
    }
}
export class V57Context extends SetPasswordStatementContext {
    public constructor(ctx: SetPasswordStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public KW_PASSWORD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PASSWORD, 0)!;
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public passwordFunctionClause(): PasswordFunctionClauseContext | null {
        return this.getRuleContext(0, PasswordFunctionClauseContext);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOR, 0);
    }
    public userName(): UserNameContext | null {
        return this.getRuleContext(0, UserNameContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterV57) {
             listener.enterV57(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitV57) {
             listener.exitV57(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitV57) {
            return visitor.visitV57(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class V80Context extends SetPasswordStatementContext {
    public constructor(ctx: SetPasswordStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public KW_PASSWORD(): antlr.TerminalNode[];
    public KW_PASSWORD(i: number): antlr.TerminalNode | null;
    public KW_PASSWORD(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_PASSWORD);
    	} else {
    		return this.getToken(MySqlParser.KW_PASSWORD, i);
    	}
    }
    public KW_TO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TO, 0);
    }
    public KW_RANDOM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RANDOM, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode[];
    public STRING_LITERAL(i: number): antlr.TerminalNode | null;
    public STRING_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STRING_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.STRING_LITERAL, i);
    	}
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOR, 0);
    }
    public userName(): UserNameContext | null {
        return this.getRuleContext(0, UserNameContext);
    }
    public KW_REPLACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLACE, 0);
    }
    public KW_RETAIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RETAIN, 0);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterV80) {
             listener.enterV80(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitV80) {
             listener.exitV80(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitV80) {
            return visitor.visitV80(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UserSpecificationContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public userName(): UserNameContext {
        return this.getRuleContext(0, UserNameContext)!;
    }
    public userPasswordOption(): UserPasswordOptionContext {
        return this.getRuleContext(0, UserPasswordOptionContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_userSpecification;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUserSpecification) {
             listener.enterUserSpecification(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUserSpecification) {
             listener.exitUserSpecification(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUserSpecification) {
            return visitor.visitUserSpecification(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AlterUserAuthOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public userName(): UserNameContext {
        return this.getRuleContext(0, UserNameContext)!;
    }
    public KW_IDENTIFIED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IDENTIFIED, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BY, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public authOptionClause(): AuthOptionClauseContext | null {
        return this.getRuleContext(0, AuthOptionClauseContext);
    }
    public KW_RANDOM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RANDOM, 0);
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public authenticationRule(): AuthenticationRuleContext | null {
        return this.getRuleContext(0, AuthenticationRuleContext);
    }
    public KW_DISCARD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISCARD, 0);
    }
    public KW_OLD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OLD, 0);
    }
    public registrationOption(): RegistrationOptionContext | null {
        return this.getRuleContext(0, RegistrationOptionContext);
    }
    public factor(): FactorContext[];
    public factor(i: number): FactorContext | null;
    public factor(i?: number): FactorContext[] | FactorContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FactorContext);
        }

        return this.getRuleContext(i, FactorContext);
    }
    public KW_ADD(): antlr.TerminalNode[];
    public KW_ADD(i: number): antlr.TerminalNode | null;
    public KW_ADD(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ADD);
    	} else {
    		return this.getToken(MySqlParser.KW_ADD, i);
    	}
    }
    public KW_MODIFY(): antlr.TerminalNode[];
    public KW_MODIFY(i: number): antlr.TerminalNode | null;
    public KW_MODIFY(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_MODIFY);
    	} else {
    		return this.getToken(MySqlParser.KW_MODIFY, i);
    	}
    }
    public KW_DROP(): antlr.TerminalNode[];
    public KW_DROP(i: number): antlr.TerminalNode | null;
    public KW_DROP(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_DROP);
    	} else {
    		return this.getToken(MySqlParser.KW_DROP, i);
    	}
    }
    public factorAuthOption(): FactorAuthOptionContext[];
    public factorAuthOption(i: number): FactorAuthOptionContext | null;
    public factorAuthOption(i?: number): FactorAuthOptionContext[] | FactorAuthOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FactorAuthOptionContext);
        }

        return this.getRuleContext(i, FactorAuthOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_alterUserAuthOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAlterUserAuthOption) {
             listener.enterAlterUserAuthOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAlterUserAuthOption) {
             listener.exitAlterUserAuthOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAlterUserAuthOption) {
            return visitor.visitAlterUserAuthOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateUserAuthOptionContext extends antlr.ParserRuleContext {
    public _authPlugin?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IDENTIFIED(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IDENTIFIED, 0)!;
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BY, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_AND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AND, 0);
    }
    public createUserAuthOption(): CreateUserAuthOptionContext | null {
        return this.getRuleContext(0, CreateUserAuthOptionContext);
    }
    public KW_RANDOM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RANDOM, 0);
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public createUserInitialAuthOption(): CreateUserInitialAuthOptionContext | null {
        return this.getRuleContext(0, CreateUserInitialAuthOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createUserAuthOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateUserAuthOption) {
             listener.enterCreateUserAuthOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateUserAuthOption) {
             listener.exitCreateUserAuthOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateUserAuthOption) {
            return visitor.visitCreateUserAuthOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateUserInitialAuthOptionContext extends antlr.ParserRuleContext {
    public _authPlugin?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INITIAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INITIAL, 0)!;
    }
    public KW_AUTHENTICATION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AUTHENTICATION, 0)!;
    }
    public KW_IDENTIFIED(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IDENTIFIED, 0)!;
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BY, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_RANDOM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RANDOM, 0);
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createUserInitialAuthOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateUserInitialAuthOption) {
             listener.enterCreateUserInitialAuthOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateUserInitialAuthOption) {
             listener.exitCreateUserInitialAuthOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateUserInitialAuthOption) {
            return visitor.visitCreateUserInitialAuthOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UserAuthOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_userAuthOption;
    }
    public override copyFrom(ctx: UserAuthOptionContext): void {
        super.copyFrom(ctx);
    }
}
export class SimpleAuthOptionContext extends UserAuthOptionContext {
    public constructor(ctx: UserAuthOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public userName(): UserNameContext {
        return this.getRuleContext(0, UserNameContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSimpleAuthOption) {
             listener.enterSimpleAuthOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSimpleAuthOption) {
             listener.exitSimpleAuthOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSimpleAuthOption) {
            return visitor.visitSimpleAuthOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ModuleAuthOptionContext extends UserAuthOptionContext {
    public constructor(ctx: UserAuthOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public userName(): UserNameContext {
        return this.getRuleContext(0, UserNameContext)!;
    }
    public KW_IDENTIFIED(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IDENTIFIED, 0)!;
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_WITH, 0)!;
    }
    public authenticationRule(): AuthenticationRuleContext {
        return this.getRuleContext(0, AuthenticationRuleContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterModuleAuthOption) {
             listener.enterModuleAuthOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitModuleAuthOption) {
             listener.exitModuleAuthOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitModuleAuthOption) {
            return visitor.visitModuleAuthOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class RandomAuthOptionContext extends UserAuthOptionContext {
    public constructor(ctx: UserAuthOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public userName(): UserNameContext {
        return this.getRuleContext(0, UserNameContext)!;
    }
    public KW_IDENTIFIED(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IDENTIFIED, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BY, 0)!;
    }
    public KW_RANDOM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RANDOM, 0)!;
    }
    public KW_PASSWORD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PASSWORD, 0)!;
    }
    public authOptionClause(): AuthOptionClauseContext {
        return this.getRuleContext(0, AuthOptionClauseContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRandomAuthOption) {
             listener.enterRandomAuthOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRandomAuthOption) {
             listener.exitRandomAuthOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRandomAuthOption) {
            return visitor.visitRandomAuthOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class StringAuthOptionContext extends UserAuthOptionContext {
    public constructor(ctx: UserAuthOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public userName(): UserNameContext {
        return this.getRuleContext(0, UserNameContext)!;
    }
    public KW_IDENTIFIED(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IDENTIFIED, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BY, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public authOptionClause(): AuthOptionClauseContext {
        return this.getRuleContext(0, AuthOptionClauseContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterStringAuthOption) {
             listener.enterStringAuthOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitStringAuthOption) {
             listener.exitStringAuthOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitStringAuthOption) {
            return visitor.visitStringAuthOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class HashAuthOptionContext extends UserAuthOptionContext {
    public _hashed?: Token | null;
    public constructor(ctx: UserAuthOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public userName(): UserNameContext {
        return this.getRuleContext(0, UserNameContext)!;
    }
    public KW_IDENTIFIED(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IDENTIFIED, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BY, 0)!;
    }
    public KW_PASSWORD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PASSWORD, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHashAuthOption) {
             listener.enterHashAuthOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHashAuthOption) {
             listener.exitHashAuthOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHashAuthOption) {
            return visitor.visitHashAuthOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AuthOptionClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REPLACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLACE, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_RETAIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RETAIN, 0);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT, 0);
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_authOptionClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAuthOptionClause) {
             listener.enterAuthOptionClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAuthOptionClause) {
             listener.exitAuthOptionClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAuthOptionClause) {
            return visitor.visitAuthOptionClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AuthenticationRuleContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_authenticationRule;
    }
    public override copyFrom(ctx: AuthenticationRuleContext): void {
        super.copyFrom(ctx);
    }
}
export class PasswordModuleOptionContext extends AuthenticationRuleContext {
    public _authPlugin?: UidContext;
    public constructor(ctx: AuthenticationRuleContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_USING(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_USING, 0)!;
    }
    public passwordFunctionClause(): PasswordFunctionClauseContext {
        return this.getRuleContext(0, PasswordFunctionClauseContext)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPasswordModuleOption) {
             listener.enterPasswordModuleOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPasswordModuleOption) {
             listener.exitPasswordModuleOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPasswordModuleOption) {
            return visitor.visitPasswordModuleOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ModuleContext extends AuthenticationRuleContext {
    public _authPlugin?: UidContext;
    public constructor(ctx: AuthenticationRuleContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public authOptionClause(): AuthOptionClauseContext | null {
        return this.getRuleContext(0, AuthOptionClauseContext);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BY, 0);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USING, 0);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_RANDOM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RANDOM, 0);
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterModule) {
             listener.enterModule(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitModule) {
             listener.exitModule(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitModule) {
            return visitor.visitModule(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TlsOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SSL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SSL, 0);
    }
    public KW_X509(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_X509, 0);
    }
    public KW_CIPHER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CIPHER, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_ISSUER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ISSUER, 0);
    }
    public KW_SUBJECT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBJECT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tlsOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTlsOption) {
             listener.enterTlsOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTlsOption) {
             listener.exitTlsOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTlsOption) {
            return visitor.visitTlsOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UserResourceOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_MAX_QUERIES_PER_HOUR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX_QUERIES_PER_HOUR, 0);
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public KW_MAX_UPDATES_PER_HOUR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX_UPDATES_PER_HOUR, 0);
    }
    public KW_MAX_CONNECTIONS_PER_HOUR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR, 0);
    }
    public KW_MAX_USER_CONNECTIONS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX_USER_CONNECTIONS, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_userResourceOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUserResourceOption) {
             listener.enterUserResourceOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUserResourceOption) {
             listener.exitUserResourceOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUserResourceOption) {
            return visitor.visitUserResourceOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UserPasswordOptionContext extends antlr.ParserRuleContext {
    public _expireType?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD, 0);
    }
    public KW_EXPIRE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXPIRE, 0);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public KW_DAY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DAY, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public KW_NEVER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NEVER, 0);
    }
    public KW_INTERVAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INTERVAL, 0);
    }
    public KW_HISTORY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HISTORY, 0);
    }
    public KW_REUSE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REUSE, 0);
    }
    public KW_REQUIRE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REQUIRE, 0);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT, 0);
    }
    public KW_OPTIONAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OPTIONAL, 0);
    }
    public KW_FAILED_LOGIN_ATTEMPTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FAILED_LOGIN_ATTEMPTS, 0);
    }
    public KW_PASSWORD_LOCK_TIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD_LOCK_TIME, 0);
    }
    public KW_UNBOUNDED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNBOUNDED, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_userPasswordOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUserPasswordOption) {
             listener.enterUserPasswordOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUserPasswordOption) {
             listener.exitUserPasswordOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUserPasswordOption) {
            return visitor.visitUserPasswordOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UserLockOptionContext extends antlr.ParserRuleContext {
    public _lockType?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ACCOUNT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ACCOUNT, 0)!;
    }
    public KW_LOCK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCK, 0);
    }
    public KW_UNLOCK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNLOCK, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_userLockOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUserLockOption) {
             listener.enterUserLockOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUserLockOption) {
             listener.exitUserLockOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUserLockOption) {
            return visitor.visitUserLockOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FactorAuthOptionContext extends antlr.ParserRuleContext {
    public _authPlugin?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IDENTIFIED(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IDENTIFIED, 0)!;
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BY, 0);
    }
    public KW_RANDOM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RANDOM, 0);
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_factorAuthOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFactorAuthOption) {
             listener.enterFactorAuthOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFactorAuthOption) {
             listener.exitFactorAuthOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFactorAuthOption) {
            return visitor.visitFactorAuthOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RegistrationOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public factor(): FactorContext {
        return this.getRuleContext(0, FactorContext)!;
    }
    public KW_INITIATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INITIATE, 0);
    }
    public KW_REGISTRATION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REGISTRATION, 0);
    }
    public KW_FINISH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FINISH, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET, 0);
    }
    public KW_CHALLENGE_RESPONSE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHALLENGE_RESPONSE, 0);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_UNREGISTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNREGISTER, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_registrationOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRegistrationOption) {
             listener.enterRegistrationOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRegistrationOption) {
             listener.exitRegistrationOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRegistrationOption) {
            return visitor.visitRegistrationOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FactorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FACTOR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FACTOR, 0)!;
    }
    public TWO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.TWO_DECIMAL, 0);
    }
    public THREE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.THREE_DECIMAL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_factor;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFactor) {
             listener.enterFactor(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFactor) {
             listener.exitFactor(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFactor) {
            return visitor.visitFactor(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PrivelegeClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public privilege(): PrivilegeContext {
        return this.getRuleContext(0, PrivilegeContext)!;
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public columnNames(): ColumnNamesContext | null {
        return this.getRuleContext(0, ColumnNamesContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_privelegeClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPrivelegeClause) {
             listener.enterPrivelegeClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPrivelegeClause) {
             listener.exitPrivelegeClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPrivelegeClause) {
            return visitor.visitPrivelegeClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PrivilegeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public KW_PRIVILEGES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRIVILEGES, 0);
    }
    public KW_ALTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALTER, 0);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROUTINE, 0);
    }
    public KW_CREATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CREATE, 0);
    }
    public KW_TEMPORARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TEMPORARY, 0);
    }
    public KW_TABLES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLES, 0);
    }
    public KW_VIEW(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VIEW, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USER, 0);
    }
    public KW_TABLESPACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLESPACE, 0);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROLE, 0);
    }
    public KW_DELETE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DELETE, 0);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DROP, 0);
    }
    public KW_EVENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EVENT, 0);
    }
    public KW_EXECUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXECUTE, 0);
    }
    public KW_FILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FILE, 0);
    }
    public KW_GRANT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GRANT, 0);
    }
    public KW_OPTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OPTION, 0);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEX, 0);
    }
    public KW_INSERT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INSERT, 0);
    }
    public KW_LOCK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCK, 0);
    }
    public KW_PROCESS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROCESS, 0);
    }
    public KW_PROXY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROXY, 0);
    }
    public KW_REFERENCES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REFERENCES, 0);
    }
    public KW_RELOAD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELOAD, 0);
    }
    public KW_REPLICATION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATION, 0);
    }
    public KW_CLIENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CLIENT, 0);
    }
    public KW_SLAVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SLAVE, 0);
    }
    public KW_SELECT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SELECT, 0);
    }
    public KW_SHOW(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SHOW, 0);
    }
    public KW_DATABASES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATABASES, 0);
    }
    public KW_SHUTDOWN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SHUTDOWN, 0);
    }
    public KW_SUPER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUPER, 0);
    }
    public KW_TRIGGER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRIGGER, 0);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UPDATE, 0);
    }
    public KW_USAGE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USAGE, 0);
    }
    public KW_APPLICATION_PASSWORD_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_APPLICATION_PASSWORD_ADMIN, 0);
    }
    public KW_AUDIT_ABORT_EXEMPT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUDIT_ABORT_EXEMPT, 0);
    }
    public KW_AUDIT_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUDIT_ADMIN, 0);
    }
    public KW_AUTHENTICATION_POLICY_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN, 0);
    }
    public KW_BACKUP_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BACKUP_ADMIN, 0);
    }
    public KW_BINLOG_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINLOG_ADMIN, 0);
    }
    public KW_BINLOG_ENCRYPTION_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN, 0);
    }
    public KW_CLONE_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CLONE_ADMIN, 0);
    }
    public KW_CONNECTION_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONNECTION_ADMIN, 0);
    }
    public KW_ENCRYPTION_KEY_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENCRYPTION_KEY_ADMIN, 0);
    }
    public KW_FIREWALL_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIREWALL_ADMIN, 0);
    }
    public KW_FIREWALL_EXEMPT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIREWALL_EXEMPT, 0);
    }
    public KW_FIREWALL_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIREWALL_USER, 0);
    }
    public KW_FLUSH_OPTIMIZER_COSTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FLUSH_OPTIMIZER_COSTS, 0);
    }
    public KW_FLUSH_STATUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FLUSH_STATUS, 0);
    }
    public KW_FLUSH_TABLES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FLUSH_TABLES, 0);
    }
    public KW_FLUSH_USER_RESOURCES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FLUSH_USER_RESOURCES, 0);
    }
    public KW_GROUP_REPLICATION_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GROUP_REPLICATION_ADMIN, 0);
    }
    public KW_INNODB_REDO_LOG_ARCHIVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE, 0);
    }
    public KW_INNODB_REDO_LOG_ENABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INNODB_REDO_LOG_ENABLE, 0);
    }
    public KW_NDB_STORED_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NDB_STORED_USER, 0);
    }
    public KW_PASSWORDLESS_USER_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORDLESS_USER_ADMIN, 0);
    }
    public KW_PERSIST_RO_VARIABLES_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN, 0);
    }
    public KW_REPLICATION_APPLIER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATION_APPLIER, 0);
    }
    public KW_REPLICATION_SLAVE_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATION_SLAVE_ADMIN, 0);
    }
    public KW_RESOURCE_GROUP_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RESOURCE_GROUP_ADMIN, 0);
    }
    public KW_RESOURCE_GROUP_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RESOURCE_GROUP_USER, 0);
    }
    public KW_ROLE_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROLE_ADMIN, 0);
    }
    public KW_SERVICE_CONNECTION_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SERVICE_CONNECTION_ADMIN, 0);
    }
    public KW_SESSION_VARIABLES_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SESSION_VARIABLES_ADMIN, 0);
    }
    public KW_SET_USER_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET_USER_ID, 0);
    }
    public KW_SKIP_QUERY_REWRITE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SKIP_QUERY_REWRITE, 0);
    }
    public KW_SHOW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SHOW_ROUTINE, 0);
    }
    public KW_SYSTEM_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SYSTEM_USER, 0);
    }
    public KW_SYSTEM_VARIABLES_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SYSTEM_VARIABLES_ADMIN, 0);
    }
    public KW_TABLE_ENCRYPTION_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE_ENCRYPTION_ADMIN, 0);
    }
    public KW_TP_CONNECTION_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TP_CONNECTION_ADMIN, 0);
    }
    public KW_VERSION_TOKEN_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VERSION_TOKEN_ADMIN, 0);
    }
    public KW_XA_RECOVER_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_XA_RECOVER_ADMIN, 0);
    }
    public KW_LOAD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOAD, 0);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FROM, 0);
    }
    public KW_S3(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_S3, 0);
    }
    public KW_INTO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INTO, 0);
    }
    public KW_INVOKE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INVOKE, 0);
    }
    public KW_LAMBDA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LAMBDA, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_privilege;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPrivilege) {
             listener.enterPrivilege(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPrivilege) {
             listener.exitPrivilege(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPrivilege) {
            return visitor.visitPrivilege(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PrivilegeLevelContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_privilegeLevel;
    }
    public override copyFrom(ctx: PrivilegeLevelContext): void {
        super.copyFrom(ctx);
    }
}
export class DefiniteSchemaPrivLevelContext extends PrivilegeLevelContext {
    public constructor(ctx: PrivilegeLevelContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public DOT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.DOT, 0)!;
    }
    public STAR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STAR, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDefiniteSchemaPrivLevel) {
             listener.enterDefiniteSchemaPrivLevel(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDefiniteSchemaPrivLevel) {
             listener.exitDefiniteSchemaPrivLevel(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefiniteSchemaPrivLevel) {
            return visitor.visitDefiniteSchemaPrivLevel(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class DefiniteFullTablePrivLevel2Context extends PrivilegeLevelContext {
    public constructor(ctx: PrivilegeLevelContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public dottedId(): DottedIdContext {
        return this.getRuleContext(0, DottedIdContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDefiniteFullTablePrivLevel2) {
             listener.enterDefiniteFullTablePrivLevel2(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDefiniteFullTablePrivLevel2) {
             listener.exitDefiniteFullTablePrivLevel2(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefiniteFullTablePrivLevel2) {
            return visitor.visitDefiniteFullTablePrivLevel2(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class DefiniteFullTablePrivLevelContext extends PrivilegeLevelContext {
    public constructor(ctx: PrivilegeLevelContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public DOT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.DOT, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDefiniteFullTablePrivLevel) {
             listener.enterDefiniteFullTablePrivLevel(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDefiniteFullTablePrivLevel) {
             listener.exitDefiniteFullTablePrivLevel(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefiniteFullTablePrivLevel) {
            return visitor.visitDefiniteFullTablePrivLevel(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class GlobalPrivLevelContext extends PrivilegeLevelContext {
    public constructor(ctx: PrivilegeLevelContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public STAR(): antlr.TerminalNode[];
    public STAR(i: number): antlr.TerminalNode | null;
    public STAR(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STAR);
    	} else {
    		return this.getToken(MySqlParser.STAR, i);
    	}
    }
    public DOT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.DOT, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterGlobalPrivLevel) {
             listener.enterGlobalPrivLevel(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitGlobalPrivLevel) {
             listener.exitGlobalPrivLevel(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitGlobalPrivLevel) {
            return visitor.visitGlobalPrivLevel(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class DefiniteTablePrivLevelContext extends PrivilegeLevelContext {
    public constructor(ctx: PrivilegeLevelContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDefiniteTablePrivLevel) {
             listener.enterDefiniteTablePrivLevel(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDefiniteTablePrivLevel) {
             listener.exitDefiniteTablePrivLevel(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefiniteTablePrivLevel) {
            return visitor.visitDefiniteTablePrivLevel(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class CurrentSchemaPriviLevelContext extends PrivilegeLevelContext {
    public constructor(ctx: PrivilegeLevelContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public STAR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STAR, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCurrentSchemaPriviLevel) {
             listener.enterCurrentSchemaPriviLevel(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCurrentSchemaPriviLevel) {
             listener.exitCurrentSchemaPriviLevel(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCurrentSchemaPriviLevel) {
            return visitor.visitCurrentSchemaPriviLevel(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RenameUserClauseContext extends antlr.ParserRuleContext {
    public _fromFirst?: UserNameContext;
    public _toFirst?: UserNameContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TO, 0)!;
    }
    public userName(): UserNameContext[];
    public userName(i: number): UserNameContext | null;
    public userName(i?: number): UserNameContext[] | UserNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserNameContext);
        }

        return this.getRuleContext(i, UserNameContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_renameUserClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRenameUserClause) {
             listener.enterRenameUserClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRenameUserClause) {
             listener.exitRenameUserClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRenameUserClause) {
            return visitor.visitRenameUserClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AnalyzeTableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ANALYZE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ANALYZE, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableNames(): TableNamesContext | null {
        return this.getRuleContext(0, TableNamesContext);
    }
    public tableActionOption(): TableActionOptionContext | null {
        return this.getRuleContext(0, TableActionOptionContext);
    }
    public tableName(): TableNameContext | null {
        return this.getRuleContext(0, TableNameContext);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UPDATE, 0);
    }
    public KW_HISTOGRAM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HISTOGRAM, 0);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ON, 0);
    }
    public columnNames(): ColumnNamesContext | null {
        return this.getRuleContext(0, ColumnNamesContext);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public KW_BUCKETS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BUCKETS, 0);
    }
    public columnName(): ColumnNameContext | null {
        return this.getRuleContext(0, ColumnNameContext);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USING, 0);
    }
    public KW_DATA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATA, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_DROP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DROP, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_analyzeTable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAnalyzeTable) {
             listener.enterAnalyzeTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAnalyzeTable) {
             listener.exitAnalyzeTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAnalyzeTable) {
            return visitor.visitAnalyzeTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CheckTableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHECK(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CHECK, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableNames(): TableNamesContext {
        return this.getRuleContext(0, TableNamesContext)!;
    }
    public checkTableOption(): CheckTableOptionContext[];
    public checkTableOption(i: number): CheckTableOptionContext | null;
    public checkTableOption(i?: number): CheckTableOptionContext[] | CheckTableOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(CheckTableOptionContext);
        }

        return this.getRuleContext(i, CheckTableOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_checkTable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCheckTable) {
             listener.enterCheckTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCheckTable) {
             listener.exitCheckTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCheckTable) {
            return visitor.visitCheckTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ChecksumTableContext extends antlr.ParserRuleContext {
    public _actionOption?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHECKSUM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CHECKSUM, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableNames(): TableNamesContext {
        return this.getRuleContext(0, TableNamesContext)!;
    }
    public KW_QUICK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUICK, 0);
    }
    public KW_EXTENDED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXTENDED, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_checksumTable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterChecksumTable) {
             listener.enterChecksumTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitChecksumTable) {
             listener.exitChecksumTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitChecksumTable) {
            return visitor.visitChecksumTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OptimizeTableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OPTIMIZE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_OPTIMIZE, 0)!;
    }
    public tableNames(): TableNamesContext {
        return this.getRuleContext(0, TableNamesContext)!;
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE, 0);
    }
    public KW_TABLES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLES, 0);
    }
    public tableActionOption(): TableActionOptionContext | null {
        return this.getRuleContext(0, TableActionOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_optimizeTable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterOptimizeTable) {
             listener.enterOptimizeTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitOptimizeTable) {
             listener.exitOptimizeTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitOptimizeTable) {
            return visitor.visitOptimizeTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class RepairTableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REPAIR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPAIR, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableNames(): TableNamesContext {
        return this.getRuleContext(0, TableNamesContext)!;
    }
    public tableActionOption(): TableActionOptionContext | null {
        return this.getRuleContext(0, TableActionOptionContext);
    }
    public KW_QUICK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUICK, 0);
    }
    public KW_EXTENDED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXTENDED, 0);
    }
    public KW_USE_FRM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USE_FRM, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_repairTable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRepairTable) {
             listener.enterRepairTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRepairTable) {
             listener.exitRepairTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRepairTable) {
            return visitor.visitRepairTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableActionOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NO_WRITE_TO_BINLOG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NO_WRITE_TO_BINLOG, 0);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCAL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tableActionOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableActionOption) {
             listener.enterTableActionOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableActionOption) {
             listener.exitTableActionOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableActionOption) {
            return visitor.visitTableActionOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CheckTableOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOR, 0);
    }
    public KW_UPGRADE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UPGRADE, 0);
    }
    public KW_QUICK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUICK, 0);
    }
    public KW_FAST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FAST, 0);
    }
    public KW_MEDIUM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MEDIUM, 0);
    }
    public KW_EXTENDED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXTENDED, 0);
    }
    public KW_CHANGED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHANGED, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_checkTableOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCheckTableOption) {
             listener.enterCheckTableOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCheckTableOption) {
             listener.exitCheckTableOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCheckTableOption) {
            return visitor.visitCheckTableOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CreateFunctionContext extends antlr.ParserRuleContext {
    public _returnType?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_FUNCTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FUNCTION, 0)!;
    }
    public functionNameCreate(): FunctionNameCreateContext {
        return this.getRuleContext(0, FunctionNameCreateContext)!;
    }
    public KW_RETURNS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RETURNS, 0)!;
    }
    public KW_SONAME(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SONAME, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public KW_STRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STRING, 0);
    }
    public KW_INTEGER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INTEGER, 0);
    }
    public KW_REAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REAL, 0);
    }
    public KW_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DECIMAL, 0);
    }
    public KW_AGGREGATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AGGREGATE, 0);
    }
    public ifNotExists(): IfNotExistsContext | null {
        return this.getRuleContext(0, IfNotExistsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_createFunction;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCreateFunction) {
             listener.enterCreateFunction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCreateFunction) {
             listener.exitCreateFunction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCreateFunction) {
            return visitor.visitCreateFunction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class InstallComponentContext extends antlr.ParserRuleContext {
    public _component_name?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INSTALL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INSTALL, 0)!;
    }
    public KW_COMPONENT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COMPONENT, 0)!;
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET, 0);
    }
    public variableExpr(): VariableExprContext[];
    public variableExpr(i: number): VariableExprContext | null;
    public variableExpr(i?: number): VariableExprContext[] | VariableExprContext | null {
        if (i === undefined) {
            return this.getRuleContexts(VariableExprContext);
        }

        return this.getRuleContext(i, VariableExprContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_installComponent;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterInstallComponent) {
             listener.enterInstallComponent(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitInstallComponent) {
             listener.exitInstallComponent(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitInstallComponent) {
            return visitor.visitInstallComponent(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class VariableExprContext extends antlr.ParserRuleContext {
    public _system_var_name?: FullIdContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public KW_GLOBAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GLOBAL, 0);
    }
    public GLOBAL_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.GLOBAL_ID, 0);
    }
    public KW_PERSIST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PERSIST, 0);
    }
    public PERSIST_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.PERSIST_ID, 0);
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_variableExpr;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterVariableExpr) {
             listener.enterVariableExpr(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitVariableExpr) {
             listener.exitVariableExpr(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitVariableExpr) {
            return visitor.visitVariableExpr(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UninstallComponentContext extends antlr.ParserRuleContext {
    public _component_name?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UNINSTALL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UNINSTALL, 0)!;
    }
    public KW_COMPONENT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COMPONENT, 0)!;
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_uninstallComponent;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUninstallComponent) {
             listener.enterUninstallComponent(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUninstallComponent) {
             listener.exitUninstallComponent(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUninstallComponent) {
            return visitor.visitUninstallComponent(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class InstallPluginContext extends antlr.ParserRuleContext {
    public _pluginName?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_INSTALL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INSTALL, 0)!;
    }
    public KW_PLUGIN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PLUGIN, 0)!;
    }
    public KW_SONAME(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SONAME, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_installPlugin;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterInstallPlugin) {
             listener.enterInstallPlugin(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitInstallPlugin) {
             listener.exitInstallPlugin(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitInstallPlugin) {
            return visitor.visitInstallPlugin(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UninstallPluginContext extends antlr.ParserRuleContext {
    public _pluginName?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_UNINSTALL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_UNINSTALL, 0)!;
    }
    public KW_PLUGIN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PLUGIN, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_uninstallPlugin;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUninstallPlugin) {
             listener.enterUninstallPlugin(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUninstallPlugin) {
             listener.exitUninstallPlugin(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUninstallPlugin) {
            return visitor.visitUninstallPlugin(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CloneStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CLONE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CLONE, 0)!;
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCAL, 0);
    }
    public KW_DATA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATA, 0);
    }
    public KW_DIRECTORY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DIRECTORY, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode[];
    public STRING_LITERAL(i: number): antlr.TerminalNode | null;
    public STRING_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STRING_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.STRING_LITERAL, i);
    	}
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public KW_INSTANCE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INSTANCE, 0);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FROM, 0);
    }
    public userHostPort(): UserHostPortContext | null {
        return this.getRuleContext(0, UserHostPortContext);
    }
    public KW_IDENTIFIED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IDENTIFIED, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BY, 0);
    }
    public KW_REQUIRE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REQUIRE, 0);
    }
    public KW_SSL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SSL, 0);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NO, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_cloneStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCloneStatement) {
             listener.enterCloneStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCloneStatement) {
             listener.exitCloneStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCloneStatement) {
            return visitor.visitCloneStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SetStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_setStatement;
    }
    public override copyFrom(ctx: SetStatementContext): void {
        super.copyFrom(ctx);
    }
}
export class SetTransactionContext extends SetStatementContext {
    public constructor(ctx: SetStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public setTransactionStatement(): SetTransactionStatementContext {
        return this.getRuleContext(0, SetTransactionStatementContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetTransaction) {
             listener.enterSetTransaction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetTransaction) {
             listener.exitSetTransaction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetTransaction) {
            return visitor.visitSetTransaction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SetCharsetContext extends SetStatementContext {
    public constructor(ctx: SetStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public charSet(): CharSetContext {
        return this.getRuleContext(0, CharSetContext)!;
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetCharset) {
             listener.enterSetCharset(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetCharset) {
             listener.exitSetCharset(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetCharset) {
            return visitor.visitSetCharset(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SetNamesContext extends SetStatementContext {
    public constructor(ctx: SetStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public KW_NAMES(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_NAMES, 0)!;
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public KW_COLLATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLLATE, 0);
    }
    public collationName(): CollationNameContext | null {
        return this.getRuleContext(0, CollationNameContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetNames) {
             listener.enterSetNames(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetNames) {
             listener.exitSetNames(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetNames) {
            return visitor.visitSetNames(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SetPasswordContext extends SetStatementContext {
    public constructor(ctx: SetStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public setPasswordStatement(): SetPasswordStatementContext {
        return this.getRuleContext(0, SetPasswordStatementContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetPassword) {
             listener.enterSetPassword(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetPassword) {
             listener.exitSetPassword(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetPassword) {
            return visitor.visitSetPassword(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SetAutocommitContext extends SetStatementContext {
    public constructor(ctx: SetStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public setAutocommitStatement(): SetAutocommitStatementContext {
        return this.getRuleContext(0, SetAutocommitStatementContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetAutocommit) {
             listener.enterSetAutocommit(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetAutocommit) {
             listener.exitSetAutocommit(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetAutocommit) {
            return visitor.visitSetAutocommit(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SetNewValueInsideTriggerContext extends SetStatementContext {
    public _system_var_name?: FullIdContext;
    public constructor(ctx: SetStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public expression(): ExpressionContext[];
    public expression(i: number): ExpressionContext | null;
    public expression(i?: number): ExpressionContext[] | ExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionContext);
        }

        return this.getRuleContext(i, ExpressionContext);
    }
    public fullId(): FullIdContext[];
    public fullId(i: number): FullIdContext | null;
    public fullId(i?: number): FullIdContext[] | FullIdContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FullIdContext);
        }

        return this.getRuleContext(i, FullIdContext);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public VAR_ASSIGN(): antlr.TerminalNode[];
    public VAR_ASSIGN(i: number): antlr.TerminalNode | null;
    public VAR_ASSIGN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.VAR_ASSIGN);
    	} else {
    		return this.getToken(MySqlParser.VAR_ASSIGN, i);
    	}
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetNewValueInsideTrigger) {
             listener.enterSetNewValueInsideTrigger(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetNewValueInsideTrigger) {
             listener.exitSetNewValueInsideTrigger(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetNewValueInsideTrigger) {
            return visitor.visitSetNewValueInsideTrigger(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SetVariableContext extends SetStatementContext {
    public constructor(ctx: SetStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SET, 0)!;
    }
    public variableClause(): VariableClauseContext[];
    public variableClause(i: number): VariableClauseContext | null;
    public variableClause(i?: number): VariableClauseContext[] | VariableClauseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(VariableClauseContext);
        }

        return this.getRuleContext(i, VariableClauseContext);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public VAR_ASSIGN(): antlr.TerminalNode[];
    public VAR_ASSIGN(i: number): antlr.TerminalNode | null;
    public VAR_ASSIGN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.VAR_ASSIGN);
    	} else {
    		return this.getToken(MySqlParser.VAR_ASSIGN, i);
    	}
    }
    public expression(): ExpressionContext[];
    public expression(i: number): ExpressionContext | null;
    public expression(i?: number): ExpressionContext[] | ExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionContext);
        }

        return this.getRuleContext(i, ExpressionContext);
    }
    public KW_ON(): antlr.TerminalNode[];
    public KW_ON(i: number): antlr.TerminalNode | null;
    public KW_ON(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ON);
    	} else {
    		return this.getToken(MySqlParser.KW_ON, i);
    	}
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSetVariable) {
             listener.enterSetVariable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSetVariable) {
             listener.exitSetVariable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSetVariable) {
            return visitor.visitSetVariable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ShowStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_showStatement;
    }
    public override copyFrom(ctx: ShowStatementContext): void {
        super.copyFrom(ctx);
    }
}
export class ShowOpenTablesContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_OPEN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_OPEN, 0)!;
    }
    public KW_TABLES(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLES, 0)!;
    }
    public databaseName(): DatabaseNameContext | null {
        return this.getRuleContext(0, DatabaseNameContext);
    }
    public showFilter(): ShowFilterContext | null {
        return this.getRuleContext(0, ShowFilterContext);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FROM, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IN, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowOpenTables) {
             listener.enterShowOpenTables(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowOpenTables) {
             listener.exitShowOpenTables(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowOpenTables) {
            return visitor.visitShowOpenTables(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowGlobalInfoContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public showGlobalInfoClause(): ShowGlobalInfoClauseContext {
        return this.getRuleContext(0, ShowGlobalInfoClauseContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowGlobalInfo) {
             listener.enterShowGlobalInfo(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowGlobalInfo) {
             listener.exitShowGlobalInfo(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowGlobalInfo) {
            return visitor.visitShowGlobalInfo(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowCreateFullIdObjectContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public KW_EVENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EVENT, 0);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROCEDURE, 0);
    }
    public KW_TRIGGER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRIGGER, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowCreateFullIdObject) {
             listener.enterShowCreateFullIdObject(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowCreateFullIdObject) {
             listener.exitShowCreateFullIdObject(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowCreateFullIdObject) {
            return visitor.visitShowCreateFullIdObject(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowCreateUserContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_USER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_USER, 0)!;
    }
    public userName(): UserNameContext {
        return this.getRuleContext(0, UserNameContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowCreateUser) {
             listener.enterShowCreateUser(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowCreateUser) {
             listener.exitShowCreateUser(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowCreateUser) {
            return visitor.visitShowCreateUser(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowErrorsContext extends ShowStatementContext {
    public _errorFormat?: Token | null;
    public _offset?: DecimalLiteralContext;
    public _rowCount?: DecimalLiteralContext;
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_ERRORS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ERRORS, 0);
    }
    public KW_WARNINGS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WARNINGS, 0);
    }
    public KW_LIMIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LIMIT, 0);
    }
    public decimalLiteral(): DecimalLiteralContext[];
    public decimalLiteral(i: number): DecimalLiteralContext | null;
    public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DecimalLiteralContext);
        }

        return this.getRuleContext(i, DecimalLiteralContext);
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.COMMA, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowErrors) {
             listener.enterShowErrors(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowErrors) {
             listener.exitShowErrors(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowErrors) {
            return visitor.visitShowErrors(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowCreateFunctionContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_FUNCTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FUNCTION, 0)!;
    }
    public functionName(): FunctionNameContext {
        return this.getRuleContext(0, FunctionNameContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowCreateFunction) {
             listener.enterShowCreateFunction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowCreateFunction) {
             listener.exitShowCreateFunction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowCreateFunction) {
            return visitor.visitShowCreateFunction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowPercedureCodeContext extends ShowStatementContext {
    public _proc_name?: FullIdContext;
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_PROCEDURE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PROCEDURE, 0)!;
    }
    public KW_CODE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CODE, 0)!;
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowPercedureCode) {
             listener.enterShowPercedureCode(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowPercedureCode) {
             listener.exitShowPercedureCode(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowPercedureCode) {
            return visitor.visitShowPercedureCode(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowCountErrorsContext extends ShowStatementContext {
    public _errorFormat?: Token | null;
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_COUNT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COUNT, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public STAR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STAR, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_ERRORS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ERRORS, 0);
    }
    public KW_WARNINGS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WARNINGS, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowCountErrors) {
             listener.enterShowCountErrors(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowCountErrors) {
             listener.exitShowCountErrors(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowCountErrors) {
            return visitor.visitShowCountErrors(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowFunctionCodeContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_FUNCTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FUNCTION, 0)!;
    }
    public KW_CODE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CODE, 0)!;
    }
    public functionName(): FunctionNameContext {
        return this.getRuleContext(0, FunctionNameContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowFunctionCode) {
             listener.enterShowFunctionCode(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowFunctionCode) {
             listener.exitShowFunctionCode(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowFunctionCode) {
            return visitor.visitShowFunctionCode(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowObjectFilterContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public showCommonEntity(): ShowCommonEntityContext {
        return this.getRuleContext(0, ShowCommonEntityContext)!;
    }
    public showFilter(): ShowFilterContext | null {
        return this.getRuleContext(0, ShowFilterContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowObjectFilter) {
             listener.enterShowObjectFilter(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowObjectFilter) {
             listener.exitShowObjectFilter(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowObjectFilter) {
            return visitor.visitShowObjectFilter(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowReplicasContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_REPLICAS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPLICAS, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowReplicas) {
             listener.enterShowReplicas(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowReplicas) {
             listener.exitShowReplicas(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowReplicas) {
            return visitor.visitShowReplicas(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowCreateDbContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public databaseName(): DatabaseNameContext {
        return this.getRuleContext(0, DatabaseNameContext)!;
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATABASE, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEMA, 0);
    }
    public ifNotExists(): IfNotExistsContext | null {
        return this.getRuleContext(0, IfNotExistsContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowCreateDb) {
             listener.enterShowCreateDb(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowCreateDb) {
             listener.exitShowCreateDb(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowCreateDb) {
            return visitor.visitShowCreateDb(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowEngineContext extends ShowStatementContext {
    public _engineOption?: Token | null;
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_ENGINE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ENGINE, 0)!;
    }
    public engineName(): EngineNameContext {
        return this.getRuleContext(0, EngineNameContext)!;
    }
    public KW_STATUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STATUS, 0);
    }
    public KW_MUTEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MUTEX, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowEngine) {
             listener.enterShowEngine(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowEngine) {
             listener.exitShowEngine(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowEngine) {
            return visitor.visitShowEngine(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowSchemaFilterContext extends ShowStatementContext {
    public _schemaFormat?: Token | null;
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public showSchemaEntity(): ShowSchemaEntityContext {
        return this.getRuleContext(0, ShowSchemaEntityContext)!;
    }
    public databaseName(): DatabaseNameContext | null {
        return this.getRuleContext(0, DatabaseNameContext);
    }
    public showFilter(): ShowFilterContext | null {
        return this.getRuleContext(0, ShowFilterContext);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FROM, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IN, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowSchemaFilter) {
             listener.enterShowSchemaFilter(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowSchemaFilter) {
             listener.exitShowSchemaFilter(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowSchemaFilter) {
            return visitor.visitShowSchemaFilter(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowIndexesContext extends ShowStatementContext {
    public _indexFormat?: Token | null;
    public _tableFormat?: Token | null;
    public _schemaFormat?: Token | null;
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEX, 0);
    }
    public KW_INDEXES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEXES, 0);
    }
    public KW_KEYS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEYS, 0);
    }
    public KW_FROM(): antlr.TerminalNode[];
    public KW_FROM(i: number): antlr.TerminalNode | null;
    public KW_FROM(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_FROM);
    	} else {
    		return this.getToken(MySqlParser.KW_FROM, i);
    	}
    }
    public KW_IN(): antlr.TerminalNode[];
    public KW_IN(i: number): antlr.TerminalNode | null;
    public KW_IN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_IN);
    	} else {
    		return this.getToken(MySqlParser.KW_IN, i);
    	}
    }
    public KW_EXTENDED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXTENDED, 0);
    }
    public databaseName(): DatabaseNameContext | null {
        return this.getRuleContext(0, DatabaseNameContext);
    }
    public KW_WHERE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WHERE, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowIndexes) {
             listener.enterShowIndexes(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowIndexes) {
             listener.exitShowIndexes(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowIndexes) {
            return visitor.visitShowIndexes(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowLogEventsContext extends ShowStatementContext {
    public _logFormat?: Token | null;
    public _filename?: Token | null;
    public _fromPosition?: DecimalLiteralContext;
    public _offset?: DecimalLiteralContext;
    public _rowCount?: DecimalLiteralContext;
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_EVENTS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EVENTS, 0)!;
    }
    public KW_BINLOG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINLOG, 0);
    }
    public KW_RELAYLOG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELAYLOG, 0);
    }
    public KW_IN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IN, 0);
    }
    public KW_FROM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FROM, 0);
    }
    public KW_LIMIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LIMIT, 0);
    }
    public channelOption(): ChannelOptionContext | null {
        return this.getRuleContext(0, ChannelOptionContext);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public decimalLiteral(): DecimalLiteralContext[];
    public decimalLiteral(i: number): DecimalLiteralContext | null;
    public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DecimalLiteralContext);
        }

        return this.getRuleContext(i, DecimalLiteralContext);
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.COMMA, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowLogEvents) {
             listener.enterShowLogEvents(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowLogEvents) {
             listener.exitShowLogEvents(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowLogEvents) {
            return visitor.visitShowLogEvents(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowMasterLogsContext extends ShowStatementContext {
    public _logFormat?: Token | null;
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_LOGS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LOGS, 0)!;
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINARY, 0);
    }
    public KW_MASTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowMasterLogs) {
             listener.enterShowMasterLogs(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowMasterLogs) {
             listener.exitShowMasterLogs(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowMasterLogs) {
            return visitor.visitShowMasterLogs(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowGrantsContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_GRANTS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GRANTS, 0)!;
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOR, 0);
    }
    public userOrRoleName(): UserOrRoleNameContext | null {
        return this.getRuleContext(0, UserOrRoleNameContext);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USING, 0);
    }
    public userOrRoleNames(): UserOrRoleNamesContext | null {
        return this.getRuleContext(0, UserOrRoleNamesContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowGrants) {
             listener.enterShowGrants(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowGrants) {
             listener.exitShowGrants(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowGrants) {
            return visitor.visitShowGrants(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowSlaveStatusContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_STATUS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_STATUS, 0)!;
    }
    public KW_REPLICA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICA, 0);
    }
    public KW_SLAVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SLAVE, 0);
    }
    public channelOption(): ChannelOptionContext | null {
        return this.getRuleContext(0, ChannelOptionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowSlaveStatus) {
             listener.enterShowSlaveStatus(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowSlaveStatus) {
             listener.exitShowSlaveStatus(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowSlaveStatus) {
            return visitor.visitShowSlaveStatus(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowCreateTableContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowCreateTable) {
             listener.enterShowCreateTable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowCreateTable) {
             listener.exitShowCreateTable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowCreateTable) {
            return visitor.visitShowCreateTable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowProfileContext extends ShowStatementContext {
    public _queryCount?: DecimalLiteralContext;
    public _rowCount?: DecimalLiteralContext;
    public _offset?: DecimalLiteralContext;
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_PROFILE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PROFILE, 0)!;
    }
    public showProfileType(): ShowProfileTypeContext[];
    public showProfileType(i: number): ShowProfileTypeContext | null;
    public showProfileType(i?: number): ShowProfileTypeContext[] | ShowProfileTypeContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ShowProfileTypeContext);
        }

        return this.getRuleContext(i, ShowProfileTypeContext);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOR, 0);
    }
    public KW_QUERY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUERY, 0);
    }
    public KW_LIMIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LIMIT, 0);
    }
    public decimalLiteral(): DecimalLiteralContext[];
    public decimalLiteral(i: number): DecimalLiteralContext | null;
    public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DecimalLiteralContext);
        }

        return this.getRuleContext(i, DecimalLiteralContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_OFFSET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OFFSET, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowProfile) {
             listener.enterShowProfile(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowProfile) {
             listener.exitShowProfile(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowProfile) {
            return visitor.visitShowProfile(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowColumnsContext extends ShowStatementContext {
    public _columnsFormat?: Token | null;
    public _tableFormat?: Token | null;
    public _schemaFormat?: Token | null;
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_COLUMNS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMNS, 0);
    }
    public KW_FIELDS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIELDS, 0);
    }
    public KW_FROM(): antlr.TerminalNode[];
    public KW_FROM(i: number): antlr.TerminalNode | null;
    public KW_FROM(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_FROM);
    	} else {
    		return this.getToken(MySqlParser.KW_FROM, i);
    	}
    }
    public KW_IN(): antlr.TerminalNode[];
    public KW_IN(i: number): antlr.TerminalNode | null;
    public KW_IN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_IN);
    	} else {
    		return this.getToken(MySqlParser.KW_IN, i);
    	}
    }
    public KW_EXTENDED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXTENDED, 0);
    }
    public KW_FULL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FULL, 0);
    }
    public databaseName(): DatabaseNameContext | null {
        return this.getRuleContext(0, DatabaseNameContext);
    }
    public showFilter(): ShowFilterContext | null {
        return this.getRuleContext(0, ShowFilterContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowColumns) {
             listener.enterShowColumns(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowColumns) {
             listener.exitShowColumns(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowColumns) {
            return visitor.visitShowColumns(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ShowCreateViewContext extends ShowStatementContext {
    public constructor(ctx: ShowStatementContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_SHOW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHOW, 0)!;
    }
    public KW_CREATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CREATE, 0)!;
    }
    public KW_VIEW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VIEW, 0)!;
    }
    public viewName(): ViewNameContext {
        return this.getRuleContext(0, ViewNameContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowCreateView) {
             listener.enterShowCreateView(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowCreateView) {
             listener.exitShowCreateView(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowCreateView) {
            return visitor.visitShowCreateView(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class VariableClauseContext extends antlr.ParserRuleContext {
    public _target?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LOCAL_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LOCAL_ID, 0);
    }
    public GLOBAL_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.GLOBAL_ID, 0);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public KW_GLOBAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GLOBAL, 0);
    }
    public KW_PERSIST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PERSIST, 0);
    }
    public KW_PERSIST_ONLY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PERSIST_ONLY, 0);
    }
    public KW_SESSION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SESSION, 0);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCAL, 0);
    }
    public AT_SIGN(): antlr.TerminalNode[];
    public AT_SIGN(i: number): antlr.TerminalNode | null;
    public AT_SIGN(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.AT_SIGN);
    	} else {
    		return this.getToken(MySqlParser.AT_SIGN, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_variableClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterVariableClause) {
             listener.enterVariableClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitVariableClause) {
             listener.exitVariableClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitVariableClause) {
            return visitor.visitVariableClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ShowCommonEntityContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHARACTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARACTER, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET, 0);
    }
    public KW_CHARSET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARSET, 0);
    }
    public KW_COLLATION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLLATION, 0);
    }
    public KW_DATABASES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATABASES, 0);
    }
    public KW_SCHEMAS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEMAS, 0);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FUNCTION, 0);
    }
    public KW_STATUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STATUS, 0);
    }
    public KW_PROCEDURE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROCEDURE, 0);
    }
    public KW_VARIABLES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VARIABLES, 0);
    }
    public KW_GLOBAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GLOBAL, 0);
    }
    public KW_SESSION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SESSION, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_showCommonEntity;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowCommonEntity) {
             listener.enterShowCommonEntity(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowCommonEntity) {
             listener.exitShowCommonEntity(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowCommonEntity) {
            return visitor.visitShowCommonEntity(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ShowFilterContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LIKE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LIKE, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public KW_WHERE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WHERE, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_showFilter;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowFilter) {
             listener.enterShowFilter(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowFilter) {
             listener.exitShowFilter(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowFilter) {
            return visitor.visitShowFilter(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ShowGlobalInfoClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ENGINES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENGINES, 0);
    }
    public KW_STORAGE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STORAGE, 0);
    }
    public KW_MASTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER, 0);
    }
    public KW_STATUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STATUS, 0);
    }
    public KW_PLUGINS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PLUGINS, 0);
    }
    public KW_PRIVILEGES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRIVILEGES, 0);
    }
    public KW_PROCESSLIST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROCESSLIST, 0);
    }
    public KW_FULL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FULL, 0);
    }
    public KW_PROFILES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROFILES, 0);
    }
    public KW_SLAVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SLAVE, 0);
    }
    public KW_HOSTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HOSTS, 0);
    }
    public KW_AUTHORS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUTHORS, 0);
    }
    public KW_CONTRIBUTORS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONTRIBUTORS, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_showGlobalInfoClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowGlobalInfoClause) {
             listener.enterShowGlobalInfoClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowGlobalInfoClause) {
             listener.exitShowGlobalInfoClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowGlobalInfoClause) {
            return visitor.visitShowGlobalInfoClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ShowSchemaEntityContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_EVENTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EVENTS, 0);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE, 0);
    }
    public KW_STATUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STATUS, 0);
    }
    public KW_TABLES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLES, 0);
    }
    public KW_EXTENDED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXTENDED, 0);
    }
    public KW_FULL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FULL, 0);
    }
    public KW_TRIGGERS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRIGGERS, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_showSchemaEntity;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowSchemaEntity) {
             listener.enterShowSchemaEntity(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowSchemaEntity) {
             listener.exitShowSchemaEntity(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowSchemaEntity) {
            return visitor.visitShowSchemaEntity(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ShowProfileTypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public KW_BLOCK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BLOCK, 0);
    }
    public KW_IO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IO, 0);
    }
    public KW_CONTEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONTEXT, 0);
    }
    public KW_SWITCHES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SWITCHES, 0);
    }
    public KW_CPU(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CPU, 0);
    }
    public KW_IPC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IPC, 0);
    }
    public KW_MEMORY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MEMORY, 0);
    }
    public KW_PAGE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PAGE, 0);
    }
    public KW_FAULTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FAULTS, 0);
    }
    public KW_SOURCE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE, 0);
    }
    public KW_SWAPS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SWAPS, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_showProfileType;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShowProfileType) {
             listener.enterShowProfileType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShowProfileType) {
             listener.exitShowProfileType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShowProfileType) {
            return visitor.visitShowProfileType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class BinlogStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BINLOG(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BINLOG, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_binlogStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterBinlogStatement) {
             listener.enterBinlogStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitBinlogStatement) {
             listener.exitBinlogStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitBinlogStatement) {
            return visitor.visitBinlogStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CacheIndexStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CACHE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CACHE, 0)!;
    }
    public KW_INDEX(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INDEX, 0)!;
    }
    public KW_IN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IN, 0)!;
    }
    public databaseName(): DatabaseNameContext {
        return this.getRuleContext(0, DatabaseNameContext)!;
    }
    public tableIndex(): TableIndexContext[];
    public tableIndex(i: number): TableIndexContext | null;
    public tableIndex(i?: number): TableIndexContext[] | TableIndexContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TableIndexContext);
        }

        return this.getRuleContext(i, TableIndexContext);
    }
    public tableName(): TableNameContext | null {
        return this.getRuleContext(0, TableNameContext);
    }
    public KW_PARTITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTITION, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_cacheIndexStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCacheIndexStatement) {
             listener.enterCacheIndexStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCacheIndexStatement) {
             listener.exitCacheIndexStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCacheIndexStatement) {
            return visitor.visitCacheIndexStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FlushStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_FLUSH(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FLUSH, 0)!;
    }
    public flushOption(): FlushOptionContext[];
    public flushOption(i: number): FlushOptionContext | null;
    public flushOption(i?: number): FlushOptionContext[] | FlushOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FlushOptionContext);
        }

        return this.getRuleContext(i, FlushOptionContext);
    }
    public tableActionOption(): TableActionOptionContext | null {
        return this.getRuleContext(0, TableActionOptionContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_flushStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFlushStatement) {
             listener.enterFlushStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFlushStatement) {
             listener.exitFlushStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFlushStatement) {
            return visitor.visitFlushStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class KillStatementContext extends antlr.ParserRuleContext {
    public _connectionFormat?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_KILL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_KILL, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public KW_CONNECTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONNECTION, 0);
    }
    public KW_QUERY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUERY, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_killStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterKillStatement) {
             listener.enterKillStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitKillStatement) {
             listener.exitKillStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitKillStatement) {
            return visitor.visitKillStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LoadIndexIntoCacheContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_LOAD(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LOAD, 0)!;
    }
    public KW_INDEX(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INDEX, 0)!;
    }
    public KW_INTO(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INTO, 0)!;
    }
    public KW_CACHE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CACHE, 0)!;
    }
    public loadedTableIndexes(): LoadedTableIndexesContext[];
    public loadedTableIndexes(i: number): LoadedTableIndexesContext | null;
    public loadedTableIndexes(i?: number): LoadedTableIndexesContext[] | LoadedTableIndexesContext | null {
        if (i === undefined) {
            return this.getRuleContexts(LoadedTableIndexesContext);
        }

        return this.getRuleContext(i, LoadedTableIndexesContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_loadIndexIntoCache;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLoadIndexIntoCache) {
             listener.enterLoadIndexIntoCache(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLoadIndexIntoCache) {
             listener.exitLoadIndexIntoCache(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLoadIndexIntoCache) {
            return visitor.visitLoadIndexIntoCache(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ResetStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RESET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RESET, 0)!;
    }
    public resetOption(): ResetOptionContext[];
    public resetOption(i: number): ResetOptionContext | null;
    public resetOption(i?: number): ResetOptionContext[] | ResetOptionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ResetOptionContext);
        }

        return this.getRuleContext(i, ResetOptionContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_resetStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterResetStatement) {
             listener.enterResetStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitResetStatement) {
             listener.exitResetStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitResetStatement) {
            return visitor.visitResetStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ResetOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_MASTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER, 0);
    }
    public KW_REPLICA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICA, 0);
    }
    public KW_QUERY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUERY, 0);
    }
    public KW_CACHE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CACHE, 0);
    }
    public KW_SLAVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SLAVE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_resetOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterResetOption) {
             listener.enterResetOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitResetOption) {
             listener.exitResetOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitResetOption) {
            return visitor.visitResetOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ResetPersistContext extends antlr.ParserRuleContext {
    public _system_var_name?: UidContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RESET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RESET, 0)!;
    }
    public KW_PERSIST(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PERSIST, 0)!;
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public ifExists(): IfExistsContext | null {
        return this.getRuleContext(0, IfExistsContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_resetPersist;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterResetPersist) {
             listener.enterResetPersist(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitResetPersist) {
             listener.exitResetPersist(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitResetPersist) {
            return visitor.visitResetPersist(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ResetAllChannelContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RESET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RESET, 0)!;
    }
    public KW_REPLICA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICA, 0);
    }
    public KW_SLAVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SLAVE, 0);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public channelOption(): ChannelOptionContext | null {
        return this.getRuleContext(0, ChannelOptionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_resetAllChannel;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterResetAllChannel) {
             listener.enterResetAllChannel(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitResetAllChannel) {
             listener.exitResetAllChannel(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitResetAllChannel) {
            return visitor.visitResetAllChannel(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ReStartStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RESTART(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RESTART, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_reStartStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterReStartStatement) {
             listener.enterReStartStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitReStartStatement) {
             listener.exitReStartStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitReStartStatement) {
            return visitor.visitReStartStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ShutdownStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SHUTDOWN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SHUTDOWN, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_shutdownStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterShutdownStatement) {
             listener.enterShutdownStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitShutdownStatement) {
             listener.exitShutdownStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitShutdownStatement) {
            return visitor.visitShutdownStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableIndexContext extends antlr.ParserRuleContext {
    public _indexFormat?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public indexNames(): IndexNamesContext | null {
        return this.getRuleContext(0, IndexNamesContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEX, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tableIndex;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableIndex) {
             listener.enterTableIndex(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableIndex) {
             listener.exitTableIndex(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableIndex) {
            return visitor.visitTableIndex(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FlushOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_flushOption;
    }
    public override copyFrom(ctx: FlushOptionContext): void {
        super.copyFrom(ctx);
    }
}
export class TableFlushOptionContext extends FlushOptionContext {
    public constructor(ctx: FlushOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE, 0);
    }
    public KW_TABLES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLES, 0);
    }
    public tableNames(): TableNamesContext | null {
        return this.getRuleContext(0, TableNamesContext);
    }
    public flushTableOption(): FlushTableOptionContext | null {
        return this.getRuleContext(0, FlushTableOptionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableFlushOption) {
             listener.enterTableFlushOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableFlushOption) {
             listener.exitTableFlushOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableFlushOption) {
            return visitor.visitTableFlushOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ChannelFlushOptionContext extends FlushOptionContext {
    public constructor(ctx: FlushOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_RELAY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RELAY, 0)!;
    }
    public KW_LOGS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LOGS, 0)!;
    }
    public channelOption(): ChannelOptionContext | null {
        return this.getRuleContext(0, ChannelOptionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterChannelFlushOption) {
             listener.enterChannelFlushOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitChannelFlushOption) {
             listener.exitChannelFlushOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitChannelFlushOption) {
            return visitor.visitChannelFlushOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SimpleFlushOptionContext extends FlushOptionContext {
    public constructor(ctx: FlushOptionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DES_KEY_FILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DES_KEY_FILE, 0);
    }
    public KW_HOSTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HOSTS, 0);
    }
    public KW_LOGS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOGS, 0);
    }
    public KW_OPTIMIZER_COSTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OPTIMIZER_COSTS, 0);
    }
    public KW_PRIVILEGES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRIVILEGES, 0);
    }
    public KW_QUERY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUERY, 0);
    }
    public KW_CACHE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CACHE, 0);
    }
    public KW_STATUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STATUS, 0);
    }
    public KW_USER_RESOURCES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USER_RESOURCES, 0);
    }
    public KW_TABLES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLES, 0);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public KW_READ(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_READ, 0);
    }
    public KW_LOCK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCK, 0);
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINARY, 0);
    }
    public KW_ENGINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENGINE, 0);
    }
    public KW_ERROR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ERROR, 0);
    }
    public KW_GENERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GENERAL, 0);
    }
    public KW_RELAY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELAY, 0);
    }
    public KW_SLOW(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SLOW, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSimpleFlushOption) {
             listener.enterSimpleFlushOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSimpleFlushOption) {
             listener.exitSimpleFlushOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSimpleFlushOption) {
            return visitor.visitSimpleFlushOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FlushTableOptionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITH, 0);
    }
    public KW_READ(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_READ, 0);
    }
    public KW_LOCK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCK, 0);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOR, 0);
    }
    public KW_EXPORT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXPORT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_flushTableOption;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFlushTableOption) {
             listener.enterFlushTableOption(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFlushTableOption) {
             listener.exitFlushTableOption(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFlushTableOption) {
            return visitor.visitFlushTableOption(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LoadedTableIndexesContext extends antlr.ParserRuleContext {
    public _indexFormat?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_PARTITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTITION, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode[];
    public LR_BRACKET(i: number): antlr.TerminalNode | null;
    public LR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.LR_BRACKET, i);
    	}
    }
    public RR_BRACKET(): antlr.TerminalNode[];
    public RR_BRACKET(i: number): antlr.TerminalNode | null;
    public RR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.RR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.RR_BRACKET, i);
    	}
    }
    public indexNames(): IndexNamesContext | null {
        return this.getRuleContext(0, IndexNamesContext);
    }
    public KW_IGNORE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IGNORE, 0);
    }
    public KW_LEAVES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LEAVES, 0);
    }
    public partitionNames(): PartitionNamesContext | null {
        return this.getRuleContext(0, PartitionNamesContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public KW_INDEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEX, 0);
    }
    public KW_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_loadedTableIndexes;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLoadedTableIndexes) {
             listener.enterLoadedTableIndexes(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLoadedTableIndexes) {
             listener.exitLoadedTableIndexes(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLoadedTableIndexes) {
            return visitor.visitLoadedTableIndexes(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SimpleDescribeStatementContext extends antlr.ParserRuleContext {
    public _command?: Token | null;
    public _column?: ColumnNameContext;
    public _pattern?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public KW_EXPLAIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXPLAIN, 0);
    }
    public KW_DESCRIBE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DESCRIBE, 0);
    }
    public KW_DESC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DESC, 0);
    }
    public columnName(): ColumnNameContext | null {
        return this.getRuleContext(0, ColumnNameContext);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_simpleDescribeStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSimpleDescribeStatement) {
             listener.enterSimpleDescribeStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSimpleDescribeStatement) {
             listener.exitSimpleDescribeStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSimpleDescribeStatement) {
            return visitor.visitSimpleDescribeStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FullDescribeStatementContext extends antlr.ParserRuleContext {
    public _command?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public describeObjectClause(): DescribeObjectClauseContext {
        return this.getRuleContext(0, DescribeObjectClauseContext)!;
    }
    public KW_EXPLAIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXPLAIN, 0);
    }
    public KW_DESCRIBE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DESCRIBE, 0);
    }
    public KW_DESC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DESC, 0);
    }
    public KW_EXTENDED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXTENDED, 0);
    }
    public KW_PARTITIONS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTITIONS, 0);
    }
    public KW_FORMAT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FORMAT, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public KW_TRADITIONAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRADITIONAL, 0);
    }
    public KW_JSON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_JSON, 0);
    }
    public KW_TREE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TREE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_fullDescribeStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFullDescribeStatement) {
             listener.enterFullDescribeStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFullDescribeStatement) {
             listener.exitFullDescribeStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFullDescribeStatement) {
            return visitor.visitFullDescribeStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AnalyzeDescribeStatementContext extends antlr.ParserRuleContext {
    public _command?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ANALYZE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ANALYZE, 0)!;
    }
    public selectStatement(): SelectStatementContext {
        return this.getRuleContext(0, SelectStatementContext)!;
    }
    public KW_EXPLAIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXPLAIN, 0);
    }
    public KW_DESCRIBE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DESCRIBE, 0);
    }
    public KW_DESC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DESC, 0);
    }
    public KW_FORMAT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FORMAT, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public KW_TREE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TREE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_analyzeDescribeStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAnalyzeDescribeStatement) {
             listener.enterAnalyzeDescribeStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAnalyzeDescribeStatement) {
             listener.exitAnalyzeDescribeStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAnalyzeDescribeStatement) {
            return visitor.visitAnalyzeDescribeStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class HelpStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_HELP(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_HELP, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.STRING_LITERAL, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_helpStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHelpStatement) {
             listener.enterHelpStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHelpStatement) {
             listener.exitHelpStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHelpStatement) {
            return visitor.visitHelpStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UseStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_USE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_USE, 0)!;
    }
    public databaseName(): DatabaseNameContext {
        return this.getRuleContext(0, DatabaseNameContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_useStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUseStatement) {
             listener.enterUseStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUseStatement) {
             listener.exitUseStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUseStatement) {
            return visitor.visitUseStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SignalStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_SIGNAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SIGNAL, 0)!;
    }
    public ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ID, 0);
    }
    public REVERSE_QUOTE_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.REVERSE_QUOTE_ID, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET, 0);
    }
    public signalConditionInformation(): SignalConditionInformationContext[];
    public signalConditionInformation(i: number): SignalConditionInformationContext | null;
    public signalConditionInformation(i?: number): SignalConditionInformationContext[] | SignalConditionInformationContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SignalConditionInformationContext);
        }

        return this.getRuleContext(i, SignalConditionInformationContext);
    }
    public KW_SQLSTATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQLSTATE, 0);
    }
    public stringLiteral(): StringLiteralContext | null {
        return this.getRuleContext(0, StringLiteralContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VALUE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_signalStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSignalStatement) {
             listener.enterSignalStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSignalStatement) {
             listener.exitSignalStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSignalStatement) {
            return visitor.visitSignalStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ResignalStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_RESIGNAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_RESIGNAL, 0)!;
    }
    public ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ID, 0);
    }
    public REVERSE_QUOTE_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.REVERSE_QUOTE_ID, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET, 0);
    }
    public signalConditionInformation(): SignalConditionInformationContext[];
    public signalConditionInformation(i: number): SignalConditionInformationContext | null;
    public signalConditionInformation(i?: number): SignalConditionInformationContext[] | SignalConditionInformationContext | null {
        if (i === undefined) {
            return this.getRuleContexts(SignalConditionInformationContext);
        }

        return this.getRuleContext(i, SignalConditionInformationContext);
    }
    public KW_SQLSTATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQLSTATE, 0);
    }
    public stringLiteral(): StringLiteralContext | null {
        return this.getRuleContext(0, StringLiteralContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public KW_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VALUE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_resignalStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterResignalStatement) {
             listener.enterResignalStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitResignalStatement) {
             listener.exitResignalStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitResignalStatement) {
            return visitor.visitResignalStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SignalConditionInformationContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0)!;
    }
    public KW_CLASS_ORIGIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CLASS_ORIGIN, 0);
    }
    public KW_SUBCLASS_ORIGIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBCLASS_ORIGIN, 0);
    }
    public KW_MESSAGE_TEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MESSAGE_TEXT, 0);
    }
    public KW_MYSQL_ERRNO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MYSQL_ERRNO, 0);
    }
    public KW_CONSTRAINT_CATALOG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT_CATALOG, 0);
    }
    public KW_CONSTRAINT_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT_SCHEMA, 0);
    }
    public KW_CONSTRAINT_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT_NAME, 0);
    }
    public KW_CATALOG_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CATALOG_NAME, 0);
    }
    public KW_SCHEMA_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEMA_NAME, 0);
    }
    public KW_TABLE_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE_NAME, 0);
    }
    public KW_COLUMN_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMN_NAME, 0);
    }
    public KW_CURSOR_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURSOR_NAME, 0);
    }
    public stringLiteral(): StringLiteralContext | null {
        return this.getRuleContext(0, StringLiteralContext);
    }
    public DECIMAL_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.DECIMAL_LITERAL, 0);
    }
    public mysqlVariable(): MysqlVariableContext | null {
        return this.getRuleContext(0, MysqlVariableContext);
    }
    public simpleId(): SimpleIdContext | null {
        return this.getRuleContext(0, SimpleIdContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_signalConditionInformation;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSignalConditionInformation) {
             listener.enterSignalConditionInformation(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSignalConditionInformation) {
             listener.exitSignalConditionInformation(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSignalConditionInformation) {
            return visitor.visitSignalConditionInformation(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class WithStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WITH(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_WITH, 0)!;
    }
    public commonTableExpressions(): CommonTableExpressionsContext[];
    public commonTableExpressions(i: number): CommonTableExpressionsContext | null;
    public commonTableExpressions(i?: number): CommonTableExpressionsContext[] | CommonTableExpressionsContext | null {
        if (i === undefined) {
            return this.getRuleContexts(CommonTableExpressionsContext);
        }

        return this.getRuleContext(i, CommonTableExpressionsContext);
    }
    public KW_RECURSIVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RECURSIVE, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_withStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterWithStatement) {
             listener.enterWithStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitWithStatement) {
             listener.exitWithStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitWithStatement) {
            return visitor.visitWithStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TABLE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TABLE, 0)!;
    }
    public tableName(): TableNameContext {
        return this.getRuleContext(0, TableNameContext)!;
    }
    public orderByClause(): OrderByClauseContext | null {
        return this.getRuleContext(0, OrderByClauseContext);
    }
    public limitClause(): LimitClauseContext | null {
        return this.getRuleContext(0, LimitClauseContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tableStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableStatement) {
             listener.enterTableStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableStatement) {
             listener.exitTableStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableStatement) {
            return visitor.visitTableStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DiagnosticsStatementContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_GET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GET, 0)!;
    }
    public KW_DIAGNOSTICS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_DIAGNOSTICS, 0)!;
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT, 0);
    }
    public KW_STACKED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STACKED, 0);
    }
    public variableClause(): VariableClauseContext[];
    public variableClause(i: number): VariableClauseContext | null;
    public variableClause(i?: number): VariableClauseContext[] | VariableClauseContext | null {
        if (i === undefined) {
            return this.getRuleContexts(VariableClauseContext);
        }

        return this.getRuleContext(i, VariableClauseContext);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode[];
    public EQUAL_SYMBOL(i: number): antlr.TerminalNode | null;
    public EQUAL_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.EQUAL_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.EQUAL_SYMBOL, i);
    	}
    }
    public KW_CONDITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONDITION, 0);
    }
    public diagnosticsConditionInformationName(): DiagnosticsConditionInformationNameContext[];
    public diagnosticsConditionInformationName(i: number): DiagnosticsConditionInformationNameContext | null;
    public diagnosticsConditionInformationName(i?: number): DiagnosticsConditionInformationNameContext[] | DiagnosticsConditionInformationNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DiagnosticsConditionInformationNameContext);
        }

        return this.getRuleContext(i, DiagnosticsConditionInformationNameContext);
    }
    public KW_NUMBER(): antlr.TerminalNode[];
    public KW_NUMBER(i: number): antlr.TerminalNode | null;
    public KW_NUMBER(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_NUMBER);
    	} else {
    		return this.getToken(MySqlParser.KW_NUMBER, i);
    	}
    }
    public KW_ROW_COUNT(): antlr.TerminalNode[];
    public KW_ROW_COUNT(i: number): antlr.TerminalNode | null;
    public KW_ROW_COUNT(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ROW_COUNT);
    	} else {
    		return this.getToken(MySqlParser.KW_ROW_COUNT, i);
    	}
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_diagnosticsStatement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDiagnosticsStatement) {
             listener.enterDiagnosticsStatement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDiagnosticsStatement) {
             listener.exitDiagnosticsStatement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDiagnosticsStatement) {
            return visitor.visitDiagnosticsStatement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DiagnosticsConditionInformationNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CLASS_ORIGIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CLASS_ORIGIN, 0);
    }
    public KW_SUBCLASS_ORIGIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBCLASS_ORIGIN, 0);
    }
    public KW_RETURNED_SQLSTATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RETURNED_SQLSTATE, 0);
    }
    public KW_MESSAGE_TEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MESSAGE_TEXT, 0);
    }
    public KW_MYSQL_ERRNO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MYSQL_ERRNO, 0);
    }
    public KW_CONSTRAINT_CATALOG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT_CATALOG, 0);
    }
    public KW_CONSTRAINT_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT_SCHEMA, 0);
    }
    public KW_CONSTRAINT_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT_NAME, 0);
    }
    public KW_CATALOG_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CATALOG_NAME, 0);
    }
    public KW_SCHEMA_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEMA_NAME, 0);
    }
    public KW_TABLE_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE_NAME, 0);
    }
    public KW_COLUMN_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMN_NAME, 0);
    }
    public KW_CURSOR_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURSOR_NAME, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_diagnosticsConditionInformationName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDiagnosticsConditionInformationName) {
             listener.enterDiagnosticsConditionInformationName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDiagnosticsConditionInformationName) {
             listener.exitDiagnosticsConditionInformationName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDiagnosticsConditionInformationName) {
            return visitor.visitDiagnosticsConditionInformationName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DescribeObjectClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_describeObjectClause;
    }
    public override copyFrom(ctx: DescribeObjectClauseContext): void {
        super.copyFrom(ctx);
    }
}
export class DescribeStatementsContext extends DescribeObjectClauseContext {
    public constructor(ctx: DescribeObjectClauseContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public selectStatement(): SelectStatementContext | null {
        return this.getRuleContext(0, SelectStatementContext);
    }
    public deleteStatement(): DeleteStatementContext | null {
        return this.getRuleContext(0, DeleteStatementContext);
    }
    public insertStatement(): InsertStatementContext | null {
        return this.getRuleContext(0, InsertStatementContext);
    }
    public replaceStatement(): ReplaceStatementContext | null {
        return this.getRuleContext(0, ReplaceStatementContext);
    }
    public updateStatement(): UpdateStatementContext | null {
        return this.getRuleContext(0, UpdateStatementContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDescribeStatements) {
             listener.enterDescribeStatements(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDescribeStatements) {
             listener.exitDescribeStatements(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDescribeStatements) {
            return visitor.visitDescribeStatements(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class DescribeConnectionContext extends DescribeObjectClauseContext {
    public _connection_id?: UidContext;
    public constructor(ctx: DescribeObjectClauseContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_FOR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FOR, 0)!;
    }
    public KW_CONNECTION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CONNECTION, 0)!;
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDescribeConnection) {
             listener.enterDescribeConnection(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDescribeConnection) {
             listener.exitDescribeConnection(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDescribeConnection) {
            return visitor.visitDescribeConnection(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DatabaseNameCreateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_databaseNameCreate;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDatabaseNameCreate) {
             listener.enterDatabaseNameCreate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDatabaseNameCreate) {
             listener.exitDatabaseNameCreate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDatabaseNameCreate) {
            return visitor.visitDatabaseNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DatabaseNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_databaseName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDatabaseName) {
             listener.enterDatabaseName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDatabaseName) {
             listener.exitDatabaseName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDatabaseName) {
            return visitor.visitDatabaseName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FunctionNameCreateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_functionNameCreate;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFunctionNameCreate) {
             listener.enterFunctionNameCreate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFunctionNameCreate) {
             listener.exitFunctionNameCreate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunctionNameCreate) {
            return visitor.visitFunctionNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FunctionNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_functionName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFunctionName) {
             listener.enterFunctionName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFunctionName) {
             listener.exitFunctionName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunctionName) {
            return visitor.visitFunctionName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ViewNameCreateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_viewNameCreate;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterViewNameCreate) {
             listener.enterViewNameCreate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitViewNameCreate) {
             listener.exitViewNameCreate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitViewNameCreate) {
            return visitor.visitViewNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ViewNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_viewName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterViewName) {
             listener.enterViewName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitViewName) {
             listener.exitViewName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitViewName) {
            return visitor.visitViewName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IndexNameCreateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_indexNameCreate;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIndexNameCreate) {
             listener.enterIndexNameCreate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIndexNameCreate) {
             listener.exitIndexNameCreate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndexNameCreate) {
            return visitor.visitIndexNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IndexNamesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public indexName(): IndexNameContext[];
    public indexName(i: number): IndexNameContext | null;
    public indexName(i?: number): IndexNameContext[] | IndexNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IndexNameContext);
        }

        return this.getRuleContext(i, IndexNameContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_indexNames;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIndexNames) {
             listener.enterIndexNames(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIndexNames) {
             listener.exitIndexNames(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndexNames) {
            return visitor.visitIndexNames(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IndexNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_indexName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIndexName) {
             listener.enterIndexName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIndexName) {
             listener.exitIndexName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndexName) {
            return visitor.visitIndexName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class GroupNameCreateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_groupNameCreate;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterGroupNameCreate) {
             listener.enterGroupNameCreate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitGroupNameCreate) {
             listener.exitGroupNameCreate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitGroupNameCreate) {
            return visitor.visitGroupNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class GroupNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_groupName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterGroupName) {
             listener.enterGroupName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitGroupName) {
             listener.exitGroupName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitGroupName) {
            return visitor.visitGroupName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableNameCreateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tableNameCreate;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableNameCreate) {
             listener.enterTableNameCreate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableNameCreate) {
             listener.exitTableNameCreate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableNameCreate) {
            return visitor.visitTableNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableNamesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public tableName(): TableNameContext[];
    public tableName(i: number): TableNameContext | null;
    public tableName(i?: number): TableNameContext[] | TableNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(TableNameContext);
        }

        return this.getRuleContext(i, TableNameContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tableNames;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableNames) {
             listener.enterTableNames(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableNames) {
             listener.exitTableNames(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableNames) {
            return visitor.visitTableNames(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TableNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public fullId(): FullIdContext {
        return this.getRuleContext(0, FullIdContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tableName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTableName) {
             listener.enterTableName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTableName) {
             listener.exitTableName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTableName) {
            return visitor.visitTableName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UserOrRoleNamesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public userOrRoleName(): UserOrRoleNameContext[];
    public userOrRoleName(i: number): UserOrRoleNameContext | null;
    public userOrRoleName(i?: number): UserOrRoleNameContext[] | UserOrRoleNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UserOrRoleNameContext);
        }

        return this.getRuleContext(i, UserOrRoleNameContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_userOrRoleNames;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUserOrRoleNames) {
             listener.enterUserOrRoleNames(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUserOrRoleNames) {
             listener.exitUserOrRoleNames(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUserOrRoleNames) {
            return visitor.visitUserOrRoleNames(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UserOrRoleNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public userName(): UserNameContext | null {
        return this.getRuleContext(0, UserNameContext);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_userOrRoleName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUserOrRoleName) {
             listener.enterUserOrRoleName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUserOrRoleName) {
             listener.exitUserOrRoleName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUserOrRoleName) {
            return visitor.visitUserOrRoleName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ColumnNameCreateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public dottedId(): DottedIdContext[];
    public dottedId(i: number): DottedIdContext | null;
    public dottedId(i?: number): DottedIdContext[] | DottedIdContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DottedIdContext);
        }

        return this.getRuleContext(i, DottedIdContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_columnNameCreate;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterColumnNameCreate) {
             listener.enterColumnNameCreate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitColumnNameCreate) {
             listener.exitColumnNameCreate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumnNameCreate) {
            return visitor.visitColumnNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ColumnNamesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public columnName(): ColumnNameContext[];
    public columnName(i: number): ColumnNameContext | null;
    public columnName(i?: number): ColumnNameContext[] | ColumnNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ColumnNameContext);
        }

        return this.getRuleContext(i, ColumnNameContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_columnNames;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterColumnNames) {
             listener.enterColumnNames(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitColumnNames) {
             listener.exitColumnNames(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumnNames) {
            return visitor.visitColumnNames(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ColumnNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public dottedId(): DottedIdContext[];
    public dottedId(i: number): DottedIdContext | null;
    public dottedId(i?: number): DottedIdContext[] | DottedIdContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DottedIdContext);
        }

        return this.getRuleContext(i, DottedIdContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_columnName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterColumnName) {
             listener.enterColumnName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitColumnName) {
             listener.exitColumnName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumnName) {
            return visitor.visitColumnName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TablespaceNameCreateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tablespaceNameCreate;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTablespaceNameCreate) {
             listener.enterTablespaceNameCreate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTablespaceNameCreate) {
             listener.exitTablespaceNameCreate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablespaceNameCreate) {
            return visitor.visitTablespaceNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TablespaceNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_tablespaceName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTablespaceName) {
             listener.enterTablespaceName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTablespaceName) {
             listener.exitTablespaceName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTablespaceName) {
            return visitor.visitTablespaceName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PartitionNameCreateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_partitionNameCreate;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionNameCreate) {
             listener.enterPartitionNameCreate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionNameCreate) {
             listener.exitPartitionNameCreate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionNameCreate) {
            return visitor.visitPartitionNameCreate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PartitionNamesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public partitionName(): PartitionNameContext[];
    public partitionName(i: number): PartitionNameContext | null;
    public partitionName(i?: number): PartitionNameContext[] | PartitionNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PartitionNameContext);
        }

        return this.getRuleContext(i, PartitionNameContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_partitionNames;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionNames) {
             listener.enterPartitionNames(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionNames) {
             listener.exitPartitionNames(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionNames) {
            return visitor.visitPartitionNames(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PartitionNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_partitionName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionName) {
             listener.enterPartitionName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionName) {
             listener.exitPartitionName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionName) {
            return visitor.visitPartitionName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IndexColumnNameContext extends antlr.ParserRuleContext {
    public _sortType?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public KW_ASC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ASC, 0);
    }
    public KW_DESC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DESC, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_indexColumnName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIndexColumnName) {
             listener.enterIndexColumnName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIndexColumnName) {
             listener.exitIndexColumnName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndexColumnName) {
            return visitor.visitIndexColumnName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UserHostPortContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public userAtHost(): UserAtHostContext {
        return this.getRuleContext(0, UserAtHostContext)!;
    }
    public COLON_SYMB(): antlr.TerminalNode {
        return this.getToken(MySqlParser.COLON_SYMB, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_userHostPort;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUserHostPort) {
             listener.enterUserHostPort(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUserHostPort) {
             listener.exitUserHostPort(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUserHostPort) {
            return visitor.visitUserHostPort(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UserAtHostContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public simpleUserName(): SimpleUserNameContext {
        return this.getRuleContext(0, SimpleUserNameContext)!;
    }
    public HOST_IP_ADDRESS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.HOST_IP_ADDRESS, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_userAtHost;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUserAtHost) {
             listener.enterUserAtHost(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUserAtHost) {
             listener.exitUserAtHost(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUserAtHost) {
            return visitor.visitUserAtHost(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SimpleUserNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ID, 0);
    }
    public KW_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ADMIN, 0);
    }
    public keywordsCanBeId(): KeywordsCanBeIdContext | null {
        return this.getRuleContext(0, KeywordsCanBeIdContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_simpleUserName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSimpleUserName) {
             listener.enterSimpleUserName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSimpleUserName) {
             listener.exitSimpleUserName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSimpleUserName) {
            return visitor.visitSimpleUserName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class HostNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LOCAL_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LOCAL_ID, 0);
    }
    public HOST_IP_ADDRESS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.HOST_IP_ADDRESS, 0);
    }
    public AT_SIGN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.AT_SIGN, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_hostName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHostName) {
             listener.enterHostName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHostName) {
             listener.exitHostName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHostName) {
            return visitor.visitHostName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UserNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public simpleUserName(): SimpleUserNameContext | null {
        return this.getRuleContext(0, SimpleUserNameContext);
    }
    public hostName(): HostNameContext | null {
        return this.getRuleContext(0, HostNameContext);
    }
    public currentUserExpression(): CurrentUserExpressionContext | null {
        return this.getRuleContext(0, CurrentUserExpressionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_userName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUserName) {
             listener.enterUserName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUserName) {
             listener.exitUserName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUserName) {
            return visitor.visitUserName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class MysqlVariableContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LOCAL_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LOCAL_ID, 0);
    }
    public GLOBAL_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.GLOBAL_ID, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_mysqlVariable;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterMysqlVariable) {
             listener.enterMysqlVariable(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitMysqlVariable) {
             listener.exitMysqlVariable(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitMysqlVariable) {
            return visitor.visitMysqlVariable(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CharsetNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINARY, 0);
    }
    public charsetNameBase(): CharsetNameBaseContext | null {
        return this.getRuleContext(0, CharsetNameBaseContext);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public CHARSET_REVERSE_QOUTE_STRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.CHARSET_REVERSE_QOUTE_STRING, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_charsetName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCharsetName) {
             listener.enterCharsetName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCharsetName) {
             listener.exitCharsetName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCharsetName) {
            return visitor.visitCharsetName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CollationNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_collationName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCollationName) {
             listener.enterCollationName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCollationName) {
             listener.exitCollationName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCollationName) {
            return visitor.visitCollationName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class EngineNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public engineNameBase(): EngineNameBaseContext | null {
        return this.getRuleContext(0, EngineNameBaseContext);
    }
    public ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ID, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_engineName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterEngineName) {
             listener.enterEngineName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitEngineName) {
             listener.exitEngineName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitEngineName) {
            return visitor.visitEngineName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class EngineNameBaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ARCHIVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ARCHIVE, 0);
    }
    public KW_BLACKHOLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BLACKHOLE, 0);
    }
    public KW_CONNECT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONNECT, 0);
    }
    public KW_CSV(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CSV, 0);
    }
    public KW_FEDERATED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FEDERATED, 0);
    }
    public KW_INNODB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INNODB, 0);
    }
    public KW_MEMORY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MEMORY, 0);
    }
    public KW_MRG_MYISAM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MRG_MYISAM, 0);
    }
    public KW_MYISAM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MYISAM, 0);
    }
    public KW_NDB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NDB, 0);
    }
    public KW_NDBCLUSTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NDBCLUSTER, 0);
    }
    public KW_PERFORMANCE_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PERFORMANCE_SCHEMA, 0);
    }
    public KW_TOKUDB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TOKUDB, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_engineNameBase;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterEngineNameBase) {
             listener.enterEngineNameBase(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitEngineNameBase) {
             listener.exitEngineNameBase(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitEngineNameBase) {
            return visitor.visitEngineNameBase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UuidSetContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public decimalLiteral(): DecimalLiteralContext[];
    public decimalLiteral(i: number): DecimalLiteralContext | null;
    public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DecimalLiteralContext);
        }

        return this.getRuleContext(i, DecimalLiteralContext);
    }
    public MINUS(): antlr.TerminalNode[];
    public MINUS(i: number): antlr.TerminalNode | null;
    public MINUS(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.MINUS);
    	} else {
    		return this.getToken(MySqlParser.MINUS, i);
    	}
    }
    public COLON_SYMB(): antlr.TerminalNode[];
    public COLON_SYMB(i: number): antlr.TerminalNode | null;
    public COLON_SYMB(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COLON_SYMB);
    	} else {
    		return this.getToken(MySqlParser.COLON_SYMB, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_uuidSet;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUuidSet) {
             listener.enterUuidSet(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUuidSet) {
             listener.exitUuidSet(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUuidSet) {
            return visitor.visitUuidSet(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class XidContext extends antlr.ParserRuleContext {
    public _globalTableUid?: XuidStringIdContext;
    public _qualifier?: XuidStringIdContext;
    public _idFormat?: DecimalLiteralContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public xuidStringId(): XuidStringIdContext[];
    public xuidStringId(i: number): XuidStringIdContext | null;
    public xuidStringId(i?: number): XuidStringIdContext[] | XuidStringIdContext | null {
        if (i === undefined) {
            return this.getRuleContexts(XuidStringIdContext);
        }

        return this.getRuleContext(i, XuidStringIdContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_xid;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterXid) {
             listener.enterXid(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitXid) {
             listener.exitXid(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitXid) {
            return visitor.visitXid(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class XuidStringIdContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public BIT_STRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.BIT_STRING, 0);
    }
    public HEXADECIMAL_LITERAL(): antlr.TerminalNode[];
    public HEXADECIMAL_LITERAL(i: number): antlr.TerminalNode | null;
    public HEXADECIMAL_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.HEXADECIMAL_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.HEXADECIMAL_LITERAL, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_xuidStringId;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterXuidStringId) {
             listener.enterXuidStringId(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitXuidStringId) {
             listener.exitXuidStringId(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitXuidStringId) {
            return visitor.visitXuidStringId(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FullIdContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public dottedId(): DottedIdContext | null {
        return this.getRuleContext(0, DottedIdContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_fullId;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFullId) {
             listener.enterFullId(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFullId) {
             listener.exitFullId(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFullId) {
            return visitor.visitFullId(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UidListContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext[];
    public uid(i: number): UidContext | null;
    public uid(i?: number): UidContext[] | UidContext | null {
        if (i === undefined) {
            return this.getRuleContexts(UidContext);
        }

        return this.getRuleContext(i, UidContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_uidList;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUidList) {
             listener.enterUidList(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUidList) {
             listener.exitUidList(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUidList) {
            return visitor.visitUidList(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UidContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public simpleId(): SimpleIdContext | null {
        return this.getRuleContext(0, SimpleIdContext);
    }
    public CHARSET_REVERSE_QOUTE_STRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.CHARSET_REVERSE_QOUTE_STRING, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_uid;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUid) {
             listener.enterUid(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUid) {
             listener.exitUid(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUid) {
            return visitor.visitUid(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SimpleIdContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ID, 0);
    }
    public charsetNameBase(): CharsetNameBaseContext | null {
        return this.getRuleContext(0, CharsetNameBaseContext);
    }
    public transactionLevelBase(): TransactionLevelBaseContext | null {
        return this.getRuleContext(0, TransactionLevelBaseContext);
    }
    public engineNameBase(): EngineNameBaseContext | null {
        return this.getRuleContext(0, EngineNameBaseContext);
    }
    public privilegesBase(): PrivilegesBaseContext | null {
        return this.getRuleContext(0, PrivilegesBaseContext);
    }
    public intervalTypeBase(): IntervalTypeBaseContext | null {
        return this.getRuleContext(0, IntervalTypeBaseContext);
    }
    public dataTypeBase(): DataTypeBaseContext | null {
        return this.getRuleContext(0, DataTypeBaseContext);
    }
    public keywordsCanBeId(): KeywordsCanBeIdContext | null {
        return this.getRuleContext(0, KeywordsCanBeIdContext);
    }
    public scalarFunctionName(): ScalarFunctionNameContext | null {
        return this.getRuleContext(0, ScalarFunctionNameContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_simpleId;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSimpleId) {
             listener.enterSimpleId(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSimpleId) {
             listener.exitSimpleId(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSimpleId) {
            return visitor.visitSimpleId(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DottedIdContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public DOT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.DOT, 0)!;
    }
    public ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ID, 0);
    }
    public uid(): UidContext | null {
        return this.getRuleContext(0, UidContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dottedId;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDottedId) {
             listener.enterDottedId(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDottedId) {
             listener.exitDottedId(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDottedId) {
            return visitor.visitDottedId(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DecimalLiteralContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public DECIMAL_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.DECIMAL_LITERAL, 0);
    }
    public ZERO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ZERO_DECIMAL, 0);
    }
    public ONE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.ONE_DECIMAL, 0);
    }
    public TWO_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.TWO_DECIMAL, 0);
    }
    public THREE_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.THREE_DECIMAL, 0);
    }
    public REAL_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.REAL_LITERAL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_decimalLiteral;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDecimalLiteral) {
             listener.enterDecimalLiteral(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDecimalLiteral) {
             listener.exitDecimalLiteral(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDecimalLiteral) {
            return visitor.visitDecimalLiteral(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FileSizeLiteralContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public FILESIZE_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.FILESIZE_LITERAL, 0);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_fileSizeLiteral;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFileSizeLiteral) {
             listener.enterFileSizeLiteral(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFileSizeLiteral) {
             listener.exitFileSizeLiteral(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFileSizeLiteral) {
            return visitor.visitFileSizeLiteral(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class StringLiteralContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public STRING_LITERAL(): antlr.TerminalNode[];
    public STRING_LITERAL(i: number): antlr.TerminalNode | null;
    public STRING_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STRING_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.STRING_LITERAL, i);
    	}
    }
    public START_NATIONAL_STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.START_NATIONAL_STRING_LITERAL, 0);
    }
    public STRING_CHARSET_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_CHARSET_NAME, 0);
    }
    public KW_COLLATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLLATE, 0);
    }
    public collationName(): CollationNameContext | null {
        return this.getRuleContext(0, CollationNameContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_stringLiteral;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterStringLiteral) {
             listener.enterStringLiteral(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitStringLiteral) {
             listener.exitStringLiteral(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitStringLiteral) {
            return visitor.visitStringLiteral(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class BooleanLiteralContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TRUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRUE, 0);
    }
    public KW_FALSE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FALSE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_booleanLiteral;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterBooleanLiteral) {
             listener.enterBooleanLiteral(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitBooleanLiteral) {
             listener.exitBooleanLiteral(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitBooleanLiteral) {
            return visitor.visitBooleanLiteral(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class HexadecimalLiteralContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public HEXADECIMAL_LITERAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.HEXADECIMAL_LITERAL, 0)!;
    }
    public STRING_CHARSET_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_CHARSET_NAME, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_hexadecimalLiteral;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterHexadecimalLiteral) {
             listener.enterHexadecimalLiteral(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitHexadecimalLiteral) {
             listener.exitHexadecimalLiteral(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitHexadecimalLiteral) {
            return visitor.visitHexadecimalLiteral(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class NullNotnullContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NULL_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NULL_LITERAL, 0);
    }
    public NULL_SPEC_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.NULL_SPEC_LITERAL, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_nullNotnull;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterNullNotnull) {
             listener.enterNullNotnull(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitNullNotnull) {
             listener.exitNullNotnull(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitNullNotnull) {
            return visitor.visitNullNotnull(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConstantContext extends antlr.ParserRuleContext {
    public _nullLiteral?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public stringLiteral(): StringLiteralContext | null {
        return this.getRuleContext(0, StringLiteralContext);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public MINUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.MINUS, 0);
    }
    public hexadecimalLiteral(): HexadecimalLiteralContext | null {
        return this.getRuleContext(0, HexadecimalLiteralContext);
    }
    public booleanLiteral(): BooleanLiteralContext | null {
        return this.getRuleContext(0, BooleanLiteralContext);
    }
    public REAL_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.REAL_LITERAL, 0);
    }
    public BIT_STRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.BIT_STRING, 0);
    }
    public KW_NULL_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NULL_LITERAL, 0);
    }
    public NULL_SPEC_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.NULL_SPEC_LITERAL, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_constant;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterConstant) {
             listener.enterConstant(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitConstant) {
             listener.exitConstant(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstant) {
            return visitor.visitConstant(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DataTypeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dataType;
    }
    public override copyFrom(ctx: DataTypeContext): void {
        super.copyFrom(ctx);
    }
}
export class SpatialDataTypeContext extends DataTypeContext {
    public _typeName?: Token | null;
    public constructor(ctx: DataTypeContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_GEOMETRYCOLLECTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GEOMETRYCOLLECTION, 0);
    }
    public KW_GEOMCOLLECTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GEOMCOLLECTION, 0);
    }
    public KW_LINESTRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LINESTRING, 0);
    }
    public KW_MULTILINESTRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MULTILINESTRING, 0);
    }
    public KW_MULTIPOINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MULTIPOINT, 0);
    }
    public KW_MULTIPOLYGON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MULTIPOLYGON, 0);
    }
    public KW_POINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_POINT, 0);
    }
    public KW_POLYGON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_POLYGON, 0);
    }
    public KW_JSON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_JSON, 0);
    }
    public KW_GEOMETRY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GEOMETRY, 0);
    }
    public KW_SRID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SRID, 0);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSpatialDataType) {
             listener.enterSpatialDataType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSpatialDataType) {
             listener.exitSpatialDataType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSpatialDataType) {
            return visitor.visitSpatialDataType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class LongVarbinaryDataTypeContext extends DataTypeContext {
    public constructor(ctx: DataTypeContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_LONG(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LONG, 0)!;
    }
    public KW_VARBINARY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VARBINARY, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLongVarbinaryDataType) {
             listener.enterLongVarbinaryDataType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLongVarbinaryDataType) {
             listener.exitLongVarbinaryDataType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLongVarbinaryDataType) {
            return visitor.visitLongVarbinaryDataType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class CollectionDataTypeContext extends DataTypeContext {
    public _typeName?: Token | null;
    public constructor(ctx: DataTypeContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public collectionOptions(): CollectionOptionsContext {
        return this.getRuleContext(0, CollectionOptionsContext)!;
    }
    public KW_ENUM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENUM, 0);
    }
    public KW_SET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET, 0);
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINARY, 0);
    }
    public charSet(): CharSetContext | null {
        return this.getRuleContext(0, CharSetContext);
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCollectionDataType) {
             listener.enterCollectionDataType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCollectionDataType) {
             listener.exitCollectionDataType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCollectionDataType) {
            return visitor.visitCollectionDataType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class NationalVaryingStringDataTypeContext extends DataTypeContext {
    public _typeName?: Token | null;
    public constructor(ctx: DataTypeContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_NATIONAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_NATIONAL, 0)!;
    }
    public KW_VARYING(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VARYING, 0)!;
    }
    public KW_CHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHAR, 0);
    }
    public KW_CHARACTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARACTER, 0);
    }
    public lengthOneDimension(): LengthOneDimensionContext | null {
        return this.getRuleContext(0, LengthOneDimensionContext);
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINARY, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterNationalVaryingStringDataType) {
             listener.enterNationalVaryingStringDataType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitNationalVaryingStringDataType) {
             listener.exitNationalVaryingStringDataType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitNationalVaryingStringDataType) {
            return visitor.visitNationalVaryingStringDataType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class DimensionDataTypeContext extends DataTypeContext {
    public _typeName?: Token | null;
    public constructor(ctx: DataTypeContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_TINYINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TINYINT, 0);
    }
    public KW_SMALLINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SMALLINT, 0);
    }
    public KW_MEDIUMINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MEDIUMINT, 0);
    }
    public KW_INT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INT, 0);
    }
    public KW_INTEGER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INTEGER, 0);
    }
    public KW_BIGINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BIGINT, 0);
    }
    public KW_MIDDLEINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MIDDLEINT, 0);
    }
    public KW_INT1(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INT1, 0);
    }
    public KW_INT2(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INT2, 0);
    }
    public KW_INT3(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INT3, 0);
    }
    public KW_INT4(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INT4, 0);
    }
    public KW_INT8(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INT8, 0);
    }
    public lengthOneDimension(): LengthOneDimensionContext | null {
        return this.getRuleContext(0, LengthOneDimensionContext);
    }
    public KW_SIGNED(): antlr.TerminalNode[];
    public KW_SIGNED(i: number): antlr.TerminalNode | null;
    public KW_SIGNED(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_SIGNED);
    	} else {
    		return this.getToken(MySqlParser.KW_SIGNED, i);
    	}
    }
    public KW_UNSIGNED(): antlr.TerminalNode[];
    public KW_UNSIGNED(i: number): antlr.TerminalNode | null;
    public KW_UNSIGNED(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_UNSIGNED);
    	} else {
    		return this.getToken(MySqlParser.KW_UNSIGNED, i);
    	}
    }
    public KW_ZEROFILL(): antlr.TerminalNode[];
    public KW_ZEROFILL(i: number): antlr.TerminalNode | null;
    public KW_ZEROFILL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_ZEROFILL);
    	} else {
    		return this.getToken(MySqlParser.KW_ZEROFILL, i);
    	}
    }
    public KW_REAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REAL, 0);
    }
    public lengthTwoDimension(): LengthTwoDimensionContext | null {
        return this.getRuleContext(0, LengthTwoDimensionContext);
    }
    public KW_DOUBLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DOUBLE, 0);
    }
    public KW_PRECISION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRECISION, 0);
    }
    public KW_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DECIMAL, 0);
    }
    public KW_DEC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEC, 0);
    }
    public KW_FIXED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIXED, 0);
    }
    public KW_NUMERIC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NUMERIC, 0);
    }
    public KW_FLOAT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FLOAT, 0);
    }
    public KW_FLOAT4(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FLOAT4, 0);
    }
    public KW_FLOAT8(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FLOAT8, 0);
    }
    public lengthTwoOptionalDimension(): LengthTwoOptionalDimensionContext | null {
        return this.getRuleContext(0, LengthTwoOptionalDimensionContext);
    }
    public KW_BIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BIT, 0);
    }
    public KW_TIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TIME, 0);
    }
    public KW_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TIMESTAMP, 0);
    }
    public KW_DATETIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATETIME, 0);
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINARY, 0);
    }
    public KW_VARBINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VARBINARY, 0);
    }
    public KW_BLOB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BLOB, 0);
    }
    public KW_YEAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_YEAR, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDimensionDataType) {
             listener.enterDimensionDataType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDimensionDataType) {
             listener.exitDimensionDataType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDimensionDataType) {
            return visitor.visitDimensionDataType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class StringDataTypeContext extends DataTypeContext {
    public _typeName?: Token | null;
    public constructor(ctx: DataTypeContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHAR, 0);
    }
    public KW_CHARACTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARACTER, 0);
    }
    public KW_VARCHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VARCHAR, 0);
    }
    public KW_TINYTEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TINYTEXT, 0);
    }
    public KW_TEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TEXT, 0);
    }
    public KW_MEDIUMTEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MEDIUMTEXT, 0);
    }
    public KW_LONGTEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LONGTEXT, 0);
    }
    public KW_NCHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NCHAR, 0);
    }
    public KW_NVARCHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NVARCHAR, 0);
    }
    public KW_LONG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LONG, 0);
    }
    public KW_VARYING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VARYING, 0);
    }
    public lengthOneDimension(): LengthOneDimensionContext | null {
        return this.getRuleContext(0, LengthOneDimensionContext);
    }
    public KW_BINARY(): antlr.TerminalNode[];
    public KW_BINARY(i: number): antlr.TerminalNode | null;
    public KW_BINARY(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.KW_BINARY);
    	} else {
    		return this.getToken(MySqlParser.KW_BINARY, i);
    	}
    }
    public charSet(): CharSetContext | null {
        return this.getRuleContext(0, CharSetContext);
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public KW_COLLATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLLATE, 0);
    }
    public collationName(): CollationNameContext | null {
        return this.getRuleContext(0, CollationNameContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterStringDataType) {
             listener.enterStringDataType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitStringDataType) {
             listener.exitStringDataType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitStringDataType) {
            return visitor.visitStringDataType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class LongVarcharDataTypeContext extends DataTypeContext {
    public _typeName?: Token | null;
    public constructor(ctx: DataTypeContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_LONG(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LONG, 0)!;
    }
    public KW_VARCHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VARCHAR, 0);
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINARY, 0);
    }
    public charSet(): CharSetContext | null {
        return this.getRuleContext(0, CharSetContext);
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public KW_COLLATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLLATE, 0);
    }
    public collationName(): CollationNameContext | null {
        return this.getRuleContext(0, CollationNameContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLongVarcharDataType) {
             listener.enterLongVarcharDataType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLongVarcharDataType) {
             listener.exitLongVarcharDataType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLongVarcharDataType) {
            return visitor.visitLongVarcharDataType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class NationalStringDataTypeContext extends DataTypeContext {
    public _typeName?: Token | null;
    public constructor(ctx: DataTypeContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_NATIONAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NATIONAL, 0);
    }
    public KW_VARCHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VARCHAR, 0);
    }
    public KW_CHARACTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARACTER, 0);
    }
    public KW_CHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHAR, 0);
    }
    public lengthOneDimension(): LengthOneDimensionContext | null {
        return this.getRuleContext(0, LengthOneDimensionContext);
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINARY, 0);
    }
    public KW_NCHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NCHAR, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterNationalStringDataType) {
             listener.enterNationalStringDataType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitNationalStringDataType) {
             listener.exitNationalStringDataType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitNationalStringDataType) {
            return visitor.visitNationalStringDataType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SimpleDataTypeContext extends DataTypeContext {
    public _typeName?: Token | null;
    public constructor(ctx: DataTypeContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_DATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATE, 0);
    }
    public KW_TINYBLOB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TINYBLOB, 0);
    }
    public KW_MEDIUMBLOB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MEDIUMBLOB, 0);
    }
    public KW_LONGBLOB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LONGBLOB, 0);
    }
    public KW_BOOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BOOL, 0);
    }
    public KW_BOOLEAN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BOOLEAN, 0);
    }
    public KW_SERIAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SERIAL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSimpleDataType) {
             listener.enterSimpleDataType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSimpleDataType) {
             listener.exitSimpleDataType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSimpleDataType) {
            return visitor.visitSimpleDataType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CollectionOptionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public STRING_LITERAL(): antlr.TerminalNode[];
    public STRING_LITERAL(i: number): antlr.TerminalNode | null;
    public STRING_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STRING_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.STRING_LITERAL, i);
    	}
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_collectionOptions;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCollectionOptions) {
             listener.enterCollectionOptions(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCollectionOptions) {
             listener.exitCollectionOptions(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCollectionOptions) {
            return visitor.visitCollectionOptions(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConvertedDataTypeContext extends antlr.ParserRuleContext {
    public _typeName?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHAR, 0);
    }
    public KW_SIGNED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SIGNED, 0);
    }
    public KW_UNSIGNED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNSIGNED, 0);
    }
    public KW_ARRAY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ARRAY, 0);
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINARY, 0);
    }
    public KW_NCHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NCHAR, 0);
    }
    public KW_DATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATE, 0);
    }
    public KW_DATETIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATETIME, 0);
    }
    public KW_TIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TIME, 0);
    }
    public KW_JSON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_JSON, 0);
    }
    public KW_INT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INT, 0);
    }
    public KW_INTEGER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INTEGER, 0);
    }
    public KW_DECIMAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DECIMAL, 0);
    }
    public KW_DEC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEC, 0);
    }
    public lengthOneDimension(): LengthOneDimensionContext | null {
        return this.getRuleContext(0, LengthOneDimensionContext);
    }
    public charSet(): CharSetContext | null {
        return this.getRuleContext(0, CharSetContext);
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public lengthTwoOptionalDimension(): LengthTwoOptionalDimensionContext | null {
        return this.getRuleContext(0, LengthTwoOptionalDimensionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_convertedDataType;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterConvertedDataType) {
             listener.enterConvertedDataType(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitConvertedDataType) {
             listener.exitConvertedDataType(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitConvertedDataType) {
            return visitor.visitConvertedDataType(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LengthOneDimensionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_lengthOneDimension;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLengthOneDimension) {
             listener.enterLengthOneDimension(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLengthOneDimension) {
             listener.exitLengthOneDimension(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLengthOneDimension) {
            return visitor.visitLengthOneDimension(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LengthTwoDimensionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext[];
    public decimalLiteral(i: number): DecimalLiteralContext | null;
    public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DecimalLiteralContext);
        }

        return this.getRuleContext(i, DecimalLiteralContext);
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.COMMA, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_lengthTwoDimension;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLengthTwoDimension) {
             listener.enterLengthTwoDimension(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLengthTwoDimension) {
             listener.exitLengthTwoDimension(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLengthTwoDimension) {
            return visitor.visitLengthTwoDimension(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LengthTwoOptionalDimensionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext[];
    public decimalLiteral(i: number): DecimalLiteralContext | null;
    public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DecimalLiteralContext);
        }

        return this.getRuleContext(i, DecimalLiteralContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.COMMA, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_lengthTwoOptionalDimension;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLengthTwoOptionalDimension) {
             listener.enterLengthTwoOptionalDimension(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLengthTwoOptionalDimension) {
             listener.exitLengthTwoOptionalDimension(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLengthTwoOptionalDimension) {
            return visitor.visitLengthTwoOptionalDimension(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IndexColumnNamesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public indexColumnName(): IndexColumnNameContext[];
    public indexColumnName(i: number): IndexColumnNameContext | null;
    public indexColumnName(i?: number): IndexColumnNameContext[] | IndexColumnNameContext | null {
        if (i === undefined) {
            return this.getRuleContexts(IndexColumnNameContext);
        }

        return this.getRuleContext(i, IndexColumnNameContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_indexColumnNames;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIndexColumnNames) {
             listener.enterIndexColumnNames(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIndexColumnNames) {
             listener.exitIndexColumnNames(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIndexColumnNames) {
            return visitor.visitIndexColumnNames(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExpressionsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public expression(): ExpressionContext[];
    public expression(i: number): ExpressionContext | null;
    public expression(i?: number): ExpressionContext[] | ExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionContext);
        }

        return this.getRuleContext(i, ExpressionContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_expressions;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterExpressions) {
             listener.enterExpressions(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitExpressions) {
             listener.exitExpressions(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitExpressions) {
            return visitor.visitExpressions(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ValuesOrValueListContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public expressionsWithDefaults(): ExpressionsWithDefaultsContext[];
    public expressionsWithDefaults(i: number): ExpressionsWithDefaultsContext | null;
    public expressionsWithDefaults(i?: number): ExpressionsWithDefaultsContext[] | ExpressionsWithDefaultsContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionsWithDefaultsContext);
        }

        return this.getRuleContext(i, ExpressionsWithDefaultsContext);
    }
    public KW_VALUES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VALUES, 0);
    }
    public KW_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VALUE, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_valuesOrValueList;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterValuesOrValueList) {
             listener.enterValuesOrValueList(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitValuesOrValueList) {
             listener.exitValuesOrValueList(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitValuesOrValueList) {
            return visitor.visitValuesOrValueList(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExpressionsWithDefaultsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public expressionOrDefault(): ExpressionOrDefaultContext[];
    public expressionOrDefault(i: number): ExpressionOrDefaultContext | null;
    public expressionOrDefault(i?: number): ExpressionOrDefaultContext[] | ExpressionOrDefaultContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionOrDefaultContext);
        }

        return this.getRuleContext(i, ExpressionOrDefaultContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_expressionsWithDefaults;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterExpressionsWithDefaults) {
             listener.enterExpressionsWithDefaults(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitExpressionsWithDefaults) {
             listener.exitExpressionsWithDefaults(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitExpressionsWithDefaults) {
            return visitor.visitExpressionsWithDefaults(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExpressionOrDefaultContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_expressionOrDefault;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterExpressionOrDefault) {
             listener.enterExpressionOrDefault(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitExpressionOrDefault) {
             listener.exitExpressionOrDefault(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitExpressionOrDefault) {
            return visitor.visitExpressionOrDefault(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ConstantsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public constant(): ConstantContext[];
    public constant(i: number): ConstantContext | null;
    public constant(i?: number): ConstantContext[] | ConstantContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ConstantContext);
        }

        return this.getRuleContext(i, ConstantContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_constants;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterConstants) {
             listener.enterConstants(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitConstants) {
             listener.exitConstants(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstants) {
            return visitor.visitConstants(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SimpleStringsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public STRING_LITERAL(): antlr.TerminalNode[];
    public STRING_LITERAL(i: number): antlr.TerminalNode | null;
    public STRING_LITERAL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.STRING_LITERAL);
    	} else {
    		return this.getToken(MySqlParser.STRING_LITERAL, i);
    	}
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_simpleStrings;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSimpleStrings) {
             listener.enterSimpleStrings(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSimpleStrings) {
             listener.exitSimpleStrings(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSimpleStrings) {
            return visitor.visitSimpleStrings(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UserVariablesContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LOCAL_ID(): antlr.TerminalNode[];
    public LOCAL_ID(i: number): antlr.TerminalNode | null;
    public LOCAL_ID(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LOCAL_ID);
    	} else {
    		return this.getToken(MySqlParser.LOCAL_ID, i);
    	}
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_userVariables;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUserVariables) {
             listener.enterUserVariables(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUserVariables) {
             listener.exitUserVariables(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUserVariables) {
            return visitor.visitUserVariables(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DefaultValueContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NULL_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NULL_LITERAL, 0);
    }
    public KW_CAST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CAST, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public convertedDataType(): ConvertedDataTypeContext | null {
        return this.getRuleContext(0, ConvertedDataTypeContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public constant(): ConstantContext | null {
        return this.getRuleContext(0, ConstantContext);
    }
    public unaryOperator(): UnaryOperatorContext | null {
        return this.getRuleContext(0, UnaryOperatorContext);
    }
    public currentTimestamp(): CurrentTimestampContext[];
    public currentTimestamp(i: number): CurrentTimestampContext | null;
    public currentTimestamp(i?: number): CurrentTimestampContext[] | CurrentTimestampContext | null {
        if (i === undefined) {
            return this.getRuleContexts(CurrentTimestampContext);
        }

        return this.getRuleContext(i, CurrentTimestampContext);
    }
    public KW_ON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ON, 0);
    }
    public KW_UPDATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UPDATE, 0);
    }
    public fullId(): FullIdContext | null {
        return this.getRuleContext(0, FullIdContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_defaultValue;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDefaultValue) {
             listener.enterDefaultValue(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDefaultValue) {
             listener.exitDefaultValue(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDefaultValue) {
            return visitor.visitDefaultValue(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CurrentTimestampContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_NOW(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOW, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public KW_CURRENT_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT_TIMESTAMP, 0);
    }
    public KW_LOCALTIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCALTIME, 0);
    }
    public KW_LOCALTIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCALTIMESTAMP, 0);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_currentTimestamp;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCurrentTimestamp) {
             listener.enterCurrentTimestamp(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCurrentTimestamp) {
             listener.exitCurrentTimestamp(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCurrentTimestamp) {
            return visitor.visitCurrentTimestamp(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IfExistsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IF(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IF, 0)!;
    }
    public KW_EXISTS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EXISTS, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_ifExists;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIfExists) {
             listener.enterIfExists(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIfExists) {
             listener.exitIfExists(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIfExists) {
            return visitor.visitIfExists(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IfNotExistsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_IF(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IF, 0)!;
    }
    public KW_NOT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_NOT, 0)!;
    }
    public KW_EXISTS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EXISTS, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_ifNotExists;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIfNotExists) {
             listener.enterIfNotExists(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIfNotExists) {
             listener.exitIfNotExists(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIfNotExists) {
            return visitor.visitIfNotExists(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OrReplaceContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_OR, 0)!;
    }
    public KW_REPLACE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_REPLACE, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_orReplace;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterOrReplace) {
             listener.enterOrReplace(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitOrReplace) {
             listener.exitOrReplace(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitOrReplace) {
            return visitor.visitOrReplace(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FunctionCallContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_functionCall;
    }
    public override copyFrom(ctx: FunctionCallContext): void {
        super.copyFrom(ctx);
    }
}
export class SpecificFunctionCallContext extends FunctionCallContext {
    public constructor(ctx: FunctionCallContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public specificFunction(): SpecificFunctionContext {
        return this.getRuleContext(0, SpecificFunctionContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSpecificFunctionCall) {
             listener.enterSpecificFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSpecificFunctionCall) {
             listener.exitSpecificFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSpecificFunctionCall) {
            return visitor.visitSpecificFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PasswordFunctionCallContext extends FunctionCallContext {
    public constructor(ctx: FunctionCallContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public passwordFunctionClause(): PasswordFunctionClauseContext {
        return this.getRuleContext(0, PasswordFunctionClauseContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPasswordFunctionCall) {
             listener.enterPasswordFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPasswordFunctionCall) {
             listener.exitPasswordFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPasswordFunctionCall) {
            return visitor.visitPasswordFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class UdfFunctionCallContext extends FunctionCallContext {
    public constructor(ctx: FunctionCallContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public functionName(): FunctionNameContext {
        return this.getRuleContext(0, FunctionNameContext)!;
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public functionArgs(): FunctionArgsContext | null {
        return this.getRuleContext(0, FunctionArgsContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUdfFunctionCall) {
             listener.enterUdfFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUdfFunctionCall) {
             listener.exitUdfFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUdfFunctionCall) {
            return visitor.visitUdfFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class NonAggregateFunctionCallContext extends FunctionCallContext {
    public constructor(ctx: FunctionCallContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public nonAggregateWindowedFunction(): NonAggregateWindowedFunctionContext {
        return this.getRuleContext(0, NonAggregateWindowedFunctionContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterNonAggregateFunctionCall) {
             listener.enterNonAggregateFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitNonAggregateFunctionCall) {
             listener.exitNonAggregateFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitNonAggregateFunctionCall) {
            return visitor.visitNonAggregateFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class AggregateFunctionCallContext extends FunctionCallContext {
    public constructor(ctx: FunctionCallContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public aggregateWindowedFunction(): AggregateWindowedFunctionContext {
        return this.getRuleContext(0, AggregateWindowedFunctionContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAggregateFunctionCall) {
             listener.enterAggregateFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAggregateFunctionCall) {
             listener.exitAggregateFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAggregateFunctionCall) {
            return visitor.visitAggregateFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ScalarFunctionCallContext extends FunctionCallContext {
    public constructor(ctx: FunctionCallContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public scalarFunctionName(): ScalarFunctionNameContext {
        return this.getRuleContext(0, ScalarFunctionNameContext)!;
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public functionArgs(): FunctionArgsContext | null {
        return this.getRuleContext(0, FunctionArgsContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterScalarFunctionCall) {
             listener.enterScalarFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitScalarFunctionCall) {
             listener.exitScalarFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitScalarFunctionCall) {
            return visitor.visitScalarFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class SpecificFunctionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_specificFunction;
    }
    public override copyFrom(ctx: SpecificFunctionContext): void {
        super.copyFrom(ctx);
    }
}
export class PositionFunctionCallContext extends SpecificFunctionContext {
    public _positionString?: StringLiteralContext;
    public _positionExpression?: ExpressionContext;
    public _inString?: StringLiteralContext;
    public _inExpression?: ExpressionContext;
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_POSITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_POSITION, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public KW_IN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IN, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public stringLiteral(): StringLiteralContext[];
    public stringLiteral(i: number): StringLiteralContext | null;
    public stringLiteral(i?: number): StringLiteralContext[] | StringLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(StringLiteralContext);
        }

        return this.getRuleContext(i, StringLiteralContext);
    }
    public expression(): ExpressionContext[];
    public expression(i: number): ExpressionContext | null;
    public expression(i?: number): ExpressionContext[] | ExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionContext);
        }

        return this.getRuleContext(i, ExpressionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPositionFunctionCall) {
             listener.enterPositionFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPositionFunctionCall) {
             listener.exitPositionFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPositionFunctionCall) {
            return visitor.visitPositionFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class TrimFunctionCallContext extends SpecificFunctionContext {
    public _positioinForm?: Token | null;
    public _sourceString?: StringLiteralContext;
    public _sourceExpression?: ExpressionContext;
    public _fromString?: StringLiteralContext;
    public _fromExpression?: ExpressionContext;
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_TRIM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_TRIM, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FROM, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_BOTH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BOTH, 0);
    }
    public KW_LEADING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LEADING, 0);
    }
    public KW_TRAILING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRAILING, 0);
    }
    public stringLiteral(): StringLiteralContext[];
    public stringLiteral(i: number): StringLiteralContext | null;
    public stringLiteral(i?: number): StringLiteralContext[] | StringLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(StringLiteralContext);
        }

        return this.getRuleContext(i, StringLiteralContext);
    }
    public expression(): ExpressionContext[];
    public expression(i: number): ExpressionContext | null;
    public expression(i?: number): ExpressionContext[] | ExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionContext);
        }

        return this.getRuleContext(i, ExpressionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTrimFunctionCall) {
             listener.enterTrimFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTrimFunctionCall) {
             listener.exitTrimFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTrimFunctionCall) {
            return visitor.visitTrimFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class JsonValueFunctionCallContext extends SpecificFunctionContext {
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_JSON_VALUE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_JSON_VALUE, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public expression(): ExpressionContext[];
    public expression(i: number): ExpressionContext | null;
    public expression(i?: number): ExpressionContext[] | ExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionContext);
        }

        return this.getRuleContext(i, ExpressionContext);
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.COMMA, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_RETURNING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RETURNING, 0);
    }
    public convertedDataType(): ConvertedDataTypeContext | null {
        return this.getRuleContext(0, ConvertedDataTypeContext);
    }
    public jsonOnEmpty(): JsonOnEmptyContext | null {
        return this.getRuleContext(0, JsonOnEmptyContext);
    }
    public jsonOnError(): JsonOnErrorContext | null {
        return this.getRuleContext(0, JsonOnErrorContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterJsonValueFunctionCall) {
             listener.enterJsonValueFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitJsonValueFunctionCall) {
             listener.exitJsonValueFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitJsonValueFunctionCall) {
            return visitor.visitJsonValueFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class CaseFunctionCallContext extends SpecificFunctionContext {
    public _elseArg?: FunctionArgContext;
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CASE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CASE, 0)!;
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_END, 0)!;
    }
    public caseFuncAlternative(): CaseFuncAlternativeContext[];
    public caseFuncAlternative(i: number): CaseFuncAlternativeContext | null;
    public caseFuncAlternative(i?: number): CaseFuncAlternativeContext[] | CaseFuncAlternativeContext | null {
        if (i === undefined) {
            return this.getRuleContexts(CaseFuncAlternativeContext);
        }

        return this.getRuleContext(i, CaseFuncAlternativeContext);
    }
    public KW_ELSE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ELSE, 0);
    }
    public functionArg(): FunctionArgContext | null {
        return this.getRuleContext(0, FunctionArgContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCaseFunctionCall) {
             listener.enterCaseFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCaseFunctionCall) {
             listener.exitCaseFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCaseFunctionCall) {
            return visitor.visitCaseFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ExtractFunctionCallContext extends SpecificFunctionContext {
    public _sourceString?: StringLiteralContext;
    public _sourceExpression?: ExpressionContext;
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_EXTRACT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EXTRACT, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public intervalType(): IntervalTypeContext {
        return this.getRuleContext(0, IntervalTypeContext)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FROM, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public stringLiteral(): StringLiteralContext | null {
        return this.getRuleContext(0, StringLiteralContext);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterExtractFunctionCall) {
             listener.enterExtractFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitExtractFunctionCall) {
             listener.exitExtractFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitExtractFunctionCall) {
            return visitor.visitExtractFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class DataTypeFunctionCallContext extends SpecificFunctionContext {
    public _separator?: Token | null;
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CONVERT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONVERT, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public convertedDataType(): ConvertedDataTypeContext | null {
        return this.getRuleContext(0, ConvertedDataTypeContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.COMMA, 0);
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USING, 0);
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public KW_CAST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CAST, 0);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDataTypeFunctionCall) {
             listener.enterDataTypeFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDataTypeFunctionCall) {
             listener.exitDataTypeFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDataTypeFunctionCall) {
            return visitor.visitDataTypeFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ValuesFunctionCallContext extends SpecificFunctionContext {
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_VALUES(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_VALUES, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public columnName(): ColumnNameContext {
        return this.getRuleContext(0, ColumnNameContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterValuesFunctionCall) {
             listener.enterValuesFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitValuesFunctionCall) {
             listener.exitValuesFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitValuesFunctionCall) {
            return visitor.visitValuesFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class CaseExpressionFunctionCallContext extends SpecificFunctionContext {
    public _elseArg?: FunctionArgContext;
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CASE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CASE, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public KW_END(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_END, 0)!;
    }
    public caseFuncAlternative(): CaseFuncAlternativeContext[];
    public caseFuncAlternative(i: number): CaseFuncAlternativeContext | null;
    public caseFuncAlternative(i?: number): CaseFuncAlternativeContext[] | CaseFuncAlternativeContext | null {
        if (i === undefined) {
            return this.getRuleContexts(CaseFuncAlternativeContext);
        }

        return this.getRuleContext(i, CaseFuncAlternativeContext);
    }
    public KW_ELSE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ELSE, 0);
    }
    public functionArg(): FunctionArgContext | null {
        return this.getRuleContext(0, FunctionArgContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCaseExpressionFunctionCall) {
             listener.enterCaseExpressionFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCaseExpressionFunctionCall) {
             listener.exitCaseExpressionFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCaseExpressionFunctionCall) {
            return visitor.visitCaseExpressionFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class CurrentUserContext extends SpecificFunctionContext {
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public currentUserExpression(): CurrentUserExpressionContext {
        return this.getRuleContext(0, CurrentUserExpressionContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCurrentUser) {
             listener.enterCurrentUser(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCurrentUser) {
             listener.exitCurrentUser(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCurrentUser) {
            return visitor.visitCurrentUser(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SimpleFunctionCallContext extends SpecificFunctionContext {
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CURRENT_DATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT_DATE, 0);
    }
    public KW_CURRENT_TIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT_TIME, 0);
    }
    public KW_CURRENT_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT_TIMESTAMP, 0);
    }
    public KW_LOCALTIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCALTIME, 0);
    }
    public KW_UTC_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UTC_TIMESTAMP, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEMA, 0);
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSimpleFunctionCall) {
             listener.enterSimpleFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSimpleFunctionCall) {
             listener.exitSimpleFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSimpleFunctionCall) {
            return visitor.visitSimpleFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class CharFunctionCallContext extends SpecificFunctionContext {
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_CHAR(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_CHAR, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public functionArgs(): FunctionArgsContext {
        return this.getRuleContext(0, FunctionArgsContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_USING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USING, 0);
    }
    public charsetName(): CharsetNameContext | null {
        return this.getRuleContext(0, CharsetNameContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCharFunctionCall) {
             listener.enterCharFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCharFunctionCall) {
             listener.exitCharFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCharFunctionCall) {
            return visitor.visitCharFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class WeightFunctionCallContext extends SpecificFunctionContext {
    public _stringFormat?: Token | null;
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_WEIGHT_STRING(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_WEIGHT_STRING, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode[];
    public LR_BRACKET(i: number): antlr.TerminalNode | null;
    public LR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.LR_BRACKET, i);
    	}
    }
    public RR_BRACKET(): antlr.TerminalNode[];
    public RR_BRACKET(i: number): antlr.TerminalNode | null;
    public RR_BRACKET(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.RR_BRACKET);
    	} else {
    		return this.getToken(MySqlParser.RR_BRACKET, i);
    	}
    }
    public stringLiteral(): StringLiteralContext | null {
        return this.getRuleContext(0, StringLiteralContext);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public KW_AS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AS, 0);
    }
    public decimalLiteral(): DecimalLiteralContext | null {
        return this.getRuleContext(0, DecimalLiteralContext);
    }
    public levelsInWeightString(): LevelsInWeightStringContext | null {
        return this.getRuleContext(0, LevelsInWeightStringContext);
    }
    public KW_CHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHAR, 0);
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINARY, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterWeightFunctionCall) {
             listener.enterWeightFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitWeightFunctionCall) {
             listener.exitWeightFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitWeightFunctionCall) {
            return visitor.visitWeightFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class GetFormatFunctionCallContext extends SpecificFunctionContext {
    public _datetimeFormat?: Token | null;
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_GET_FORMAT(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_GET_FORMAT, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode {
        return this.getToken(MySqlParser.COMMA, 0)!;
    }
    public stringLiteral(): StringLiteralContext {
        return this.getRuleContext(0, StringLiteralContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_DATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATE, 0);
    }
    public KW_TIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TIME, 0);
    }
    public KW_DATETIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATETIME, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterGetFormatFunctionCall) {
             listener.enterGetFormatFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitGetFormatFunctionCall) {
             listener.exitGetFormatFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitGetFormatFunctionCall) {
            return visitor.visitGetFormatFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SubstrFunctionCallContext extends SpecificFunctionContext {
    public _sourceString?: StringLiteralContext;
    public _sourceExpression?: ExpressionContext;
    public _fromDecimal?: DecimalLiteralContext;
    public _fromExpression?: ExpressionContext;
    public _forDecimal?: DecimalLiteralContext;
    public _forExpression?: ExpressionContext;
    public constructor(ctx: SpecificFunctionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public KW_FROM(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_FROM, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_SUBSTR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBSTR, 0);
    }
    public KW_SUBSTRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBSTRING, 0);
    }
    public stringLiteral(): StringLiteralContext | null {
        return this.getRuleContext(0, StringLiteralContext);
    }
    public expression(): ExpressionContext[];
    public expression(i: number): ExpressionContext | null;
    public expression(i?: number): ExpressionContext[] | ExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionContext);
        }

        return this.getRuleContext(i, ExpressionContext);
    }
    public decimalLiteral(): DecimalLiteralContext[];
    public decimalLiteral(i: number): DecimalLiteralContext | null;
    public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DecimalLiteralContext);
        }

        return this.getRuleContext(i, DecimalLiteralContext);
    }
    public KW_FOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOR, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSubstrFunctionCall) {
             listener.enterSubstrFunctionCall(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSubstrFunctionCall) {
             listener.exitSubstrFunctionCall(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSubstrFunctionCall) {
            return visitor.visitSubstrFunctionCall(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CaseFuncAlternativeContext extends antlr.ParserRuleContext {
    public _condition?: FunctionArgContext;
    public _consequent?: FunctionArgContext;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_WHEN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_WHEN, 0)!;
    }
    public KW_THEN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_THEN, 0)!;
    }
    public functionArg(): FunctionArgContext[];
    public functionArg(i: number): FunctionArgContext | null;
    public functionArg(i?: number): FunctionArgContext[] | FunctionArgContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FunctionArgContext);
        }

        return this.getRuleContext(i, FunctionArgContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_caseFuncAlternative;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCaseFuncAlternative) {
             listener.enterCaseFuncAlternative(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCaseFuncAlternative) {
             listener.exitCaseFuncAlternative(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCaseFuncAlternative) {
            return visitor.visitCaseFuncAlternative(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LevelsInWeightStringContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_levelsInWeightString;
    }
    public override copyFrom(ctx: LevelsInWeightStringContext): void {
        super.copyFrom(ctx);
    }
}
export class LevelWeightRangeContext extends LevelsInWeightStringContext {
    public _firstLevel?: DecimalLiteralContext;
    public _lastLevel?: DecimalLiteralContext;
    public constructor(ctx: LevelsInWeightStringContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_LEVEL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LEVEL, 0)!;
    }
    public MINUS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.MINUS, 0)!;
    }
    public decimalLiteral(): DecimalLiteralContext[];
    public decimalLiteral(i: number): DecimalLiteralContext | null;
    public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DecimalLiteralContext);
        }

        return this.getRuleContext(i, DecimalLiteralContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLevelWeightRange) {
             listener.enterLevelWeightRange(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLevelWeightRange) {
             listener.exitLevelWeightRange(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLevelWeightRange) {
            return visitor.visitLevelWeightRange(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class LevelWeightListContext extends LevelsInWeightStringContext {
    public constructor(ctx: LevelsInWeightStringContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_LEVEL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LEVEL, 0)!;
    }
    public levelInWeightListElement(): LevelInWeightListElementContext[];
    public levelInWeightListElement(i: number): LevelInWeightListElementContext | null;
    public levelInWeightListElement(i?: number): LevelInWeightListElementContext[] | LevelInWeightListElementContext | null {
        if (i === undefined) {
            return this.getRuleContexts(LevelInWeightListElementContext);
        }

        return this.getRuleContext(i, LevelInWeightListElementContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLevelWeightList) {
             listener.enterLevelWeightList(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLevelWeightList) {
             listener.exitLevelWeightList(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLevelWeightList) {
            return visitor.visitLevelWeightList(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LevelInWeightListElementContext extends antlr.ParserRuleContext {
    public _orderType?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public decimalLiteral(): DecimalLiteralContext {
        return this.getRuleContext(0, DecimalLiteralContext)!;
    }
    public KW_ASC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ASC, 0);
    }
    public KW_DESC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DESC, 0);
    }
    public KW_REVERSE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REVERSE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_levelInWeightListElement;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLevelInWeightListElement) {
             listener.enterLevelInWeightListElement(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLevelInWeightListElement) {
             listener.exitLevelInWeightListElement(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLevelInWeightListElement) {
            return visitor.visitLevelInWeightListElement(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class AggregateWindowedFunctionContext extends antlr.ParserRuleContext {
    public _aggregator?: Token | null;
    public _starArg?: Token | null;
    public _separator?: Token | null;
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public functionArg(): FunctionArgContext | null {
        return this.getRuleContext(0, FunctionArgContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_AVG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AVG, 0);
    }
    public KW_MAX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX, 0);
    }
    public KW_MIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MIN, 0);
    }
    public KW_SUM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUM, 0);
    }
    public overClause(): OverClauseContext | null {
        return this.getRuleContext(0, OverClauseContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public KW_DISTINCT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISTINCT, 0);
    }
    public KW_COUNT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COUNT, 0);
    }
    public functionArgs(): FunctionArgsContext | null {
        return this.getRuleContext(0, FunctionArgsContext);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STAR, 0);
    }
    public KW_BIT_AND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BIT_AND, 0);
    }
    public KW_BIT_OR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BIT_OR, 0);
    }
    public KW_BIT_XOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BIT_XOR, 0);
    }
    public KW_STD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STD, 0);
    }
    public KW_STDDEV(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STDDEV, 0);
    }
    public KW_STDDEV_POP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STDDEV_POP, 0);
    }
    public KW_STDDEV_SAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STDDEV_SAMP, 0);
    }
    public KW_VAR_POP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VAR_POP, 0);
    }
    public KW_VAR_SAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VAR_SAMP, 0);
    }
    public KW_VARIANCE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VARIANCE, 0);
    }
    public KW_GROUP_CONCAT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GROUP_CONCAT, 0);
    }
    public KW_ORDER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ORDER, 0);
    }
    public KW_BY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BY, 0);
    }
    public orderByExpression(): OrderByExpressionContext[];
    public orderByExpression(i: number): OrderByExpressionContext | null;
    public orderByExpression(i?: number): OrderByExpressionContext[] | OrderByExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(OrderByExpressionContext);
        }

        return this.getRuleContext(i, OrderByExpressionContext);
    }
    public KW_SEPARATOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SEPARATOR, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_aggregateWindowedFunction;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterAggregateWindowedFunction) {
             listener.enterAggregateWindowedFunction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitAggregateWindowedFunction) {
             listener.exitAggregateWindowedFunction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitAggregateWindowedFunction) {
            return visitor.visitAggregateWindowedFunction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class NonAggregateWindowedFunctionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public overClause(): OverClauseContext {
        return this.getRuleContext(0, OverClauseContext)!;
    }
    public KW_LAG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LAG, 0);
    }
    public KW_LEAD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LEAD, 0);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public decimalLiteral(): DecimalLiteralContext[];
    public decimalLiteral(i: number): DecimalLiteralContext | null;
    public decimalLiteral(i?: number): DecimalLiteralContext[] | DecimalLiteralContext | null {
        if (i === undefined) {
            return this.getRuleContexts(DecimalLiteralContext);
        }

        return this.getRuleContext(i, DecimalLiteralContext);
    }
    public KW_FIRST_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIRST_VALUE, 0);
    }
    public KW_LAST_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LAST_VALUE, 0);
    }
    public KW_CUME_DIST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CUME_DIST, 0);
    }
    public KW_DENSE_RANK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DENSE_RANK, 0);
    }
    public KW_PERCENT_RANK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PERCENT_RANK, 0);
    }
    public KW_RANK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RANK, 0);
    }
    public KW_ROW_NUMBER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROW_NUMBER, 0);
    }
    public KW_NTH_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NTH_VALUE, 0);
    }
    public KW_NTILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NTILE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_nonAggregateWindowedFunction;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterNonAggregateWindowedFunction) {
             listener.enterNonAggregateWindowedFunction(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitNonAggregateWindowedFunction) {
             listener.exitNonAggregateWindowedFunction(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitNonAggregateWindowedFunction) {
            return visitor.visitNonAggregateWindowedFunction(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class OverClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_OVER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_OVER, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public windowSpec(): WindowSpecContext | null {
        return this.getRuleContext(0, WindowSpecContext);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public windowName(): WindowNameContext | null {
        return this.getRuleContext(0, WindowNameContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_overClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterOverClause) {
             listener.enterOverClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitOverClause) {
             listener.exitOverClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitOverClause) {
            return visitor.visitOverClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class WindowSpecContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public windowName(): WindowNameContext | null {
        return this.getRuleContext(0, WindowNameContext);
    }
    public partitionClause(): PartitionClauseContext | null {
        return this.getRuleContext(0, PartitionClauseContext);
    }
    public orderByClause(): OrderByClauseContext | null {
        return this.getRuleContext(0, OrderByClauseContext);
    }
    public frameClause(): FrameClauseContext | null {
        return this.getRuleContext(0, FrameClauseContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_windowSpec;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterWindowSpec) {
             listener.enterWindowSpec(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitWindowSpec) {
             listener.exitWindowSpec(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitWindowSpec) {
            return visitor.visitWindowSpec(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class WindowNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public uid(): UidContext {
        return this.getRuleContext(0, UidContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_windowName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterWindowName) {
             listener.enterWindowName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitWindowName) {
             listener.exitWindowName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitWindowName) {
            return visitor.visitWindowName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FrameClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public frameUnits(): FrameUnitsContext {
        return this.getRuleContext(0, FrameUnitsContext)!;
    }
    public frameExtent(): FrameExtentContext {
        return this.getRuleContext(0, FrameExtentContext)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_frameClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFrameClause) {
             listener.enterFrameClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFrameClause) {
             listener.exitFrameClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFrameClause) {
            return visitor.visitFrameClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FrameUnitsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ROWS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROWS, 0);
    }
    public KW_RANGE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RANGE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_frameUnits;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFrameUnits) {
             listener.enterFrameUnits(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFrameUnits) {
             listener.exitFrameUnits(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFrameUnits) {
            return visitor.visitFrameUnits(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FrameExtentContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public frameRange(): FrameRangeContext | null {
        return this.getRuleContext(0, FrameRangeContext);
    }
    public frameBetween(): FrameBetweenContext | null {
        return this.getRuleContext(0, FrameBetweenContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_frameExtent;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFrameExtent) {
             listener.enterFrameExtent(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFrameExtent) {
             listener.exitFrameExtent(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFrameExtent) {
            return visitor.visitFrameExtent(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FrameBetweenContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_BETWEEN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BETWEEN, 0)!;
    }
    public frameRange(): FrameRangeContext[];
    public frameRange(i: number): FrameRangeContext | null;
    public frameRange(i?: number): FrameRangeContext[] | FrameRangeContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FrameRangeContext);
        }

        return this.getRuleContext(i, FrameRangeContext);
    }
    public KW_AND(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AND, 0)!;
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_frameBetween;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFrameBetween) {
             listener.enterFrameBetween(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFrameBetween) {
             listener.exitFrameBetween(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFrameBetween) {
            return visitor.visitFrameBetween(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FrameRangeContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT, 0);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROW, 0);
    }
    public KW_UNBOUNDED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNBOUNDED, 0);
    }
    public KW_PRECEDING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRECEDING, 0);
    }
    public KW_FOLLOWING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOLLOWING, 0);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_frameRange;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFrameRange) {
             listener.enterFrameRange(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFrameRange) {
             listener.exitFrameRange(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFrameRange) {
            return visitor.visitFrameRange(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PartitionClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_PARTITION(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_PARTITION, 0)!;
    }
    public KW_BY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BY, 0)!;
    }
    public expression(): ExpressionContext[];
    public expression(i: number): ExpressionContext | null;
    public expression(i?: number): ExpressionContext[] | ExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionContext);
        }

        return this.getRuleContext(i, ExpressionContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_partitionClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPartitionClause) {
             listener.enterPartitionClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPartitionClause) {
             listener.exitPartitionClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPartitionClause) {
            return visitor.visitPartitionClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ScalarFunctionNameContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public functionNameBase(): FunctionNameBaseContext | null {
        return this.getRuleContext(0, FunctionNameBaseContext);
    }
    public KW_ASCII(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ASCII, 0);
    }
    public KW_CURDATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURDATE, 0);
    }
    public KW_CURRENT_DATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT_DATE, 0);
    }
    public KW_CURRENT_TIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT_TIME, 0);
    }
    public KW_CURRENT_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT_TIMESTAMP, 0);
    }
    public KW_CURTIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURTIME, 0);
    }
    public KW_DATE_ADD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATE_ADD, 0);
    }
    public KW_DATE_SUB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATE_SUB, 0);
    }
    public KW_IF(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IF, 0);
    }
    public KW_INSERT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INSERT, 0);
    }
    public KW_LOCALTIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCALTIME, 0);
    }
    public KW_LOCALTIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCALTIMESTAMP, 0);
    }
    public KW_MID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MID, 0);
    }
    public KW_NOW(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOW, 0);
    }
    public KW_REPEAT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPEAT, 0);
    }
    public KW_REPLACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLACE, 0);
    }
    public KW_SUBSTR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBSTR, 0);
    }
    public KW_SUBSTRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBSTRING, 0);
    }
    public KW_SYSDATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SYSDATE, 0);
    }
    public KW_TRIM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRIM, 0);
    }
    public KW_UTC_DATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UTC_DATE, 0);
    }
    public KW_UTC_TIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UTC_TIME, 0);
    }
    public KW_UTC_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UTC_TIMESTAMP, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_scalarFunctionName;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterScalarFunctionName) {
             listener.enterScalarFunctionName(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitScalarFunctionName) {
             listener.exitScalarFunctionName(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitScalarFunctionName) {
            return visitor.visitScalarFunctionName(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PasswordFunctionClauseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public functionArg(): FunctionArgContext {
        return this.getRuleContext(0, FunctionArgContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD, 0);
    }
    public KW_OLD_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OLD_PASSWORD, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_passwordFunctionClause;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPasswordFunctionClause) {
             listener.enterPasswordFunctionClause(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPasswordFunctionClause) {
             listener.exitPasswordFunctionClause(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPasswordFunctionClause) {
            return visitor.visitPasswordFunctionClause(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FunctionArgsContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public functionArg(): FunctionArgContext[];
    public functionArg(i: number): FunctionArgContext | null;
    public functionArg(i?: number): FunctionArgContext[] | FunctionArgContext | null {
        if (i === undefined) {
            return this.getRuleContexts(FunctionArgContext);
        }

        return this.getRuleContext(i, FunctionArgContext);
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_functionArgs;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFunctionArgs) {
             listener.enterFunctionArgs(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFunctionArgs) {
             listener.exitFunctionArgs(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunctionArgs) {
            return visitor.visitFunctionArgs(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FunctionArgContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public constant(): ConstantContext | null {
        return this.getRuleContext(0, ConstantContext);
    }
    public functionCall(): FunctionCallContext | null {
        return this.getRuleContext(0, FunctionCallContext);
    }
    public expression(): ExpressionContext | null {
        return this.getRuleContext(0, ExpressionContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_functionArg;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFunctionArg) {
             listener.enterFunctionArg(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFunctionArg) {
             listener.exitFunctionArg(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunctionArg) {
            return visitor.visitFunctionArg(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExpressionContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_expression;
    }
    public override copyFrom(ctx: ExpressionContext): void {
        super.copyFrom(ctx);
    }
}
export class IsExpressionContext extends ExpressionContext {
    public _testValue?: Token | null;
    public constructor(ctx: ExpressionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public predicate(): PredicateContext {
        return this.getRuleContext(0, PredicateContext)!;
    }
    public KW_IS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IS, 0)!;
    }
    public KW_TRUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRUE, 0);
    }
    public KW_FALSE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FALSE, 0);
    }
    public KW_UNKNOWN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNKNOWN, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIsExpression) {
             listener.enterIsExpression(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIsExpression) {
             listener.exitIsExpression(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIsExpression) {
            return visitor.visitIsExpression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class NotExpressionContext extends ExpressionContext {
    public _notOperator?: Token | null;
    public constructor(ctx: ExpressionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public EXCLAMATION_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EXCLAMATION_SYMBOL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterNotExpression) {
             listener.enterNotExpression(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitNotExpression) {
             listener.exitNotExpression(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitNotExpression) {
            return visitor.visitNotExpression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class LogicalExpressionContext extends ExpressionContext {
    public constructor(ctx: ExpressionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public expression(): ExpressionContext[];
    public expression(i: number): ExpressionContext | null;
    public expression(i?: number): ExpressionContext[] | ExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionContext);
        }

        return this.getRuleContext(i, ExpressionContext);
    }
    public logicalOperator(): LogicalOperatorContext {
        return this.getRuleContext(0, LogicalOperatorContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLogicalExpression) {
             listener.enterLogicalExpression(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLogicalExpression) {
             listener.exitLogicalExpression(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLogicalExpression) {
            return visitor.visitLogicalExpression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class PredicateExpressionContext extends ExpressionContext {
    public constructor(ctx: ExpressionContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public predicate(): PredicateContext {
        return this.getRuleContext(0, PredicateContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPredicateExpression) {
             listener.enterPredicateExpression(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPredicateExpression) {
             listener.exitPredicateExpression(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPredicateExpression) {
            return visitor.visitPredicateExpression(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PredicateContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_predicate;
    }
    public override copyFrom(ctx: PredicateContext): void {
        super.copyFrom(ctx);
    }
}
export class SoundsLikePredicateContext extends PredicateContext {
    public constructor(ctx: PredicateContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public predicate(): PredicateContext[];
    public predicate(i: number): PredicateContext | null;
    public predicate(i?: number): PredicateContext[] | PredicateContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PredicateContext);
        }

        return this.getRuleContext(i, PredicateContext);
    }
    public KW_SOUNDS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_SOUNDS, 0)!;
    }
    public KW_LIKE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LIKE, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSoundsLikePredicate) {
             listener.enterSoundsLikePredicate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSoundsLikePredicate) {
             listener.exitSoundsLikePredicate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSoundsLikePredicate) {
            return visitor.visitSoundsLikePredicate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ExpressionAtomPredicateContext extends PredicateContext {
    public constructor(ctx: PredicateContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public expressionAtom(): ExpressionAtomContext {
        return this.getRuleContext(0, ExpressionAtomContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterExpressionAtomPredicate) {
             listener.enterExpressionAtomPredicate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitExpressionAtomPredicate) {
             listener.exitExpressionAtomPredicate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitExpressionAtomPredicate) {
            return visitor.visitExpressionAtomPredicate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class JsonMemberOfPredicateContext extends PredicateContext {
    public constructor(ctx: PredicateContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public predicate(): PredicateContext[];
    public predicate(i: number): PredicateContext | null;
    public predicate(i?: number): PredicateContext[] | PredicateContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PredicateContext);
        }

        return this.getRuleContext(i, PredicateContext);
    }
    public KW_MEMBER(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_MEMBER, 0)!;
    }
    public KW_OF(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_OF, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterJsonMemberOfPredicate) {
             listener.enterJsonMemberOfPredicate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitJsonMemberOfPredicate) {
             listener.exitJsonMemberOfPredicate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitJsonMemberOfPredicate) {
            return visitor.visitJsonMemberOfPredicate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class BinaryComparisonPredicateContext extends PredicateContext {
    public _quantifier?: Token | null;
    public _subQuery?: SelectStatementContext;
    public _right?: PredicateContext;
    public constructor(ctx: PredicateContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public predicate(): PredicateContext[];
    public predicate(i: number): PredicateContext | null;
    public predicate(i?: number): PredicateContext[] | PredicateContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PredicateContext);
        }

        return this.getRuleContext(i, PredicateContext);
    }
    public comparisonOperator(): ComparisonOperatorContext {
        return this.getRuleContext(0, ComparisonOperatorContext)!;
    }
    public LR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LR_BRACKET, 0);
    }
    public RR_BRACKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.RR_BRACKET, 0);
    }
    public selectStatement(): SelectStatementContext | null {
        return this.getRuleContext(0, SelectStatementContext);
    }
    public KW_ALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALL, 0);
    }
    public KW_ANY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ANY, 0);
    }
    public KW_SOME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOME, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterBinaryComparisonPredicate) {
             listener.enterBinaryComparisonPredicate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitBinaryComparisonPredicate) {
             listener.exitBinaryComparisonPredicate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitBinaryComparisonPredicate) {
            return visitor.visitBinaryComparisonPredicate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class InPredicateContext extends PredicateContext {
    public constructor(ctx: PredicateContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public predicate(): PredicateContext {
        return this.getRuleContext(0, PredicateContext)!;
    }
    public KW_IN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IN, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public selectStatement(): SelectStatementContext | null {
        return this.getRuleContext(0, SelectStatementContext);
    }
    public expressions(): ExpressionsContext | null {
        return this.getRuleContext(0, ExpressionsContext);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterInPredicate) {
             listener.enterInPredicate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitInPredicate) {
             listener.exitInPredicate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitInPredicate) {
            return visitor.visitInPredicate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class BetweenPredicateContext extends PredicateContext {
    public constructor(ctx: PredicateContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public predicate(): PredicateContext[];
    public predicate(i: number): PredicateContext | null;
    public predicate(i?: number): PredicateContext[] | PredicateContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PredicateContext);
        }

        return this.getRuleContext(i, PredicateContext);
    }
    public KW_BETWEEN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BETWEEN, 0)!;
    }
    public KW_AND(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_AND, 0)!;
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterBetweenPredicate) {
             listener.enterBetweenPredicate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitBetweenPredicate) {
             listener.exitBetweenPredicate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitBetweenPredicate) {
            return visitor.visitBetweenPredicate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class IsNullPredicateContext extends PredicateContext {
    public constructor(ctx: PredicateContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public predicate(): PredicateContext {
        return this.getRuleContext(0, PredicateContext)!;
    }
    public KW_IS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_IS, 0)!;
    }
    public nullNotnull(): NullNotnullContext {
        return this.getRuleContext(0, NullNotnullContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIsNullPredicate) {
             listener.enterIsNullPredicate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIsNullPredicate) {
             listener.exitIsNullPredicate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIsNullPredicate) {
            return visitor.visitIsNullPredicate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class LikePredicateContext extends PredicateContext {
    public constructor(ctx: PredicateContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public predicate(): PredicateContext[];
    public predicate(i: number): PredicateContext | null;
    public predicate(i?: number): PredicateContext[] | PredicateContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PredicateContext);
        }

        return this.getRuleContext(i, PredicateContext);
    }
    public KW_LIKE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_LIKE, 0)!;
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public KW_ESCAPE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ESCAPE, 0);
    }
    public STRING_LITERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STRING_LITERAL, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLikePredicate) {
             listener.enterLikePredicate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLikePredicate) {
             listener.exitLikePredicate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLikePredicate) {
            return visitor.visitLikePredicate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class RegexpPredicateContext extends PredicateContext {
    public _regex?: Token | null;
    public constructor(ctx: PredicateContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public predicate(): PredicateContext[];
    public predicate(i: number): PredicateContext | null;
    public predicate(i?: number): PredicateContext[] | PredicateContext | null {
        if (i === undefined) {
            return this.getRuleContexts(PredicateContext);
        }

        return this.getRuleContext(i, PredicateContext);
    }
    public KW_REGEXP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REGEXP, 0);
    }
    public KW_RLIKE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RLIKE, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterRegexpPredicate) {
             listener.enterRegexpPredicate(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitRegexpPredicate) {
             listener.exitRegexpPredicate(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitRegexpPredicate) {
            return visitor.visitRegexpPredicate(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ExpressionAtomContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_expressionAtom;
    }
    public override copyFrom(ctx: ExpressionAtomContext): void {
        super.copyFrom(ctx);
    }
}
export class UnaryExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public unaryOperator(): UnaryOperatorContext {
        return this.getRuleContext(0, UnaryOperatorContext)!;
    }
    public expressionAtom(): ExpressionAtomContext {
        return this.getRuleContext(0, ExpressionAtomContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUnaryExpressionAtom) {
             listener.enterUnaryExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUnaryExpressionAtom) {
             listener.exitUnaryExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUnaryExpressionAtom) {
            return visitor.visitUnaryExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class CollateExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public expressionAtom(): ExpressionAtomContext {
        return this.getRuleContext(0, ExpressionAtomContext)!;
    }
    public KW_COLLATE(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_COLLATE, 0)!;
    }
    public collationName(): CollationNameContext {
        return this.getRuleContext(0, CollationNameContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCollateExpressionAtom) {
             listener.enterCollateExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCollateExpressionAtom) {
             listener.exitCollateExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCollateExpressionAtom) {
            return visitor.visitCollateExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ColumnNameExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public columnName(): ColumnNameContext {
        return this.getRuleContext(0, ColumnNameContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterColumnNameExpressionAtom) {
             listener.enterColumnNameExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitColumnNameExpressionAtom) {
             listener.exitColumnNameExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitColumnNameExpressionAtom) {
            return visitor.visitColumnNameExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class VariableAssignExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public LOCAL_ID(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LOCAL_ID, 0)!;
    }
    public VAR_ASSIGN(): antlr.TerminalNode {
        return this.getToken(MySqlParser.VAR_ASSIGN, 0)!;
    }
    public expressionAtom(): ExpressionAtomContext {
        return this.getRuleContext(0, ExpressionAtomContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterVariableAssignExpressionAtom) {
             listener.enterVariableAssignExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitVariableAssignExpressionAtom) {
             listener.exitVariableAssignExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitVariableAssignExpressionAtom) {
            return visitor.visitVariableAssignExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class MysqlVariableExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public mysqlVariable(): MysqlVariableContext {
        return this.getRuleContext(0, MysqlVariableContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterMysqlVariableExpressionAtom) {
             listener.enterMysqlVariableExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitMysqlVariableExpressionAtom) {
             listener.exitMysqlVariableExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitMysqlVariableExpressionAtom) {
            return visitor.visitMysqlVariableExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class NestedExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public expression(): ExpressionContext[];
    public expression(i: number): ExpressionContext | null;
    public expression(i?: number): ExpressionContext[] | ExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionContext);
        }

        return this.getRuleContext(i, ExpressionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterNestedExpressionAtom) {
             listener.enterNestedExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitNestedExpressionAtom) {
             listener.exitNestedExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitNestedExpressionAtom) {
            return visitor.visitNestedExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class NestedRowExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_ROW(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_ROW, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public expression(): ExpressionContext[];
    public expression(i: number): ExpressionContext | null;
    public expression(i?: number): ExpressionContext[] | ExpressionContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionContext);
        }

        return this.getRuleContext(i, ExpressionContext);
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public COMMA(): antlr.TerminalNode[];
    public COMMA(i: number): antlr.TerminalNode | null;
    public COMMA(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.COMMA);
    	} else {
    		return this.getToken(MySqlParser.COMMA, i);
    	}
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterNestedRowExpressionAtom) {
             listener.enterNestedRowExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitNestedRowExpressionAtom) {
             listener.exitNestedRowExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitNestedRowExpressionAtom) {
            return visitor.visitNestedRowExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class MathExpressionAtomContext extends ExpressionAtomContext {
    public _left?: ExpressionAtomContext;
    public _right?: ExpressionAtomContext;
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public mathOperator(): MathOperatorContext {
        return this.getRuleContext(0, MathOperatorContext)!;
    }
    public expressionAtom(): ExpressionAtomContext[];
    public expressionAtom(i: number): ExpressionAtomContext | null;
    public expressionAtom(i?: number): ExpressionAtomContext[] | ExpressionAtomContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionAtomContext);
        }

        return this.getRuleContext(i, ExpressionAtomContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterMathExpressionAtom) {
             listener.enterMathExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitMathExpressionAtom) {
             listener.exitMathExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitMathExpressionAtom) {
            return visitor.visitMathExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ExistsExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_EXISTS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_EXISTS, 0)!;
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public selectStatement(): SelectStatementContext {
        return this.getRuleContext(0, SelectStatementContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterExistsExpressionAtom) {
             listener.enterExistsExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitExistsExpressionAtom) {
             listener.exitExistsExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitExistsExpressionAtom) {
            return visitor.visitExistsExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class IntervalExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_INTERVAL(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_INTERVAL, 0)!;
    }
    public expression(): ExpressionContext {
        return this.getRuleContext(0, ExpressionContext)!;
    }
    public intervalType(): IntervalTypeContext {
        return this.getRuleContext(0, IntervalTypeContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIntervalExpressionAtom) {
             listener.enterIntervalExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIntervalExpressionAtom) {
             listener.exitIntervalExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIntervalExpressionAtom) {
            return visitor.visitIntervalExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class JsonExpressionAtomContext extends ExpressionAtomContext {
    public _left?: ExpressionAtomContext;
    public _right?: ExpressionAtomContext;
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public jsonOperator(): JsonOperatorContext {
        return this.getRuleContext(0, JsonOperatorContext)!;
    }
    public expressionAtom(): ExpressionAtomContext[];
    public expressionAtom(i: number): ExpressionAtomContext | null;
    public expressionAtom(i?: number): ExpressionAtomContext[] | ExpressionAtomContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionAtomContext);
        }

        return this.getRuleContext(i, ExpressionAtomContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterJsonExpressionAtom) {
             listener.enterJsonExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitJsonExpressionAtom) {
             listener.exitJsonExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitJsonExpressionAtom) {
            return visitor.visitJsonExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class SubqueryExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public LR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.LR_BRACKET, 0)!;
    }
    public selectStatement(): SelectStatementContext {
        return this.getRuleContext(0, SelectStatementContext)!;
    }
    public RR_BRACKET(): antlr.TerminalNode {
        return this.getToken(MySqlParser.RR_BRACKET, 0)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterSubqueryExpressionAtom) {
             listener.enterSubqueryExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitSubqueryExpressionAtom) {
             listener.exitSubqueryExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitSubqueryExpressionAtom) {
            return visitor.visitSubqueryExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class ConstantExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public constant(): ConstantContext {
        return this.getRuleContext(0, ConstantContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterConstantExpressionAtom) {
             listener.enterConstantExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitConstantExpressionAtom) {
             listener.exitConstantExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitConstantExpressionAtom) {
            return visitor.visitConstantExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class FunctionCallExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public functionCall(): FunctionCallContext {
        return this.getRuleContext(0, FunctionCallContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFunctionCallExpressionAtom) {
             listener.enterFunctionCallExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFunctionCallExpressionAtom) {
             listener.exitFunctionCallExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunctionCallExpressionAtom) {
            return visitor.visitFunctionCallExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class BinaryExpressionAtomContext extends ExpressionAtomContext {
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public KW_BINARY(): antlr.TerminalNode {
        return this.getToken(MySqlParser.KW_BINARY, 0)!;
    }
    public expressionAtom(): ExpressionAtomContext {
        return this.getRuleContext(0, ExpressionAtomContext)!;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterBinaryExpressionAtom) {
             listener.enterBinaryExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitBinaryExpressionAtom) {
             listener.exitBinaryExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitBinaryExpressionAtom) {
            return visitor.visitBinaryExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
export class BitExpressionAtomContext extends ExpressionAtomContext {
    public _left?: ExpressionAtomContext;
    public _right?: ExpressionAtomContext;
    public constructor(ctx: ExpressionAtomContext) {
        super(ctx.parent, ctx.invokingState);
        super.copyFrom(ctx);
    }
    public bitOperator(): BitOperatorContext {
        return this.getRuleContext(0, BitOperatorContext)!;
    }
    public expressionAtom(): ExpressionAtomContext[];
    public expressionAtom(i: number): ExpressionAtomContext | null;
    public expressionAtom(i?: number): ExpressionAtomContext[] | ExpressionAtomContext | null {
        if (i === undefined) {
            return this.getRuleContexts(ExpressionAtomContext);
        }

        return this.getRuleContext(i, ExpressionAtomContext);
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterBitExpressionAtom) {
             listener.enterBitExpressionAtom(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitBitExpressionAtom) {
             listener.exitBitExpressionAtom(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitBitExpressionAtom) {
            return visitor.visitBitExpressionAtom(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class UnaryOperatorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public EXCLAMATION_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EXCLAMATION_SYMBOL, 0);
    }
    public BIT_NOT_OP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.BIT_NOT_OP, 0);
    }
    public PLUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.PLUS, 0);
    }
    public MINUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.MINUS, 0);
    }
    public KW_NOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_unaryOperator;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterUnaryOperator) {
             listener.enterUnaryOperator(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitUnaryOperator) {
             listener.exitUnaryOperator(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitUnaryOperator) {
            return visitor.visitUnaryOperator(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ComparisonOperatorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LESS_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LESS_SYMBOL, 0);
    }
    public GREATER_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.GREATER_SYMBOL, 0);
    }
    public EXCLAMATION_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EXCLAMATION_SYMBOL, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public comparisonBase(): ComparisonBaseContext | null {
        return this.getRuleContext(0, ComparisonBaseContext);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_comparisonOperator;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterComparisonOperator) {
             listener.enterComparisonOperator(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitComparisonOperator) {
             listener.exitComparisonOperator(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitComparisonOperator) {
            return visitor.visitComparisonOperator(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class ComparisonBaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LESS_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.LESS_SYMBOL, 0);
    }
    public EQUAL_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.EQUAL_SYMBOL, 0);
    }
    public GREATER_SYMBOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.GREATER_SYMBOL, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_comparisonBase;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterComparisonBase) {
             listener.enterComparisonBase(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitComparisonBase) {
             listener.exitComparisonBase(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitComparisonBase) {
            return visitor.visitComparisonBase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class LogicalOperatorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_AND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AND, 0);
    }
    public BIT_AND_OP(): antlr.TerminalNode[];
    public BIT_AND_OP(i: number): antlr.TerminalNode | null;
    public BIT_AND_OP(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.BIT_AND_OP);
    	} else {
    		return this.getToken(MySqlParser.BIT_AND_OP, i);
    	}
    }
    public KW_XOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_XOR, 0);
    }
    public KW_OR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OR, 0);
    }
    public BIT_OR_OP(): antlr.TerminalNode[];
    public BIT_OR_OP(i: number): antlr.TerminalNode | null;
    public BIT_OR_OP(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.BIT_OR_OP);
    	} else {
    		return this.getToken(MySqlParser.BIT_OR_OP, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_logicalOperator;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterLogicalOperator) {
             listener.enterLogicalOperator(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitLogicalOperator) {
             listener.exitLogicalOperator(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitLogicalOperator) {
            return visitor.visitLogicalOperator(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class BitOperatorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public LESS_SYMBOL(): antlr.TerminalNode[];
    public LESS_SYMBOL(i: number): antlr.TerminalNode | null;
    public LESS_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.LESS_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.LESS_SYMBOL, i);
    	}
    }
    public GREATER_SYMBOL(): antlr.TerminalNode[];
    public GREATER_SYMBOL(i: number): antlr.TerminalNode | null;
    public GREATER_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.GREATER_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.GREATER_SYMBOL, i);
    	}
    }
    public BIT_AND_OP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.BIT_AND_OP, 0);
    }
    public BIT_XOR_OP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.BIT_XOR_OP, 0);
    }
    public BIT_OR_OP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.BIT_OR_OP, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_bitOperator;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterBitOperator) {
             listener.enterBitOperator(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitBitOperator) {
             listener.exitBitOperator(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitBitOperator) {
            return visitor.visitBitOperator(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class MathOperatorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public STAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.STAR, 0);
    }
    public DIVIDE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.DIVIDE, 0);
    }
    public MODULE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.MODULE, 0);
    }
    public DIV(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.DIV, 0);
    }
    public MOD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.MOD, 0);
    }
    public PLUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.PLUS, 0);
    }
    public MINUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.MINUS, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_mathOperator;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterMathOperator) {
             listener.enterMathOperator(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitMathOperator) {
             listener.exitMathOperator(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitMathOperator) {
            return visitor.visitMathOperator(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class JsonOperatorContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public MINUS(): antlr.TerminalNode {
        return this.getToken(MySqlParser.MINUS, 0)!;
    }
    public GREATER_SYMBOL(): antlr.TerminalNode[];
    public GREATER_SYMBOL(i: number): antlr.TerminalNode | null;
    public GREATER_SYMBOL(i?: number): antlr.TerminalNode | null | antlr.TerminalNode[] {
    	if (i === undefined) {
    		return this.getTokens(MySqlParser.GREATER_SYMBOL);
    	} else {
    		return this.getToken(MySqlParser.GREATER_SYMBOL, i);
    	}
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_jsonOperator;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterJsonOperator) {
             listener.enterJsonOperator(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitJsonOperator) {
             listener.exitJsonOperator(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitJsonOperator) {
            return visitor.visitJsonOperator(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class CharsetNameBaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ARMSCII8(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ARMSCII8, 0);
    }
    public KW_ASCII(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ASCII, 0);
    }
    public KW_BIG5(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BIG5, 0);
    }
    public KW_BINARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINARY, 0);
    }
    public KW_CP1250(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CP1250, 0);
    }
    public KW_CP1251(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CP1251, 0);
    }
    public KW_CP1256(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CP1256, 0);
    }
    public KW_CP1257(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CP1257, 0);
    }
    public KW_CP850(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CP850, 0);
    }
    public KW_CP852(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CP852, 0);
    }
    public KW_CP866(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CP866, 0);
    }
    public KW_CP932(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CP932, 0);
    }
    public KW_DEC8(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEC8, 0);
    }
    public KW_EUCJPMS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EUCJPMS, 0);
    }
    public KW_EUCKR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EUCKR, 0);
    }
    public KW_GB18030(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GB18030, 0);
    }
    public KW_GB2312(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GB2312, 0);
    }
    public KW_GBK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GBK, 0);
    }
    public KW_GEOSTD8(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GEOSTD8, 0);
    }
    public KW_GREEK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GREEK, 0);
    }
    public KW_HEBREW(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HEBREW, 0);
    }
    public KW_HP8(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HP8, 0);
    }
    public KW_KEYBCS2(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEYBCS2, 0);
    }
    public KW_KOI8R(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KOI8R, 0);
    }
    public KW_KOI8U(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KOI8U, 0);
    }
    public KW_LATIN1(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LATIN1, 0);
    }
    public KW_LATIN2(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LATIN2, 0);
    }
    public KW_LATIN5(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LATIN5, 0);
    }
    public KW_LATIN7(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LATIN7, 0);
    }
    public KW_MACCE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MACCE, 0);
    }
    public KW_MACROMAN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MACROMAN, 0);
    }
    public KW_SJIS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SJIS, 0);
    }
    public KW_SWE7(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SWE7, 0);
    }
    public KW_TIS620(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TIS620, 0);
    }
    public KW_UCS2(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UCS2, 0);
    }
    public KW_UJIS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UJIS, 0);
    }
    public KW_UTF16(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UTF16, 0);
    }
    public KW_UTF16LE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UTF16LE, 0);
    }
    public KW_UTF32(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UTF32, 0);
    }
    public KW_UTF8(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UTF8, 0);
    }
    public KW_UTF8MB3(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UTF8MB3, 0);
    }
    public KW_UTF8MB4(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UTF8MB4, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_charsetNameBase;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterCharsetNameBase) {
             listener.enterCharsetNameBase(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitCharsetNameBase) {
             listener.exitCharsetNameBase(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitCharsetNameBase) {
            return visitor.visitCharsetNameBase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class TransactionLevelBaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_REPEATABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPEATABLE, 0);
    }
    public KW_COMMITTED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMMITTED, 0);
    }
    public KW_UNCOMMITTED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNCOMMITTED, 0);
    }
    public KW_SERIALIZABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SERIALIZABLE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_transactionLevelBase;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterTransactionLevelBase) {
             listener.enterTransactionLevelBase(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitTransactionLevelBase) {
             listener.exitTransactionLevelBase(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitTransactionLevelBase) {
            return visitor.visitTransactionLevelBase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class PrivilegesBaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_TABLES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLES, 0);
    }
    public KW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROUTINE, 0);
    }
    public KW_EXECUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXECUTE, 0);
    }
    public KW_FILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FILE, 0);
    }
    public KW_PROCESS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROCESS, 0);
    }
    public KW_RELOAD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELOAD, 0);
    }
    public KW_SHUTDOWN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SHUTDOWN, 0);
    }
    public KW_SUPER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUPER, 0);
    }
    public KW_PRIVILEGES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRIVILEGES, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_privilegesBase;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterPrivilegesBase) {
             listener.enterPrivilegesBase(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitPrivilegesBase) {
             listener.exitPrivilegesBase(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitPrivilegesBase) {
            return visitor.visitPrivilegesBase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class IntervalTypeBaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_QUARTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUARTER, 0);
    }
    public KW_MONTH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MONTH, 0);
    }
    public KW_DAY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DAY, 0);
    }
    public KW_HOUR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HOUR, 0);
    }
    public KW_MINUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MINUTE, 0);
    }
    public KW_WEEK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WEEK, 0);
    }
    public KW_SECOND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SECOND, 0);
    }
    public KW_MICROSECOND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MICROSECOND, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_intervalTypeBase;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterIntervalTypeBase) {
             listener.enterIntervalTypeBase(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitIntervalTypeBase) {
             listener.exitIntervalTypeBase(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitIntervalTypeBase) {
            return visitor.visitIntervalTypeBase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class DataTypeBaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_DATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATE, 0);
    }
    public KW_TIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TIME, 0);
    }
    public KW_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TIMESTAMP, 0);
    }
    public KW_DATETIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATETIME, 0);
    }
    public KW_YEAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_YEAR, 0);
    }
    public KW_ENUM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENUM, 0);
    }
    public KW_TEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TEXT, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_dataTypeBase;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterDataTypeBase) {
             listener.enterDataTypeBase(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitDataTypeBase) {
             listener.exitDataTypeBase(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitDataTypeBase) {
            return visitor.visitDataTypeBase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class KeywordsCanBeIdContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_ACCOUNT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ACCOUNT, 0);
    }
    public KW_ACTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ACTION, 0);
    }
    public KW_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ADMIN, 0);
    }
    public KW_AFTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AFTER, 0);
    }
    public KW_AGGREGATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AGGREGATE, 0);
    }
    public KW_ALGORITHM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ALGORITHM, 0);
    }
    public KW_ANY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ANY, 0);
    }
    public KW_ARRAY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ARRAY, 0);
    }
    public KW_AT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AT, 0);
    }
    public KW_AUDIT_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUDIT_ADMIN, 0);
    }
    public KW_AUDIT_ABORT_EXEMPT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUDIT_ABORT_EXEMPT, 0);
    }
    public KW_AUTHORS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUTHORS, 0);
    }
    public KW_AUTOCOMMIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUTOCOMMIT, 0);
    }
    public KW_AUTOEXTEND_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUTOEXTEND_SIZE, 0);
    }
    public KW_AUTO_INCREMENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUTO_INCREMENT, 0);
    }
    public KW_AUTHENTICATION_POLICY_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AUTHENTICATION_POLICY_ADMIN, 0);
    }
    public KW_AVG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AVG, 0);
    }
    public KW_AVG_ROW_LENGTH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_AVG_ROW_LENGTH, 0);
    }
    public KW_ATTRIBUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ATTRIBUTE, 0);
    }
    public KW_BACKUP_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BACKUP_ADMIN, 0);
    }
    public KW_BEGIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BEGIN, 0);
    }
    public KW_BINLOG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINLOG, 0);
    }
    public KW_BINLOG_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINLOG_ADMIN, 0);
    }
    public KW_BINLOG_ENCRYPTION_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BINLOG_ENCRYPTION_ADMIN, 0);
    }
    public KW_BIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BIT, 0);
    }
    public KW_BIT_AND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BIT_AND, 0);
    }
    public KW_BIT_OR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BIT_OR, 0);
    }
    public KW_BIT_XOR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BIT_XOR, 0);
    }
    public KW_BLOCK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BLOCK, 0);
    }
    public KW_BOOL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BOOL, 0);
    }
    public KW_BOOLEAN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BOOLEAN, 0);
    }
    public KW_BTREE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BTREE, 0);
    }
    public KW_BUCKETS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_BUCKETS, 0);
    }
    public KW_CACHE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CACHE, 0);
    }
    public KW_CASCADED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CASCADED, 0);
    }
    public KW_CHAIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHAIN, 0);
    }
    public KW_CHANGED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHANGED, 0);
    }
    public KW_CHANNEL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHANNEL, 0);
    }
    public KW_CHECKSUM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHECKSUM, 0);
    }
    public KW_PAGE_CHECKSUM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PAGE_CHECKSUM, 0);
    }
    public KW_CATALOG_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CATALOG_NAME, 0);
    }
    public KW_CIPHER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CIPHER, 0);
    }
    public KW_CLASS_ORIGIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CLASS_ORIGIN, 0);
    }
    public KW_CLIENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CLIENT, 0);
    }
    public KW_CLONE_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CLONE_ADMIN, 0);
    }
    public KW_CLOSE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CLOSE, 0);
    }
    public KW_COALESCE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COALESCE, 0);
    }
    public KW_CODE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CODE, 0);
    }
    public KW_COLUMNS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMNS, 0);
    }
    public KW_COLUMN_FORMAT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMN_FORMAT, 0);
    }
    public KW_COLUMN_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLUMN_NAME, 0);
    }
    public KW_COMMENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMMENT, 0);
    }
    public KW_COMMIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMMIT, 0);
    }
    public KW_COMPACT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMPACT, 0);
    }
    public KW_COMPLETION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMPLETION, 0);
    }
    public KW_COMPRESSED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMPRESSED, 0);
    }
    public KW_COMPRESSION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COMPRESSION, 0);
    }
    public KW_CONCURRENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONCURRENT, 0);
    }
    public KW_CONDITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONDITION, 0);
    }
    public KW_CONNECT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONNECT, 0);
    }
    public KW_CONNECTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONNECTION, 0);
    }
    public KW_CONNECTION_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONNECTION_ADMIN, 0);
    }
    public KW_CONSISTENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSISTENT, 0);
    }
    public KW_CONSTRAINT_CATALOG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT_CATALOG, 0);
    }
    public KW_CONSTRAINT_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT_NAME, 0);
    }
    public KW_CONSTRAINT_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONSTRAINT_SCHEMA, 0);
    }
    public KW_CONTAINS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONTAINS, 0);
    }
    public KW_CONTEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONTEXT, 0);
    }
    public KW_CONTRIBUTORS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CONTRIBUTORS, 0);
    }
    public KW_COPY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COPY, 0);
    }
    public KW_COUNT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COUNT, 0);
    }
    public KW_CPU(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CPU, 0);
    }
    public KW_CURRENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT, 0);
    }
    public KW_CURRENT_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURRENT_USER, 0);
    }
    public KW_CURSOR_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CURSOR_NAME, 0);
    }
    public KW_DATA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATA, 0);
    }
    public KW_DATAFILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATAFILE, 0);
    }
    public KW_DEALLOCATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEALLOCATE, 0);
    }
    public KW_DEFAULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT, 0);
    }
    public KW_DEFAULT_AUTH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFAULT_AUTH, 0);
    }
    public KW_DEFINER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DEFINER, 0);
    }
    public KW_DELAY_KEY_WRITE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DELAY_KEY_WRITE, 0);
    }
    public KW_DES_KEY_FILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DES_KEY_FILE, 0);
    }
    public KW_DIAGNOSTICS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DIAGNOSTICS, 0);
    }
    public KW_DIRECTORY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DIRECTORY, 0);
    }
    public KW_DISABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISABLE, 0);
    }
    public KW_DISCARD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISCARD, 0);
    }
    public KW_DISK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DISK, 0);
    }
    public KW_DO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DO, 0);
    }
    public KW_DUMPFILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DUMPFILE, 0);
    }
    public KW_DUPLICATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DUPLICATE, 0);
    }
    public KW_DYNAMIC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DYNAMIC, 0);
    }
    public KW_EMPTY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EMPTY, 0);
    }
    public KW_ENABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENABLE, 0);
    }
    public KW_ENCRYPTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENCRYPTION, 0);
    }
    public KW_ENCRYPTION_KEY_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENCRYPTION_KEY_ADMIN, 0);
    }
    public KW_END(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_END, 0);
    }
    public KW_ENDS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENDS, 0);
    }
    public KW_ENGINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENGINE, 0);
    }
    public KW_ENGINE_ATTRIBUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENGINE_ATTRIBUTE, 0);
    }
    public KW_ENGINES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENGINES, 0);
    }
    public KW_ENFORCED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ENFORCED, 0);
    }
    public KW_ERROR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ERROR, 0);
    }
    public KW_ERRORS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ERRORS, 0);
    }
    public KW_ESCAPE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ESCAPE, 0);
    }
    public KW_EVENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EVENT, 0);
    }
    public KW_EVENTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EVENTS, 0);
    }
    public KW_EVERY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EVERY, 0);
    }
    public KW_EXCEPT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXCEPT, 0);
    }
    public KW_EXCHANGE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXCHANGE, 0);
    }
    public KW_EXCLUSIVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXCLUSIVE, 0);
    }
    public KW_EXPIRE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXPIRE, 0);
    }
    public KW_EXPORT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXPORT, 0);
    }
    public KW_EXTENDED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXTENDED, 0);
    }
    public KW_EXTENT_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_EXTENT_SIZE, 0);
    }
    public KW_FAILED_LOGIN_ATTEMPTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FAILED_LOGIN_ATTEMPTS, 0);
    }
    public KW_FAST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FAST, 0);
    }
    public KW_FAULTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FAULTS, 0);
    }
    public KW_FIELDS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIELDS, 0);
    }
    public KW_FILE_BLOCK_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FILE_BLOCK_SIZE, 0);
    }
    public KW_FILTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FILTER, 0);
    }
    public KW_FIREWALL_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIREWALL_ADMIN, 0);
    }
    public KW_FIREWALL_EXEMPT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIREWALL_EXEMPT, 0);
    }
    public KW_FIREWALL_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIREWALL_USER, 0);
    }
    public KW_FIRST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIRST, 0);
    }
    public KW_FIXED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIXED, 0);
    }
    public KW_FLUSH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FLUSH, 0);
    }
    public KW_FOLLOWS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOLLOWS, 0);
    }
    public KW_FOUND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FOUND, 0);
    }
    public KW_FULL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FULL, 0);
    }
    public KW_FUNCTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FUNCTION, 0);
    }
    public KW_GENERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GENERAL, 0);
    }
    public KW_GLOBAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GLOBAL, 0);
    }
    public KW_GRANTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GRANTS, 0);
    }
    public KW_GROUP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GROUP, 0);
    }
    public KW_GROUP_CONCAT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GROUP_CONCAT, 0);
    }
    public KW_GROUP_REPLICATION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GROUP_REPLICATION, 0);
    }
    public KW_GROUP_REPLICATION_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GROUP_REPLICATION_ADMIN, 0);
    }
    public KW_HANDLER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HANDLER, 0);
    }
    public KW_HASH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HASH, 0);
    }
    public KW_HELP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HELP, 0);
    }
    public KW_HISTORY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HISTORY, 0);
    }
    public KW_HOST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HOST, 0);
    }
    public KW_HOSTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HOSTS, 0);
    }
    public KW_IDENTIFIED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IDENTIFIED, 0);
    }
    public KW_IGNORE_SERVER_IDS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IGNORE_SERVER_IDS, 0);
    }
    public KW_IMPORT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IMPORT, 0);
    }
    public KW_INDEXES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INDEXES, 0);
    }
    public KW_INITIAL_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INITIAL_SIZE, 0);
    }
    public KW_INNODB_REDO_LOG_ARCHIVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INNODB_REDO_LOG_ARCHIVE, 0);
    }
    public KW_INPLACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INPLACE, 0);
    }
    public KW_INSERT_METHOD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INSERT_METHOD, 0);
    }
    public KW_INSTALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INSTALL, 0);
    }
    public KW_INSTANCE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INSTANCE, 0);
    }
    public KW_INSTANT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INSTANT, 0);
    }
    public KW_INVOKE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INVOKE, 0);
    }
    public KW_INVOKER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INVOKER, 0);
    }
    public KW_IO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IO, 0);
    }
    public KW_IO_THREAD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IO_THREAD, 0);
    }
    public KW_IPC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_IPC, 0);
    }
    public KW_ISOLATION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ISOLATION, 0);
    }
    public KW_ISSUER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ISSUER, 0);
    }
    public KW_JSON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_JSON, 0);
    }
    public KW_KEY_BLOCK_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_KEY_BLOCK_SIZE, 0);
    }
    public KW_LAMBDA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LAMBDA, 0);
    }
    public KW_LANGUAGE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LANGUAGE, 0);
    }
    public KW_LAST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LAST, 0);
    }
    public KW_LATERAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LATERAL, 0);
    }
    public KW_LEAVES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LEAVES, 0);
    }
    public KW_LESS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LESS, 0);
    }
    public KW_LEVEL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LEVEL, 0);
    }
    public KW_LIST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LIST, 0);
    }
    public KW_LOCAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOCAL, 0);
    }
    public KW_LOGFILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOGFILE, 0);
    }
    public KW_LOGS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LOGS, 0);
    }
    public KW_MASTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER, 0);
    }
    public KW_MASTER_AUTO_POSITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_AUTO_POSITION, 0);
    }
    public KW_MASTER_CONNECT_RETRY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_CONNECT_RETRY, 0);
    }
    public KW_MASTER_DELAY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_DELAY, 0);
    }
    public KW_MASTER_HEARTBEAT_PERIOD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_HEARTBEAT_PERIOD, 0);
    }
    public KW_MASTER_HOST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_HOST, 0);
    }
    public KW_MASTER_LOG_FILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_LOG_FILE, 0);
    }
    public KW_MASTER_LOG_POS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_LOG_POS, 0);
    }
    public KW_MASTER_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_PASSWORD, 0);
    }
    public KW_MASTER_PORT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_PORT, 0);
    }
    public KW_MASTER_RETRY_COUNT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_RETRY_COUNT, 0);
    }
    public KW_MASTER_SSL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL, 0);
    }
    public KW_MASTER_SSL_CA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_CA, 0);
    }
    public KW_MASTER_SSL_CAPATH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_CAPATH, 0);
    }
    public KW_MASTER_SSL_CERT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_CERT, 0);
    }
    public KW_MASTER_SSL_CIPHER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_CIPHER, 0);
    }
    public KW_MASTER_SSL_CRL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_CRL, 0);
    }
    public KW_MASTER_SSL_CRLPATH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_CRLPATH, 0);
    }
    public KW_MASTER_SSL_KEY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_SSL_KEY, 0);
    }
    public KW_MASTER_TLS_VERSION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_TLS_VERSION, 0);
    }
    public KW_MASTER_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MASTER_USER, 0);
    }
    public KW_MAX_CONNECTIONS_PER_HOUR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX_CONNECTIONS_PER_HOUR, 0);
    }
    public KW_MAX_QUERIES_PER_HOUR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX_QUERIES_PER_HOUR, 0);
    }
    public KW_MAX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX, 0);
    }
    public KW_MAX_ROWS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX_ROWS, 0);
    }
    public KW_MAX_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX_SIZE, 0);
    }
    public KW_MAX_UPDATES_PER_HOUR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX_UPDATES_PER_HOUR, 0);
    }
    public KW_MAX_USER_CONNECTIONS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MAX_USER_CONNECTIONS, 0);
    }
    public KW_MEDIUM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MEDIUM, 0);
    }
    public KW_MEMBER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MEMBER, 0);
    }
    public KW_MEMORY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MEMORY, 0);
    }
    public KW_MERGE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MERGE, 0);
    }
    public KW_MESSAGE_TEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MESSAGE_TEXT, 0);
    }
    public KW_MID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MID, 0);
    }
    public KW_MIGRATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MIGRATE, 0);
    }
    public KW_MIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MIN, 0);
    }
    public KW_MIN_ROWS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MIN_ROWS, 0);
    }
    public KW_MODE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MODE, 0);
    }
    public KW_MODIFY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MODIFY, 0);
    }
    public KW_MUTEX(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MUTEX, 0);
    }
    public KW_MYSQL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MYSQL, 0);
    }
    public KW_MYSQL_ERRNO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MYSQL_ERRNO, 0);
    }
    public KW_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NAME, 0);
    }
    public KW_NAMES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NAMES, 0);
    }
    public KW_NCHAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NCHAR, 0);
    }
    public KW_NDB_STORED_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NDB_STORED_USER, 0);
    }
    public KW_NESTED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NESTED, 0);
    }
    public KW_NEVER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NEVER, 0);
    }
    public KW_NEXT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NEXT, 0);
    }
    public KW_NO(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NO, 0);
    }
    public KW_NODEGROUP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NODEGROUP, 0);
    }
    public KW_NONE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NONE, 0);
    }
    public KW_NOWAIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NOWAIT, 0);
    }
    public KW_NUMBER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NUMBER, 0);
    }
    public KW_ODBC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ODBC, 0);
    }
    public KW_OFFLINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OFFLINE, 0);
    }
    public KW_OFFSET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OFFSET, 0);
    }
    public KW_OF(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OF, 0);
    }
    public KW_OLD_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OLD_PASSWORD, 0);
    }
    public KW_ONE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ONE, 0);
    }
    public KW_ONLINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ONLINE, 0);
    }
    public KW_ONLY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ONLY, 0);
    }
    public KW_OPEN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OPEN, 0);
    }
    public KW_OPTIMIZER_COSTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OPTIMIZER_COSTS, 0);
    }
    public KW_OPTIONAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OPTIONAL, 0);
    }
    public KW_OPTIONS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OPTIONS, 0);
    }
    public KW_ORDER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ORDER, 0);
    }
    public KW_ORDINALITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ORDINALITY, 0);
    }
    public KW_OWNER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_OWNER, 0);
    }
    public KW_PACK_KEYS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PACK_KEYS, 0);
    }
    public KW_PAGE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PAGE, 0);
    }
    public KW_PARSER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARSER, 0);
    }
    public KW_PARTIAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTIAL, 0);
    }
    public KW_PARTITIONING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTITIONING, 0);
    }
    public KW_PARTITIONS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PARTITIONS, 0);
    }
    public KW_PASSWORD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD, 0);
    }
    public KW_PASSWORDLESS_USER_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORDLESS_USER_ADMIN, 0);
    }
    public KW_PASSWORD_LOCK_TIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PASSWORD_LOCK_TIME, 0);
    }
    public KW_PATH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PATH, 0);
    }
    public KW_PERSIST_RO_VARIABLES_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PERSIST_RO_VARIABLES_ADMIN, 0);
    }
    public KW_PHASE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PHASE, 0);
    }
    public KW_PLUGINS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PLUGINS, 0);
    }
    public KW_PLUGIN_DIR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PLUGIN_DIR, 0);
    }
    public KW_PLUGIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PLUGIN, 0);
    }
    public KW_PORT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PORT, 0);
    }
    public KW_PRECEDES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRECEDES, 0);
    }
    public KW_PREPARE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PREPARE, 0);
    }
    public KW_PRESERVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRESERVE, 0);
    }
    public KW_PREV(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PREV, 0);
    }
    public KW_PRIMARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PRIMARY, 0);
    }
    public KW_PROCESSLIST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROCESSLIST, 0);
    }
    public KW_PROFILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROFILE, 0);
    }
    public KW_PROFILES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROFILES, 0);
    }
    public KW_PROXY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PROXY, 0);
    }
    public KW_QUERY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUERY, 0);
    }
    public KW_QUICK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUICK, 0);
    }
    public KW_REBUILD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REBUILD, 0);
    }
    public KW_RECOVER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RECOVER, 0);
    }
    public KW_RECURSIVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RECURSIVE, 0);
    }
    public KW_REDO_BUFFER_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REDO_BUFFER_SIZE, 0);
    }
    public KW_REDUNDANT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REDUNDANT, 0);
    }
    public KW_RELAY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELAY, 0);
    }
    public KW_RELAYLOG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELAYLOG, 0);
    }
    public KW_RELAY_LOG_FILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELAY_LOG_FILE, 0);
    }
    public KW_RELAY_LOG_POS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RELAY_LOG_POS, 0);
    }
    public KW_REMOVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REMOVE, 0);
    }
    public KW_REORGANIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REORGANIZE, 0);
    }
    public KW_REPAIR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPAIR, 0);
    }
    public KW_REPLICATE_DO_DB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATE_DO_DB, 0);
    }
    public KW_REPLICATE_DO_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATE_DO_TABLE, 0);
    }
    public KW_REPLICATE_IGNORE_DB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATE_IGNORE_DB, 0);
    }
    public KW_REPLICATE_IGNORE_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATE_IGNORE_TABLE, 0);
    }
    public KW_REPLICATE_REWRITE_DB(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATE_REWRITE_DB, 0);
    }
    public KW_REPLICATE_WILD_DO_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATE_WILD_DO_TABLE, 0);
    }
    public KW_REPLICATE_WILD_IGNORE_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATE_WILD_IGNORE_TABLE, 0);
    }
    public KW_REPLICATION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATION, 0);
    }
    public KW_REPLICATION_APPLIER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATION_APPLIER, 0);
    }
    public KW_REPLICATION_SLAVE_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REPLICATION_SLAVE_ADMIN, 0);
    }
    public KW_RESET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RESET, 0);
    }
    public KW_RESOURCE_GROUP_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RESOURCE_GROUP_ADMIN, 0);
    }
    public KW_RESOURCE_GROUP_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RESOURCE_GROUP_USER, 0);
    }
    public KW_RESUME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RESUME, 0);
    }
    public KW_RETURNED_SQLSTATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RETURNED_SQLSTATE, 0);
    }
    public KW_RETURNS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RETURNS, 0);
    }
    public KW_REUSE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REUSE, 0);
    }
    public KW_ROLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROLE, 0);
    }
    public KW_ROLE_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROLE_ADMIN, 0);
    }
    public KW_ROLLBACK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROLLBACK, 0);
    }
    public KW_ROLLUP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROLLUP, 0);
    }
    public KW_ROTATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROTATE, 0);
    }
    public KW_ROW(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROW, 0);
    }
    public KW_ROWS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROWS, 0);
    }
    public KW_ROW_FORMAT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROW_FORMAT, 0);
    }
    public KW_S3(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_S3, 0);
    }
    public KW_SAVEPOINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SAVEPOINT, 0);
    }
    public KW_SCHEDULE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEDULE, 0);
    }
    public KW_SCHEMA_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEMA_NAME, 0);
    }
    public KW_SECURITY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SECURITY, 0);
    }
    public KW_SECONDARY_ENGINE_ATTRIBUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SECONDARY_ENGINE_ATTRIBUTE, 0);
    }
    public KW_SERIAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SERIAL, 0);
    }
    public KW_SERVER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SERVER, 0);
    }
    public KW_SESSION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SESSION, 0);
    }
    public KW_SESSION_VARIABLES_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SESSION_VARIABLES_ADMIN, 0);
    }
    public KW_SET_USER_ID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SET_USER_ID, 0);
    }
    public KW_SHARE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SHARE, 0);
    }
    public KW_SHARED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SHARED, 0);
    }
    public KW_SHOW_ROUTINE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SHOW_ROUTINE, 0);
    }
    public KW_SIGNED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SIGNED, 0);
    }
    public KW_SIMPLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SIMPLE, 0);
    }
    public KW_SLAVE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SLAVE, 0);
    }
    public KW_SLOW(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SLOW, 0);
    }
    public KW_SKIP_QUERY_REWRITE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SKIP_QUERY_REWRITE, 0);
    }
    public KW_SNAPSHOT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SNAPSHOT, 0);
    }
    public KW_SOCKET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOCKET, 0);
    }
    public KW_SOME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOME, 0);
    }
    public KW_SONAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SONAME, 0);
    }
    public KW_SOUNDS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOUNDS, 0);
    }
    public KW_SOURCE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SOURCE, 0);
    }
    public KW_SQL_AFTER_GTIDS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_AFTER_GTIDS, 0);
    }
    public KW_SQL_AFTER_MTS_GAPS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_AFTER_MTS_GAPS, 0);
    }
    public KW_SQL_BEFORE_GTIDS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_BEFORE_GTIDS, 0);
    }
    public KW_SQL_BUFFER_RESULT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_BUFFER_RESULT, 0);
    }
    public KW_SQL_CACHE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_CACHE, 0);
    }
    public KW_SQL_NO_CACHE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_NO_CACHE, 0);
    }
    public KW_SQL_THREAD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SQL_THREAD, 0);
    }
    public KW_STACKED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STACKED, 0);
    }
    public KW_START(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_START, 0);
    }
    public KW_STARTS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STARTS, 0);
    }
    public KW_STATS_AUTO_RECALC(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STATS_AUTO_RECALC, 0);
    }
    public KW_STATS_PERSISTENT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STATS_PERSISTENT, 0);
    }
    public KW_STATS_SAMPLE_PAGES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STATS_SAMPLE_PAGES, 0);
    }
    public KW_STATUS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STATUS, 0);
    }
    public KW_STD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STD, 0);
    }
    public KW_STDDEV(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STDDEV, 0);
    }
    public KW_STDDEV_POP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STDDEV_POP, 0);
    }
    public KW_STDDEV_SAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STDDEV_SAMP, 0);
    }
    public KW_STOP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STOP, 0);
    }
    public KW_STORAGE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STORAGE, 0);
    }
    public KW_STRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_STRING, 0);
    }
    public KW_SUBCLASS_ORIGIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBCLASS_ORIGIN, 0);
    }
    public KW_SUBJECT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBJECT, 0);
    }
    public KW_SUBPARTITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBPARTITION, 0);
    }
    public KW_SUBPARTITIONS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUBPARTITIONS, 0);
    }
    public KW_SUM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUM, 0);
    }
    public KW_SUSPEND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SUSPEND, 0);
    }
    public KW_SWAPS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SWAPS, 0);
    }
    public KW_SWITCHES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SWITCHES, 0);
    }
    public KW_SYSTEM_VARIABLES_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SYSTEM_VARIABLES_ADMIN, 0);
    }
    public KW_TABLE_NAME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE_NAME, 0);
    }
    public KW_TABLESPACE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLESPACE, 0);
    }
    public KW_TABLE_ENCRYPTION_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE_ENCRYPTION_ADMIN, 0);
    }
    public KW_TABLE_TYPE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TABLE_TYPE, 0);
    }
    public KW_TEMPORARY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TEMPORARY, 0);
    }
    public KW_TEMPTABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TEMPTABLE, 0);
    }
    public KW_THAN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_THAN, 0);
    }
    public KW_TP_CONNECTION_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TP_CONNECTION_ADMIN, 0);
    }
    public KW_TRADITIONAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRADITIONAL, 0);
    }
    public KW_TRANSACTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRANSACTION, 0);
    }
    public KW_TRANSACTIONAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRANSACTIONAL, 0);
    }
    public KW_TRIGGERS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRIGGERS, 0);
    }
    public KW_TRUNCATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TRUNCATE, 0);
    }
    public KW_UNBOUNDED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNBOUNDED, 0);
    }
    public KW_UNDEFINED(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNDEFINED, 0);
    }
    public KW_UNDOFILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNDOFILE, 0);
    }
    public KW_UNDO_BUFFER_SIZE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNDO_BUFFER_SIZE, 0);
    }
    public KW_UNINSTALL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNINSTALL, 0);
    }
    public KW_UNKNOWN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNKNOWN, 0);
    }
    public KW_UNTIL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UNTIL, 0);
    }
    public KW_UPGRADE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_UPGRADE, 0);
    }
    public KW_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USER, 0);
    }
    public KW_USE_FRM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USE_FRM, 0);
    }
    public KW_USER_RESOURCES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_USER_RESOURCES, 0);
    }
    public KW_VALIDATION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VALIDATION, 0);
    }
    public KW_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VALUE, 0);
    }
    public KW_VAR_POP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VAR_POP, 0);
    }
    public KW_VAR_SAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VAR_SAMP, 0);
    }
    public KW_VARIABLES(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VARIABLES, 0);
    }
    public KW_VARIANCE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VARIANCE, 0);
    }
    public KW_VERSION_TOKEN_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VERSION_TOKEN_ADMIN, 0);
    }
    public KW_VIEW(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VIEW, 0);
    }
    public KW_VIRTUAL(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VIRTUAL, 0);
    }
    public KW_WAIT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WAIT, 0);
    }
    public KW_WARNINGS(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WARNINGS, 0);
    }
    public KW_WITHOUT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WITHOUT, 0);
    }
    public KW_WORK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WORK, 0);
    }
    public KW_WRAPPER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WRAPPER, 0);
    }
    public KW_X509(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_X509, 0);
    }
    public KW_XA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_XA, 0);
    }
    public KW_XA_RECOVER_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_XA_RECOVER_ADMIN, 0);
    }
    public KW_XML(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_XML, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_keywordsCanBeId;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterKeywordsCanBeId) {
             listener.enterKeywordsCanBeId(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitKeywordsCanBeId) {
             listener.exitKeywordsCanBeId(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitKeywordsCanBeId) {
            return visitor.visitKeywordsCanBeId(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}


export class FunctionNameBaseContext extends antlr.ParserRuleContext {
    public constructor(parent: antlr.ParserRuleContext | null, invokingState: number) {
        super(parent, invokingState);
    }
    public KW_CHARSET(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CHARSET, 0);
    }
    public KW_COLLATION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COLLATION, 0);
    }
    public KW_COUNT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_COUNT, 0);
    }
    public KW_CUME_DIST(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_CUME_DIST, 0);
    }
    public KW_DATABASE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATABASE, 0);
    }
    public KW_DATE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DATE, 0);
    }
    public KW_DAY(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DAY, 0);
    }
    public KW_DENSE_RANK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_DENSE_RANK, 0);
    }
    public KW_FIRST_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FIRST_VALUE, 0);
    }
    public KW_FORMAT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_FORMAT, 0);
    }
    public KW_GEOMETRYCOLLECTION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GEOMETRYCOLLECTION, 0);
    }
    public KW_GET_FORMAT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_GET_FORMAT, 0);
    }
    public KW_HOUR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_HOUR, 0);
    }
    public KW_INVISIBLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_INVISIBLE, 0);
    }
    public KW_LAG(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LAG, 0);
    }
    public KW_LAST_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LAST_VALUE, 0);
    }
    public KW_LEAD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LEAD, 0);
    }
    public KW_LEFT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LEFT, 0);
    }
    public KW_LINESTRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_LINESTRING, 0);
    }
    public KW_MICROSECOND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MICROSECOND, 0);
    }
    public KW_MINUTE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MINUTE, 0);
    }
    public MOD(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.MOD, 0);
    }
    public KW_MONTH(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MONTH, 0);
    }
    public KW_MULTILINESTRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MULTILINESTRING, 0);
    }
    public KW_MULTIPOINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MULTIPOINT, 0);
    }
    public KW_MULTIPOLYGON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_MULTIPOLYGON, 0);
    }
    public KW_NTH_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NTH_VALUE, 0);
    }
    public KW_NTILE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_NTILE, 0);
    }
    public KW_PERCENT_RANK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_PERCENT_RANK, 0);
    }
    public KW_POINT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_POINT, 0);
    }
    public KW_POLYGON(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_POLYGON, 0);
    }
    public KW_POSITION(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_POSITION, 0);
    }
    public KW_QUARTER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_QUARTER, 0);
    }
    public KW_RANDOM(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RANDOM, 0);
    }
    public KW_RANK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RANK, 0);
    }
    public KW_REVERSE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_REVERSE, 0);
    }
    public KW_RIGHT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_RIGHT, 0);
    }
    public KW_ROW_COUNT(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROW_COUNT, 0);
    }
    public KW_ROW_NUMBER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_ROW_NUMBER, 0);
    }
    public KW_SCHEMA(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SCHEMA, 0);
    }
    public KW_SECOND(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SECOND, 0);
    }
    public KW_SESSION_VARIABLES_ADMIN(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SESSION_VARIABLES_ADMIN, 0);
    }
    public KW_SRID(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SRID, 0);
    }
    public KW_SYSTEM_USER(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_SYSTEM_USER, 0);
    }
    public KW_TIME(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TIME, 0);
    }
    public KW_TIMESTAMP(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_TIMESTAMP, 0);
    }
    public KW_VISIBLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_VISIBLE, 0);
    }
    public KW_WEEK(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WEEK, 0);
    }
    public KW_WEIGHT_STRING(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_WEIGHT_STRING, 0);
    }
    public KW_YEAR(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_YEAR, 0);
    }
    public KW_JSON_VALUE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_JSON_VALUE, 0);
    }
    public KW_JSON_TABLE(): antlr.TerminalNode | null {
        return this.getToken(MySqlParser.KW_JSON_TABLE, 0);
    }
    public override get ruleIndex(): number {
        return MySqlParser.RULE_functionNameBase;
    }
    public override enterRule(listener: MySqlParserListener): void {
        if(listener.enterFunctionNameBase) {
             listener.enterFunctionNameBase(this);
        }
    }
    public override exitRule(listener: MySqlParserListener): void {
        if(listener.exitFunctionNameBase) {
             listener.exitFunctionNameBase(this);
        }
    }
    public override accept<Result>(visitor: MySqlParserVisitor<Result>): Result | null {
        if (visitor.visitFunctionNameBase) {
            return visitor.visitFunctionNameBase(this);
        } else {
            return visitor.visitChildren(this);
        }
    }
}
